| //go:build go1.21 |
| |
| package indenthandler |
| |
| import ( |
| "bytes" |
| "log/slog" |
| "reflect" |
| "regexp" |
| "testing" |
| "testing/slogtest" |
| |
| "gopkg.in/yaml.v3" |
| ) |
| |
| // !+TestSlogtest |
| func TestSlogtest(t *testing.T) { |
| var buf bytes.Buffer |
| err := slogtest.TestHandler(New(&buf, nil), func() []map[string]any { |
| return parseLogEntries(t, buf.Bytes()) |
| }) |
| if err != nil { |
| t.Error(err) |
| } |
| } |
| |
| // !-TestSlogtest |
| |
| func Test(t *testing.T) { |
| var buf bytes.Buffer |
| l := slog.New(New(&buf, nil)) |
| l.Info("hello", "a", 1, "b", true, "c", 3.14, slog.Group("g", "h", 1, "i", 2), "d", "NO") |
| got := buf.String() |
| wantre := `time: [-0-9T:.]+Z? |
| level: INFO |
| source: ".*/indent_handler_test.go:\d+" |
| msg: "hello" |
| a: 1 |
| b: true |
| c: 3.14 |
| g: |
| h: 1 |
| i: 2 |
| d: "NO" |
| ` |
| re := regexp.MustCompile(wantre) |
| if !re.MatchString(got) { |
| t.Errorf("\ngot:\n%q\nwant:\n%q", got, wantre) |
| } |
| |
| buf.Reset() |
| l.Debug("test") |
| if got := buf.Len(); got != 0 { |
| t.Errorf("got buf.Len() = %d, want 0", got) |
| } |
| } |
| |
| // !+parseLogEntries |
| func parseLogEntries(t *testing.T, data []byte) []map[string]any { |
| entries := bytes.Split(data, []byte("---\n")) |
| entries = entries[:len(entries)-1] // last one is empty |
| var ms []map[string]any |
| for _, e := range entries { |
| var m map[string]any |
| if err := yaml.Unmarshal([]byte(e), &m); err != nil { |
| t.Fatal(err) |
| } |
| ms = append(ms, m) |
| } |
| return ms |
| } |
| |
| // !-parseLogEntries |
| |
| func TestParseLogEntries(t *testing.T) { |
| in := ` |
| a: 1 |
| b: 2 |
| c: 3 |
| g: |
| h: 4 |
| i: five |
| d: 6 |
| --- |
| e: 7 |
| --- |
| ` |
| want := []map[string]any{ |
| { |
| "a": 1, |
| "b": 2, |
| "c": 3, |
| "g": map[string]any{ |
| "h": 4, |
| "i": "five", |
| }, |
| "d": 6, |
| }, |
| { |
| "e": 7, |
| }, |
| } |
| got := parseLogEntries(t, []byte(in[1:])) |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("\ngot:\n%v\nwant:\n%v", got, want) |
| } |
| } |