1package loglevel
2
3import (
4 "bytes"
5 "log"
6 "strings"
7 "testing"
8)
9
10func captureLog(t *testing.T, fn func()) string {
11 t.Helper()
12
13 var buf bytes.Buffer
14 originalOutput := log.Writer()
15 originalFlags := log.Flags()
16 log.SetOutput(&buf)
17 log.SetFlags(0)
18 defer func() {
19 log.SetOutput(originalOutput)
20 log.SetFlags(originalFlags)
21 Set(LevelInfo)
22 }()
23
24 fn()
25
26 return buf.String()
27}
28
29func TestDebugfRequiresDebugLevel(t *testing.T) {
30 for _, level := range []Level{LevelSilent, LevelInfo, LevelVerbose} {
31 Set(level)
32 output := captureLog(t, func() {
33 Debugf("details %d", 1)
34 })
35 if output != "" {
36 t.Fatalf("Debugf wrote at level %v: %q", level, output)
37 }
38 }
39
40 Set(LevelDebug)
41 output := captureLog(t, func() {
42 Debugf("details %d", 1)
43 })
44 if !strings.Contains(output, "debug: details 1") {
45 t.Fatalf("Debugf did not write expected message: %q", output)
46 }
47}
48
49func TestVerbosefRequiresVerboseLevel(t *testing.T) {
50 Set(LevelInfo)
51 output := captureLog(t, func() {
52 Verbosef("more details")
53 })
54 if output != "" {
55 t.Fatalf("Verbosef wrote at info level: %q", output)
56 }
57
58 for _, level := range []Level{LevelVerbose, LevelDebug} {
59 Set(level)
60 output := captureLog(t, func() {
61 Verbosef("more details")
62 })
63 if !strings.Contains(output, "verbose: more details") {
64 t.Fatalf("Verbosef did not write at level %v: %q", level, output)
65 }
66 }
67}
68
69func TestInfofRequiresInfoLevel(t *testing.T) {
70 Set(LevelSilent)
71 output := captureLog(t, func() {
72 Infof("hello")
73 })
74 if output != "" {
75 t.Fatalf("Infof wrote at silent level: %q", output)
76 }
77
78 Set(LevelInfo)
79 output = captureLog(t, func() {
80 Infof("hello")
81 })
82 if !strings.Contains(output, "info: hello") {
83 t.Fatalf("Infof did not write at info level: %q", output)
84 }
85}
86
87func TestSetAndGet(t *testing.T) {
88 Set(LevelDebug)
89 if Get() != LevelDebug {
90 t.Fatalf("Get() = %v, want %v", Get(), LevelDebug)
91 }
92
93 Set(LevelInfo)
94 if Get() != LevelInfo {
95 t.Fatalf("Get() = %v, want %v", Get(), LevelInfo)
96 }
97}