Source file
src/log/slog/level_test.go
1
2
3
4
5 package slog
6
7 import (
8 "flag"
9 "strings"
10 "testing"
11 )
12
13 func TestLevelString(t *testing.T) {
14 for _, test := range []struct {
15 in Level
16 want string
17 }{
18 {0, "INFO"},
19 {LevelError, "ERROR"},
20 {LevelError + 2, "ERROR+2"},
21 {LevelError - 2, "WARN+2"},
22 {LevelWarn, "WARN"},
23 {LevelWarn - 1, "INFO+3"},
24 {LevelInfo, "INFO"},
25 {LevelInfo + 1, "INFO+1"},
26 {LevelInfo - 3, "DEBUG+1"},
27 {LevelDebug, "DEBUG"},
28 {LevelDebug - 2, "DEBUG-2"},
29 } {
30 got := test.in.String()
31 if got != test.want {
32 t.Errorf("%d: got %s, want %s", test.in, got, test.want)
33 }
34 }
35 }
36
37 func TestLevelVar(t *testing.T) {
38 var al LevelVar
39 if got, want := al.Level(), LevelInfo; got != want {
40 t.Errorf("got %v, want %v", got, want)
41 }
42 al.Set(LevelWarn)
43 if got, want := al.Level(), LevelWarn; got != want {
44 t.Errorf("got %v, want %v", got, want)
45 }
46 al.Set(LevelInfo)
47 if got, want := al.Level(), LevelInfo; got != want {
48 t.Errorf("got %v, want %v", got, want)
49 }
50
51 }
52
53 func TestMarshalJSON(t *testing.T) {
54 want := LevelWarn - 3
55 data, err := want.MarshalJSON()
56 if err != nil {
57 t.Fatal(err)
58 }
59 var got Level
60 if err := got.UnmarshalJSON(data); err != nil {
61 t.Fatal(err)
62 }
63 if got != want {
64 t.Errorf("got %s, want %s", got, want)
65 }
66 }
67
68 func TestLevelMarshalText(t *testing.T) {
69 want := LevelWarn - 3
70 data, err := want.MarshalText()
71 if err != nil {
72 t.Fatal(err)
73 }
74 var got Level
75 if err := got.UnmarshalText(data); err != nil {
76 t.Fatal(err)
77 }
78 if got != want {
79 t.Errorf("got %s, want %s", got, want)
80 }
81 }
82
83 func TestLevelParse(t *testing.T) {
84 for _, test := range []struct {
85 in string
86 want Level
87 }{
88 {"DEBUG", LevelDebug},
89 {"INFO", LevelInfo},
90 {"WARN", LevelWarn},
91 {"ERROR", LevelError},
92 {"debug", LevelDebug},
93 {"iNfo", LevelInfo},
94 {"INFO+87", LevelInfo + 87},
95 {"Error-18", LevelError - 18},
96 {"Error-8", LevelInfo},
97 } {
98 var got Level
99 if err := got.parse(test.in); err != nil {
100 t.Fatalf("%q: %v", test.in, err)
101 }
102 if got != test.want {
103 t.Errorf("%q: got %s, want %s", test.in, got, test.want)
104 }
105 }
106 }
107
108 func TestLevelParseError(t *testing.T) {
109 for _, test := range []struct {
110 in string
111 want string
112 }{
113 {"", "unknown name"},
114 {"dbg", "unknown name"},
115 {"INFO+", "invalid syntax"},
116 {"INFO-", "invalid syntax"},
117 {"ERROR+23x", "invalid syntax"},
118 } {
119 var l Level
120 err := l.parse(test.in)
121 if err == nil || !strings.Contains(err.Error(), test.want) {
122 t.Errorf("%q: got %v, want string containing %q", test.in, err, test.want)
123 }
124 }
125 }
126
127 func TestLevelFlag(t *testing.T) {
128 fs := flag.NewFlagSet("test", flag.ContinueOnError)
129 lf := LevelInfo
130 fs.TextVar(&lf, "level", lf, "set level")
131 err := fs.Parse([]string{"-level", "WARN+3"})
132 if err != nil {
133 t.Fatal(err)
134 }
135 if g, w := lf, LevelWarn+3; g != w {
136 t.Errorf("got %v, want %v", g, w)
137 }
138 }
139
140 func TestLevelVarMarshalText(t *testing.T) {
141 var v LevelVar
142 v.Set(LevelWarn)
143 data, err := v.MarshalText()
144 if err != nil {
145 t.Fatal(err)
146 }
147 var v2 LevelVar
148 if err := v2.UnmarshalText(data); err != nil {
149 t.Fatal(err)
150 }
151 if g, w := v2.Level(), LevelWarn; g != w {
152 t.Errorf("got %s, want %s", g, w)
153 }
154 }
155
156 func TestLevelVarFlag(t *testing.T) {
157 fs := flag.NewFlagSet("test", flag.ContinueOnError)
158 v := &LevelVar{}
159 v.Set(LevelWarn + 3)
160 fs.TextVar(v, "level", v, "set level")
161 err := fs.Parse([]string{"-level", "WARN+3"})
162 if err != nil {
163 t.Fatal(err)
164 }
165 if g, w := v.Level(), LevelWarn+3; g != w {
166 t.Errorf("got %v, want %v", g, w)
167 }
168 }
169
170 func TestLevelVarString(t *testing.T) {
171 var v LevelVar
172 v.Set(LevelError)
173 got := v.String()
174 want := "LevelVar(ERROR)"
175 if got != want {
176 t.Errorf("got %q, want %q", got, want)
177 }
178 }
179
View as plain text