github.com/bazelbuild/bazel-watcher@v0.25.2/internal/ibazel/log/log_test.go (about) 1 package log 2 3 import ( 4 "bytes" 5 "fmt" 6 "reflect" 7 "runtime" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/google/go-cmp/cmp" 13 ) 14 15 const prefix = "github.com/bazelbuild/bazel-watcher/internal/ibazel/log." 16 17 func TestNonfLoggers(t *testing.T) { 18 tests := []struct { 19 method interface{} 20 msg string 21 args []interface{} 22 want string 23 exits bool 24 color color 25 }{ 26 { 27 method: Log, 28 msg: "log", 29 want: "log", 30 exits: false, 31 color: logColor, 32 }, 33 { 34 method: Logf, 35 msg: "log %d", 36 args: []interface{}{123}, 37 want: "log 123", 38 exits: false, 39 color: logColor, 40 }, 41 { 42 method: Error, 43 msg: "error", 44 want: "error", 45 exits: false, 46 color: errorColor, 47 }, 48 { 49 method: Errorf, 50 msg: "error %d", 51 args: []interface{}{123}, 52 want: "error 123", 53 exits: false, 54 color: errorColor, 55 }, 56 { 57 method: Fatal, 58 msg: "fatal", 59 want: "fatal", 60 exits: true, 61 color: fatalColor, 62 }, 63 { 64 method: Fatalf, 65 msg: "fatal %d", 66 args: []interface{}{123}, 67 want: "fatal 123", 68 exits: true, 69 color: fatalColor, 70 }, 71 } 72 73 for _, test := range tests { 74 funcName := strings.TrimPrefix( 75 runtime.FuncForPC( 76 reflect.ValueOf(test.method).Pointer()).Name(), prefix) 77 78 t.Run(fmt.Sprintf("%v(%q, %v)", funcName, test.msg, test.args), func(t *testing.T) { 79 calledExit := false 80 osExit = func(int) { 81 calledExit = true 82 } 83 timeNow = func() time.Time { 84 parsedTime, err := time.Parse(time.RFC3339, "2019-11-13T00:05:07+00:00") 85 if err != nil { 86 t.Errorf("Couldn't parse time: %v", err) 87 } 88 return parsedTime 89 } 90 91 buf := &bytes.Buffer{} 92 SetLogger(&writerLogger{buf}) 93 94 switch f := test.method.(type) { 95 case func(string): 96 f(test.msg) 97 case func(string, ...interface{}): 98 f(test.msg, test.args...) 99 } 100 101 if test.exits && calledExit == false { 102 t.Errorf("Fatal should call exit") 103 } 104 105 got := buf.String() 106 want := fmt.Sprintf("%siBazel [12:05AM]\x1b[0m: %s\n", test.color, test.want) 107 if diff := cmp.Diff(got, want); diff != "" { 108 t.Errorf("\nGot: %q\nWant: %q\nDiff:\n%s", got, want, diff) 109 } 110 111 buf.Reset() 112 }) 113 } 114 } 115 116 func TestBanner(t *testing.T) { 117 buf := &bytes.Buffer{} 118 SetLogger(&writerLogger{buf}) 119 120 Banner("This is multi", "line output that", "is expected to be printed") 121 122 got := buf.String() 123 want := fmt.Sprintf(` 124 %s################################################################################%s 125 %s#%s This is multi %s#%s 126 %s#%s line output that %s#%s 127 %s#%s is expected to be printed %s#%s 128 %s################################################################################%s 129 130 `, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor, bannerColor, resetColor) 131 if diff := cmp.Diff(got, want); diff != "" { 132 t.Errorf("\nGot: %q\nWant: %q\nDiff:\n%s", got, want, diff) 133 } 134 }