(refactor): prepare breaking v2 API
- rename package to sneklog and move module to /v2 - replace text output flags with writer formatters - remove external color dependencies - update migration notes and coverage
This commit is contained in:
+69
-4
@@ -1,4 +1,4 @@
|
||||
package slog
|
||||
package sneklog
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@@ -17,6 +17,9 @@ type stubLoggerWriter struct {
|
||||
messages []any
|
||||
}
|
||||
|
||||
func (w *stubLoggerWriter) Formatter() *Formatter {
|
||||
return &Formatter{}
|
||||
}
|
||||
func (w *stubLoggerWriter) Close() error {
|
||||
w.closeCalls++
|
||||
return w.closeErr
|
||||
@@ -98,7 +101,7 @@ func TestLoggerPreservesMessageTypesWithoutReplacers(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCreateTextWriterCloseOnNonCloserIsNoOp(t *testing.T) {
|
||||
writer := CreateTextWriter(&bytes.Buffer{}, false, false)
|
||||
writer := CreateTextWriter(&bytes.Buffer{})
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Close() error = %v", err)
|
||||
}
|
||||
@@ -113,7 +116,7 @@ func TestCreateTextWriterDoesNotCloseExternalCloser(t *testing.T) {
|
||||
_ = file.Close()
|
||||
})
|
||||
|
||||
writer := CreateTextWriter(file, false, false)
|
||||
writer := CreateTextWriter(file)
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Close() error = %v", err)
|
||||
}
|
||||
@@ -186,10 +189,72 @@ func TestJsonWriterPrintPreservesTrailingNewlineSemantic(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatterHandlesEmptyTracebackPlaceholders(t *testing.T) {
|
||||
formatter := NewFormatter().
|
||||
SetFormat("%m|%b|%B|%M|%f|%n|%s|%p")
|
||||
|
||||
got := formatter.FormatMessage(INFO, "TEST", nil, "hello")
|
||||
if got != "hello|||||||" {
|
||||
t.Fatalf("empty traceback placeholders should be empty, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatterDoesNotInterpretPlaceholdersInsideMessages(t *testing.T) {
|
||||
formatter := NewFormatter().
|
||||
SetFormat("%L:%m")
|
||||
|
||||
message := "literal %L %s %p"
|
||||
got := formatter.FormatMessage(INFO, "TEST", nil, message)
|
||||
if got != "INFO:literal %L %s %p" {
|
||||
t.Fatalf("message placeholder-looking text should stay literal, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewFormatterDoesNotMutateDefaultFormatter(t *testing.T) {
|
||||
formatter := NewFormatter()
|
||||
formatter.SetFormat("custom")
|
||||
|
||||
if DefaultTextFormatter.Format == "custom" {
|
||||
t.Fatal("NewFormatter() should return a copy, not mutate DefaultTextFormatter")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextWriterColorOutputHonorsColorOnlyStdoutFalse(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
formatter := NewFormatter().
|
||||
SetFormat("%m").
|
||||
SetColorOutput(true).
|
||||
SetColorOnlyStdout(false)
|
||||
writer := CreateTextWriter(&buf).SetFormatter(formatter)
|
||||
|
||||
if err := writer.Print(INFO, "TEST", nil, "hello"); err != nil {
|
||||
t.Fatalf("Print() error = %v", err)
|
||||
}
|
||||
if !strings.Contains(buf.String(), "\x1b[") {
|
||||
t.Fatalf("ColorOnlyStdout(false) should allow color for external writers, got %q", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestTextWriterColorOutputCanBeDisabled(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
formatter := NewFormatter().
|
||||
SetFormat("%m").
|
||||
SetColorOutput(false).
|
||||
SetColorOnlyStdout(false)
|
||||
writer := CreateTextWriter(&buf).SetFormatter(formatter)
|
||||
|
||||
if err := writer.Print(INFO, "TEST", nil, "hello"); err != nil {
|
||||
t.Fatalf("Print() error = %v", err)
|
||||
}
|
||||
if strings.Contains(buf.String(), "\x1b[") {
|
||||
t.Fatalf("SetColorOutput(false) should disable color output, got %q", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateTextStdoutWriterDoesNotCloseStdout(t *testing.T) {
|
||||
stdoutFile := swapStdout(t)
|
||||
|
||||
writer := CreateTextStdoutWriter(false, false)
|
||||
writer := CreateTextStdoutWriter()
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Close() error = %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user