| // Copyright 2023 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. |
| |
| package benchmarks |
| |
| import ( |
| "bytes" |
| "context" |
| "log/slog" |
| "slices" |
| "testing" |
| ) |
| |
| 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 |
| } |