1 package entryhuman_test
2
3 import (
4 "io/ioutil"
5 "testing"
6 "time"
7
8 "go.opencensus.io/trace"
9
10 "cdr.dev/slog"
11 "cdr.dev/slog/internal/assert"
12 "cdr.dev/slog/internal/entryhuman"
13 )
14
15 var kt = time.Date(2000, time.February, 5, 4, 4, 4, 4, time.UTC)
16
17 func TestEntry(t *testing.T) {
18 t.Parallel()
19
20 test := func(t *testing.T, in slog.SinkEntry, exp string) {
21 act := entryhuman.Fmt(ioutil.Discard, in)
22 assert.Equal(t, "entry", exp, act)
23 }
24
25 t.Run("basic", func(t *testing.T) {
26 t.Parallel()
27
28 test(t, slog.SinkEntry{
29 Message: "wowowow\tizi",
30 Time: kt,
31 Level: slog.LevelDebug,
32
33 File: "myfile",
34 Line: 100,
35 Func: "mypkg.ignored",
36 }, `2000-02-05 04:04:04.000 [DEBUG] <mypkg/myfile:100> ignored "wowowow\tizi"`)
37 })
38
39 t.Run("multilineMessage", func(t *testing.T) {
40 t.Parallel()
41
42 test(t, slog.SinkEntry{
43 Message: "line1\nline2",
44 Level: slog.LevelInfo,
45 }, `0001-01-01 00:00:00.000 [INFO] <.:0> ...
46 "msg": line1
47 line2`)
48 })
49
50 t.Run("multilineField", func(t *testing.T) {
51 t.Parallel()
52
53 test(t, slog.SinkEntry{
54 Message: "msg",
55 Level: slog.LevelInfo,
56 Fields: slog.M(slog.F("field", "line1\nline2")),
57 }, `0001-01-01 00:00:00.000 [INFO] <.:0> msg ...
58 "field": line1
59 line2`)
60 })
61
62 t.Run("named", func(t *testing.T) {
63 t.Parallel()
64
65 test(t, slog.SinkEntry{
66 Level: slog.LevelWarn,
67 LoggerNames: []string{"named", "meow"},
68 }, `0001-01-01 00:00:00.000 [WARN] (named.meow) <.:0> ""`)
69 })
70
71 t.Run("trace", func(t *testing.T) {
72 t.Parallel()
73
74 test(t, slog.SinkEntry{
75 Level: slog.LevelError,
76 SpanContext: trace.SpanContext{
77 SpanID: trace.SpanID{0, 1, 2, 3, 4, 5, 6, 7},
78 TraceID: trace.TraceID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
79 },
80 }, `0001-01-01 00:00:00.000 [ERROR] <.:0> "" {"trace": "000102030405060708090a0b0c0d0e0f", "span": "0001020304050607"}`)
81 })
82
83 t.Run("color", func(t *testing.T) {
84 t.Parallel()
85
86 act := entryhuman.Fmt(entryhuman.ForceColorWriter, slog.SinkEntry{
87 Level: slog.LevelCritical,
88 Fields: slog.M(
89 slog.F("hey", "hi"),
90 ),
91 })
92 assert.Equal(t, "entry", "\x1b[0m\x1b[0m0001-01-01 00:00:00.000 \x1b[91m[CRITICAL]\x1b[0m\t\x1b[36m<.:0> \x1b[0m\t\"\"\t{\x1b[34m\"hey\"\x1b[0m: \x1b[32m\"hi\"\x1b[0m}", act)
93 })
94 }
95
View as plain text