colog/std_formatter_test.go

102 lines
1.8 KiB
Go

package colog
import (
"log"
"testing"
"time"
)
type formatTest struct {
entry Entry
prefix string
flags int
width int
colors bool
output string
}
// TTime is the fixed point in time for all formatting tests
var TTime = time.Date(2015, time.August, 1, 20, 45, 30, 9999, time.UTC)
var formatterTests = []formatTest{
{
entry: Entry{
Level: LInfo,
Message: []byte("some message"),
},
output: "[INF] some message\n",
},
{
entry: Entry{
Time: TTime,
Level: LDebug,
Message: []byte("some message"),
},
flags: log.Ldate,
output: "[DBG] 2015/08/01 some message\n",
},
{
entry: Entry{
Time: TTime,
Level: LDebug,
Message: []byte("some message"),
},
colors: true,
width: 40,
flags: log.Ldate,
output: "[\x1b[0;36mDBG\x1b[0m] 2015/08/01 some message\n",
},
{
entry: Entry{
Time: TTime,
Level: LDebug,
Message: []byte("some message"),
},
colors: true,
width: 140,
flags: log.Ldate,
output: "[\x1b[0;36mDBG\x1b[0m] 2015/08/01 some message\n"},
{
entry: Entry{
Time: TTime,
Level: LDebug,
File: "/src/file.go",
Line: 142,
Message: []byte("some message"),
},
colors: true,
width: 140,
flags: log.Llongfile,
output: "[\x1b[0;36mDBG\x1b[0m] \x1b[1;30msrc/file.go:142:\x1b[0m some message\n",
},
}
func TestStdFormatter(t *testing.T) {
for _, tt := range formatterTests {
f := StdFormatter{
Flag: tt.flags,
Colors: tt.colors,
}
if tt.width > 0 {
terminalWidth = fixedWidthTerminal(tt.width)
}
b, err := f.Format(&tt.entry)
if err != nil {
t.Fatal(err)
}
if string(b) != tt.output {
t.Errorf("Unexpected formatter output:\n%s\nVS\n%s", b, tt.output)
}
}
}
// stub for terminal width function
func fixedWidthTerminal(width int) func(int) int {
return func(fd int) int {
return width
}
}