aboutsummaryrefslogtreecommitdiff
path: root/src/log/slog/handler_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/log/slog/handler_test.go')
-rw-r--r--src/log/slog/handler_test.go40
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.