level_test.go

 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}