package stonelog import ( "errors" "os/exec" "testing" ) func Test_LogLevelString(t *testing.T) { levelTests := []struct { level StoneLevel expected string }{ {TRACE, "TRACE"}, {DEBUG, "DEBUG"}, {INFO, "INFO"}, {WARN, "WARN"}, {ERROR, "ERROR"}, {FATAL, "FATAL"}, {PANIC, "PANIC"}, } for _, tt := range levelTests { if tt.level.String() != tt.expected { t.Errorf("Expected %s, got %s", tt.expected, tt.level.String()) } } } func Test_LogLevelColor(t *testing.T) { levelTests := []struct { level StoneLevel expected string }{ {TRACE, colorWhite}, {DEBUG, colorCyan}, {INFO, colorGreen}, {WARN, colorYellow}, {ERROR, colorRed}, {FATAL, colorMagenta}, {PANIC, colorRed + "\033[1m"}, } for _, tt := range levelTests { if tt.level.Color() != tt.expected { t.Errorf("Expected %s, got %s", tt.expected, tt.level.Color()) } } } func Test_JSONLogs(t *testing.T) { InitStoneLog(TRACE, true, false) Trace("This is a trace log") Debug("This is a debug log") Observation("This is an observation log") Hypothesis("This is a hypothesis log") Failure("This is a failure log") SetLogLevel(INFO) } func Test_PlainTextLogs(t *testing.T) { InitStoneLog(TRACE, false, false) Trace("This is a trace log") Debug("This is a debug log") Observation("This is an observation log") Hypothesis("This is a hypothesis log") Failure("This is a failure log") SetLogLevel(INFO) } func Test_MutedPlainTextLogs(t *testing.T) { InitStoneLog(ERROR, false, true) // This won't change the log level SetLogLevel(-1) // Following won't appear Trace("This is a trace log") Debug("This is a debug log") Observation("This is an observation log") Hypothesis("This is a hypothesis log") // Until this one Failure("This is a failure log") } func Test_PanicPlainTextLogs(t *testing.T) { defer func() { if r := recover(); r != nil { Observation("Recovered from panic: %v", r) } }() InitStoneLog(TRACE, false, true) Panic("This is a panic log") } func Test_FatalPlainTextLogs(t *testing.T) { cmd := exec.Command( "go", "run", "./test/main.go", ) cmd.Env = append(cmd.Env, "TEST_FATAL=1") err := cmd.Run() var exitErr *exec.ExitError if errors.As(err, &exitErr) { if exitErr.ExitCode() != 1 { t.Errorf("Expected exit code 1, got %d", exitErr.ExitCode()) } } }