...
1 package benchmarks
2
3 import (
4 "bytes"
5 "context"
6 "testing"
7
8 "golang.org/x/exp/slices"
9 "golang.org/x/exp/slog"
10 )
11
12 func TestHandlers(t *testing.T) {
13 ctx := context.Background()
14 r := slog.NewRecord(TestTime, slog.LevelInfo, TestMessage, 0)
15 r.AddAttrs(TestAttrs...)
16 t.Run("text", func(t *testing.T) {
17 var b bytes.Buffer
18 h := newFastTextHandler(&b)
19 if err := h.Handle(ctx, r); err != nil {
20 t.Fatal(err)
21 }
22 got := b.String()
23 if got != WantText {
24 t.Errorf("\ngot %q\nwant %q", got, WantText)
25 }
26 })
27 t.Run("async", func(t *testing.T) {
28 h := newAsyncHandler()
29 if err := h.Handle(ctx, r); err != nil {
30 t.Fatal(err)
31 }
32 got := h.ringBuffer[0]
33 if !got.Time.Equal(r.Time) || !slices.EqualFunc(attrSlice(got), attrSlice(r), slog.Attr.Equal) {
34 t.Errorf("got %+v, want %+v", got, r)
35 }
36 })
37 }
38
39 func attrSlice(r slog.Record) []slog.Attr {
40 var as []slog.Attr
41 r.Attrs(func(a slog.Attr) bool { as = append(as, a); return true })
42 return as
43 }
44
View as plain text