| //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) | |
| } | |
| } |