package logging import ( "bytes" "log/slog" "strings" "testing" ) func TestNewWritesReadableStructuredText(t *testing.T) { var output bytes.Buffer New(&output, slog.LevelInfo).Info("server ready", "listen", ":8080") line := output.String() if strings.HasPrefix(strings.TrimSpace(line), "{") { t.Fatalf("expected text output, got JSON: %s", line) } for _, want := range []string{`level=INFO`, `msg="server ready"`, `listen=:8080`} { if !strings.Contains(line, want) { t.Errorf("output %q does not contain %q", line, want) } } } func TestBufferedLoggerRetainsStructuredEventsWithCursorPagination(t *testing.T) { var output bytes.Buffer logger, buffer := NewBuffered(&output, slog.LevelDebug, 3) for i := 1; i <= 5; i++ { logger.Info("request complete", "number", i) } first := buffer.Events(0, 2) if first.Dropped != 2 || len(first.Events) != 2 || !first.HasMore { t.Fatalf("unexpected first page: %+v", first) } if first.Events[0].Sequence != 3 || first.Events[0].Attributes["number"] != "3" { t.Fatalf("oldest retained event was not delivered: %+v", first.Events[0]) } second := buffer.Events(first.Next, 2) if len(second.Events) != 1 || second.Events[0].Sequence != 5 || second.HasMore { t.Fatalf("unexpected second page: %+v", second) } } func TestParseLevel(t *testing.T) { tests := map[string]slog.Level{ "": slog.LevelInfo, "debug": slog.LevelDebug, "WARNING": slog.LevelWarn, "error": slog.LevelError, "unknown": slog.LevelInfo, } for input, want := range tests { if got := ParseLevel(input); got != want { t.Errorf("ParseLevel(%q) = %v, want %v", input, got, want) } } }