// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !disable_events

package severity_test

import (
	"context"
	"strings"
	"testing"

	"golang.org/x/exp/event"
	"golang.org/x/exp/event/adapter/eventtest"
	"golang.org/x/exp/event/adapter/logfmt"
	"golang.org/x/exp/event/severity"
)

func TestPrint(t *testing.T) {
	//TODO: print the textual form of severity
	ctx := context.Background()
	for _, test := range []struct {
		name   string
		events func(context.Context)
		expect string
	}{{
		name:   "debug",
		events: func(ctx context.Context) { event.To(ctx).With(severity.Debug).Log("a message") },
		expect: `time=2020-03-05T14:27:48 level=debug msg="a message"`,
	}, {
		name:   "info",
		events: func(ctx context.Context) { event.To(ctx).With(severity.Info).Log("a message") },
		expect: `time=2020-03-05T14:27:48 level=info msg="a message"`},
	} {
		buf := &strings.Builder{}
		ctx := event.WithExporter(ctx, event.NewExporter(logfmt.NewHandler(buf)))
		eventtest.FixedNow(ctx)
		test.events(ctx)
		got := strings.TrimSpace(buf.String())
		expect := strings.TrimSpace(test.expect)
		if got != expect {
			t.Errorf("%s failed\ngot   : %q\nexpect: %q", test.name, got, expect)
		}
	}
}
