diff options
Diffstat (limited to 'src/log/slog/handler_test.go')
| -rw-r--r-- | src/log/slog/handler_test.go | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/log/slog/handler_test.go b/src/log/slog/handler_test.go index 9f8d518e96..445f43f1f5 100644 --- a/src/log/slog/handler_test.go +++ b/src/log/slog/handler_test.go @@ -547,7 +547,11 @@ func TestJSONAndTextHandlers(t *testing.T) { }, } { r := NewRecord(testTime, LevelInfo, "message", callerPC(2)) - line := strconv.Itoa(r.source().Line) + source := r.Source() + if source == nil { + t.Fatal("source is nil") + } + line := strconv.Itoa(source.Line) r.AddAttrs(test.attrs...) var buf bytes.Buffer opts := HandlerOptions{ReplaceAttr: test.replace, AddSource: test.addSource} @@ -634,6 +638,40 @@ func TestHandlerEnabled(t *testing.T) { } } +func TestJSONAndTextHandlersWithUnavailableSource(t *testing.T) { + // Verify that a nil source does not cause a panic. + // and that the source is empty. + var buf bytes.Buffer + opts := &HandlerOptions{ + ReplaceAttr: removeKeys(LevelKey), + AddSource: true, + } + + for _, test := range []struct { + name string + h Handler + want string + }{ + {"text", NewTextHandler(&buf, opts), "source=:0 msg=message"}, + {"json", NewJSONHandler(&buf, opts), `{"msg":"message"}`}, + } { + t.Run(test.name, func(t *testing.T) { + buf.Reset() + r := NewRecord(time.Time{}, LevelInfo, "message", 0) + err := test.h.Handle(t.Context(), r) + if err != nil { + t.Fatal(err) + } + + want := strings.TrimSpace(test.want) + got := strings.TrimSpace(buf.String()) + if got != want { + t.Errorf("\ngot %s\nwant %s", got, want) + } + }) + } +} + func TestSecondWith(t *testing.T) { // Verify that a second call to Logger.With does not corrupt // the original. |
