...

Source file src/cdr.dev/slog/internal/entryhuman/entry_test.go

Documentation: cdr.dev/slog/internal/entryhuman

     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