1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-28 01:55:24 +00:00
OpenDiablo2/d2common/logger_test.go
lord 50d40fb5d3
D2loader (#714)
* adding logger implementation to d2common

* Adding file loader implementation

The file loader works in terms of `Sources` and `Assets`. A `Source` is
something like a filesystem that has a cache. An `Asset` is something
that implements `io.ReadSeeker` and has a few methods of its own.

There are currently `Source` implementations for MPQ archives and for the
host filesystem, meaning that one can specify a directory on the host fs to
load files from.

`Sources` are added to a loader with `loader.AddSource(path)`, where `path`
resolves somewhere on disk. In the case that the path points to an MPQ,
then an MPQ `Source` is created and added to the loader. If `path` resolves
to a directory, then a filesystem source is added.

Files are loaded with `loader.Load("data/global/excel/monstats.txt")`, and the
sources are searched in the order that they were added.

* adding tests for d2common/logger_test.go

* adding tests and testdata for d2loader

* logger lint fixes, fixed missing test case

* minor edits, lint fixes, changes some comments, embedded Logger into Loader

* moved d2loader into d2common (I dont think it belonged in d2core)

* removed my simple cache implementation in favor of our existing cache in d2common
2020-09-08 15:45:26 -04:00

116 lines
2.5 KiB
Go

package d2common
import (
"fmt"
"testing"
)
type testWriter struct {
data []byte
}
func (tw *testWriter) Write(msg []byte) (int, error) {
tw.data = msg
return len(msg), nil
}
func Test_logger_SetLevel(t *testing.T) {
l := &Logger{Writer: &testWriter{}}
tests := []struct {
level LogLevel
}{
{LogLevelNone},
{LogLevelError},
{LogLevelWarning},
{LogLevelInfo},
{LogLevelDebug},
}
for idx := range tests {
targetLevel := tests[idx].level
l.SetLevel(targetLevel)
if l.level != targetLevel {
t.Error("unexpected log level")
}
}
}
func Test_logger_LogLevels(t *testing.T) {
w := &testWriter{}
l := &Logger{Writer: w}
noMessage := ""
message := "test"
expectedError := fmt.Sprintf(LogFmtError, message)
expectedWarning := fmt.Sprintf(LogFmtWarning, message)
expectedInfo := fmt.Sprintf(LogFmtInfo, message)
expectedDebug := fmt.Sprintf(LogFmtDebug, message)
// for each log level we set, we will use different log methods (info, warning, etc) and check
// what the output in the writer is (clearing the writer data before each test)
tests := []struct {
logLevel LogLevel
expect map[LogLevel]string
}{
{LogLevelDebug, map[LogLevel]string{
LogLevelError: expectedError,
LogLevelWarning: expectedWarning,
LogLevelInfo: expectedInfo,
LogLevelDebug: expectedDebug,
}},
{LogLevelInfo, map[LogLevel]string{
LogLevelError: expectedError,
LogLevelWarning: expectedWarning,
LogLevelInfo: expectedInfo,
LogLevelDebug: noMessage,
}},
{LogLevelWarning, map[LogLevel]string{
LogLevelError: expectedError,
LogLevelWarning: expectedWarning,
LogLevelInfo: noMessage,
LogLevelDebug: noMessage,
}},
{LogLevelError, map[LogLevel]string{
LogLevelError: expectedError,
LogLevelWarning: noMessage,
LogLevelInfo: noMessage,
LogLevelDebug: noMessage,
}},
{LogLevelNone, map[LogLevel]string{
LogLevelError: noMessage,
LogLevelWarning: noMessage,
LogLevelInfo: noMessage,
LogLevelDebug: noMessage,
}},
}
for idx := range tests {
level := tests[idx].logLevel
l.SetLevel(level)
for levelTry, msgExpect := range tests[idx].expect {
w.data = make([]byte, 0)
switch levelTry {
case LogLevelError:
l.Error(message)
case LogLevelWarning:
l.Warning(message)
case LogLevelInfo:
l.Info(message)
case LogLevelDebug:
l.Debug(message)
}
msgGot := string(w.data)
if msgGot != msgExpect {
t.Errorf("unexpected log message: expected `%s` but got `%s`", msgExpect, msgGot)
}
}
}
}