mirror of
https://github.com/luxfi/coreth.git
synced 2026-10-30 17:00:51 +00:00
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package testlog
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/luxfi/coreth/log"
|
|
)
|
|
|
|
type mockT struct {
|
|
out io.Writer
|
|
}
|
|
|
|
func (t *mockT) Helper() {
|
|
// noop for the purposes of unit tests
|
|
}
|
|
|
|
func (t *mockT) Logf(format string, args ...any) {
|
|
// we could gate this operation in a mutex, but because testlogger
|
|
// only calls Logf with its internal mutex held, we just write output here
|
|
var lineBuf bytes.Buffer
|
|
if _, err := fmt.Fprintf(&lineBuf, format, args...); err != nil {
|
|
panic(err)
|
|
}
|
|
// The timestamp is locale-dependent, so we want to trim that off
|
|
// "INFO [01-01|00:00:00.000] a message ..." -> "a message..."
|
|
sanitized := strings.Split(lineBuf.String(), "]")[1]
|
|
if _, err := t.out.Write([]byte(sanitized)); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func TestLogging(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
expected string
|
|
run func(t *mockT)
|
|
}{
|
|
{
|
|
"SubLogger",
|
|
` Visible
|
|
Hide and seek foobar=123
|
|
Also visible
|
|
`,
|
|
func(t *mockT) {
|
|
l := Logger(t, log.LevelInfo)
|
|
subLogger := l.New("foobar", 123)
|
|
|
|
l.Info("Visible")
|
|
subLogger.Info("Hide and seek")
|
|
l.Info("Also visible")
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
outp := bytes.Buffer{}
|
|
mock := mockT{&outp}
|
|
tc.run(&mock)
|
|
if outp.String() != tc.expected {
|
|
fmt.Printf("output mismatch.\nwant: '%s'\ngot: '%s'\n", tc.expected, outp.String())
|
|
}
|
|
}
|
|
}
|