mirror of
https://github.com/Threnklyn/jira.git
synced 2026-06-07 13:33:32 +02:00
rewrite checkpoint
This commit is contained in:
+184
@@ -0,0 +1,184 @@
|
||||
// Copyright 2013, Örjan Persson. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package logging
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFormat(t *testing.T) {
|
||||
backend := InitForTesting(DEBUG)
|
||||
|
||||
f, err := NewStringFormatter("%{shortfile} %{time:2006-01-02T15:04:05} %{level:.1s} %{id:04d} %{module} %{message}")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to set format: %s", err)
|
||||
}
|
||||
SetFormatter(f)
|
||||
|
||||
log := MustGetLogger("module")
|
||||
log.Debug("hello")
|
||||
|
||||
line := MemoryRecordN(backend, 0).Formatted(0)
|
||||
if "format_test.go:24 1970-01-01T00:00:00 D 0001 module hello" != line {
|
||||
t.Errorf("Unexpected format: %s", line)
|
||||
}
|
||||
}
|
||||
|
||||
func logAndGetLine(backend *MemoryBackend) string {
|
||||
MustGetLogger("foo").Debug("hello")
|
||||
return MemoryRecordN(backend, 0).Formatted(1)
|
||||
}
|
||||
|
||||
func getLastLine(backend *MemoryBackend) string {
|
||||
return MemoryRecordN(backend, 0).Formatted(1)
|
||||
}
|
||||
|
||||
func realFunc(backend *MemoryBackend) string {
|
||||
return logAndGetLine(backend)
|
||||
}
|
||||
|
||||
type structFunc struct{}
|
||||
|
||||
func (structFunc) Log(backend *MemoryBackend) string {
|
||||
return logAndGetLine(backend)
|
||||
}
|
||||
|
||||
func TestRealFuncFormat(t *testing.T) {
|
||||
backend := InitForTesting(DEBUG)
|
||||
SetFormatter(MustStringFormatter("%{shortfunc}"))
|
||||
|
||||
line := realFunc(backend)
|
||||
if "realFunc" != line {
|
||||
t.Errorf("Unexpected format: %s", line)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStructFuncFormat(t *testing.T) {
|
||||
backend := InitForTesting(DEBUG)
|
||||
SetFormatter(MustStringFormatter("%{longfunc}"))
|
||||
|
||||
var x structFunc
|
||||
line := x.Log(backend)
|
||||
if "structFunc.Log" != line {
|
||||
t.Errorf("Unexpected format: %s", line)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVarFuncFormat(t *testing.T) {
|
||||
backend := InitForTesting(DEBUG)
|
||||
SetFormatter(MustStringFormatter("%{shortfunc}"))
|
||||
|
||||
var varFunc = func() string {
|
||||
return logAndGetLine(backend)
|
||||
}
|
||||
|
||||
line := varFunc()
|
||||
if "???" == line || "TestVarFuncFormat" == line || "varFunc" == line {
|
||||
t.Errorf("Unexpected format: %s", line)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatFuncName(t *testing.T) {
|
||||
var tests = []struct {
|
||||
filename string
|
||||
longpkg string
|
||||
shortpkg string
|
||||
longfunc string
|
||||
shortfunc string
|
||||
}{
|
||||
{"",
|
||||
"???",
|
||||
"???",
|
||||
"???",
|
||||
"???"},
|
||||
{"main",
|
||||
"???",
|
||||
"???",
|
||||
"???",
|
||||
"???"},
|
||||
{"main.",
|
||||
"main",
|
||||
"main",
|
||||
"",
|
||||
""},
|
||||
{"main.main",
|
||||
"main",
|
||||
"main",
|
||||
"main",
|
||||
"main"},
|
||||
{"github.com/op/go-logging.func·001",
|
||||
"github.com/op/go-logging",
|
||||
"go-logging",
|
||||
"func·001",
|
||||
"func·001"},
|
||||
{"github.com/op/go-logging.stringFormatter.Format",
|
||||
"github.com/op/go-logging",
|
||||
"go-logging",
|
||||
"stringFormatter.Format",
|
||||
"Format"},
|
||||
}
|
||||
|
||||
var v string
|
||||
for _, test := range tests {
|
||||
v = formatFuncName(fmtVerbLongpkg, test.filename)
|
||||
if test.longpkg != v {
|
||||
t.Errorf("%s != %s", test.longpkg, v)
|
||||
}
|
||||
v = formatFuncName(fmtVerbShortpkg, test.filename)
|
||||
if test.shortpkg != v {
|
||||
t.Errorf("%s != %s", test.shortpkg, v)
|
||||
}
|
||||
v = formatFuncName(fmtVerbLongfunc, test.filename)
|
||||
if test.longfunc != v {
|
||||
t.Errorf("%s != %s", test.longfunc, v)
|
||||
}
|
||||
v = formatFuncName(fmtVerbShortfunc, test.filename)
|
||||
if test.shortfunc != v {
|
||||
t.Errorf("%s != %s", test.shortfunc, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackendFormatter(t *testing.T) {
|
||||
InitForTesting(DEBUG)
|
||||
|
||||
// Create two backends and wrap one of the with a backend formatter
|
||||
b1 := NewMemoryBackend(1)
|
||||
b2 := NewMemoryBackend(1)
|
||||
|
||||
f := MustStringFormatter("%{level} %{message}")
|
||||
bf := NewBackendFormatter(b2, f)
|
||||
|
||||
SetBackend(b1, bf)
|
||||
|
||||
log := MustGetLogger("module")
|
||||
log.Info("foo")
|
||||
if "foo" != getLastLine(b1) {
|
||||
t.Errorf("Unexpected line: %s", getLastLine(b1))
|
||||
}
|
||||
if "INFO foo" != getLastLine(b2) {
|
||||
t.Errorf("Unexpected line: %s", getLastLine(b2))
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkStringFormatter(b *testing.B) {
|
||||
fmt := "%{time:2006-01-02T15:04:05} %{level:.1s} %{id:04d} %{module} %{message}"
|
||||
f := MustStringFormatter(fmt)
|
||||
|
||||
backend := InitForTesting(DEBUG)
|
||||
buf := &bytes.Buffer{}
|
||||
log := MustGetLogger("module")
|
||||
log.Debug("")
|
||||
record := MemoryRecordN(backend, 0)
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
if err := f.Format(1, record, buf); err != nil {
|
||||
b.Fatal(err)
|
||||
buf.Truncate(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user