| package benchmarks |
| |
| import ( |
| "bytes" |
| "context" |
| "testing" |
| |
| "golang.org/x/exp/slices" |
| "golang.org/x/exp/slog" |
| ) |
| |
| func TestHandlers(t *testing.T) { |
| ctx := context.Background() |
| r := slog.NewRecord(TestTime, slog.LevelInfo, TestMessage, 0) |
| r.AddAttrs(TestAttrs...) |
| t.Run("text", func(t *testing.T) { |
| var b bytes.Buffer |
| h := newFastTextHandler(&b) |
| if err := h.Handle(ctx, r); err != nil { |
| t.Fatal(err) |
| } |
| got := b.String() |
| if got != WantText { |
| t.Errorf("\ngot %q\nwant %q", got, WantText) |
| } |
| }) |
| t.Run("async", func(t *testing.T) { |
| h := newAsyncHandler() |
| if err := h.Handle(ctx, r); err != nil { |
| t.Fatal(err) |
| } |
| got := h.ringBuffer[0] |
| if !got.Time.Equal(r.Time) || !slices.EqualFunc(attrSlice(got), attrSlice(r), slog.Attr.Equal) { |
| t.Errorf("got %+v, want %+v", got, r) |
| } |
| }) |
| } |
| |
| func attrSlice(r slog.Record) []slog.Attr { |
| var as []slog.Attr |
| r.Attrs(func(a slog.Attr) bool { as = append(as, a); return true }) |
| return as |
| } |