1 package log
2
3 import (
4 "errors"
5 "io"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 )
10
11 var nilInterface io.Reader
12
13 func TestInterleavedKVToFields(t *testing.T) {
14
15 tests := []struct {
16 name string
17 keyValues []interface{}
18 want []Field
19 wantErr bool
20 }{
21 {
22 "incorrect pair",
23 []interface{}{"test"},
24 nil,
25 true,
26 },
27 {
28 "non string key",
29 []interface{}{struct{}{}, "foo"},
30 nil,
31 true,
32 },
33 {
34 "happy path",
35 []interface{}{
36 "bool", true,
37 "string", "string",
38 "int", int(1),
39 "int8", int8(2),
40 "int16", int16(3),
41 "int64", int64(4),
42 "uint", uint(5),
43 "uint64", uint64(6),
44 "uint8", uint8(7),
45 "uint16", uint16(8),
46 "uint32", uint32(9),
47 "float32", float32(10),
48 "float64", float64(11),
49 "int32", int32(12),
50 "stringer", errors.New("err"),
51 "nilInterface", nilInterface,
52 "nil", nil,
53 },
54 []Field{
55 Bool("bool", true),
56 String("string", "string"),
57 Int("int", int(1)),
58 Int32("int8", int32(2)),
59 Int32("int16", int32(3)),
60 Int64("int64", int64(4)),
61 Uint64("uint", uint64(5)),
62 Uint64("uint64", uint64(6)),
63 Uint32("uint8", uint32(7)),
64 Uint32("uint16", uint32(8)),
65 Uint32("uint32", uint32(9)),
66 Float32("float32", float32(10)),
67 Float64("float64", float64(11)),
68 Int32("int32", int32(12)),
69 String("stringer", errors.New("err").Error()),
70 String("nilInterface", "nil"),
71 String("nil", "nil"),
72 },
73 false,
74 },
75 }
76 for _, tt := range tests {
77 t.Run(tt.name, func(t *testing.T) {
78 got, err := InterleavedKVToFields(tt.keyValues...)
79 if (err != nil) != tt.wantErr {
80 t.Errorf("InterleavedKVToFields() error = %v, wantErr %v", err, tt.wantErr)
81 return
82 }
83 assert.Equal(t, tt.want, got)
84 })
85 }
86 }
87
View as plain text