Skip to content

Commit fd8fcd5

Browse files
committed
100% coverage
1 parent 02429e7 commit fd8fcd5

File tree

4 files changed

+102
-47
lines changed

4 files changed

+102
-47
lines changed

buffer_test.go

Lines changed: 17 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,12 @@ package console
22

33
import (
44
"bytes"
5-
"cmp"
5+
"errors"
6+
"io"
67
"testing"
78
"time"
89
)
910

10-
func AssertZero[E comparable](t *testing.T, v E) {
11-
t.Helper()
12-
var zero E
13-
if v != zero {
14-
t.Errorf("expected zero value, got %v", v)
15-
}
16-
}
17-
18-
func AssertEqual[E comparable](t *testing.T, expected, value E) {
19-
t.Helper()
20-
if expected != value {
21-
t.Errorf("expected %v, got %v", expected, value)
22-
}
23-
}
24-
25-
func AssertNotEqual[E comparable](t *testing.T, expected, value E) {
26-
t.Helper()
27-
if expected == value {
28-
t.Errorf("expected to be different, got %v", value)
29-
}
30-
}
31-
32-
func AssertGreaterOrEqual[E cmp.Ordered](t *testing.T, expected, value E) {
33-
t.Helper()
34-
if expected > value {
35-
t.Errorf("expected to be %v to be greater than %v", value, expected)
36-
}
37-
}
38-
39-
func AssertNoError(t *testing.T, err error) {
40-
t.Helper()
41-
if err != nil {
42-
t.Errorf("expected no error, got %q", err.Error())
43-
}
44-
}
45-
46-
// func AssertNil(t *testing.T, value any) {
47-
// t.Helper()
48-
// if value != nil {
49-
// t.Errorf("expected nil, got %v", value)
50-
// }
51-
// }
52-
5311
func TestBuffer_Append(t *testing.T) {
5412
b := new(buffer)
5513
AssertZero(t, b.Len())
@@ -139,6 +97,21 @@ func TestBuffer_Clip(t *testing.T) {
13997
AssertEqual(t, len("foobar"), b.Cap())
14098
}
14199

100+
func TestBuffer_WriteTo_Err(t *testing.T) {
101+
w := writerFunc(func(b []byte) (int, error) { return 0, errors.New("nope") })
102+
b := new(buffer)
103+
b.AppendString("foobar")
104+
_, err := b.WriteTo(w)
105+
AssertError(t, err)
106+
107+
w = writerFunc(func(b []byte) (int, error) { return 0, nil })
108+
_, err = b.WriteTo(w)
109+
AssertError(t, err)
110+
if !errors.Is(err, io.ErrShortWrite) {
111+
t.Fatalf("Expected io.ErrShortWrite, go %T", err)
112+
}
113+
}
114+
142115
func BenchmarkBuffer(b *testing.B) {
143116
data := []byte("foobarbaz")
144117

encoding.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,11 @@ func (e *encoder) writeValue(buf *buffer, value slog.Value) {
138138
return
139139
case fmt.Stringer:
140140
e.writeColoredString(buf, v.String(), colorAttrValue)
141+
return
141142
}
142143
fallthrough
143-
// case slog.KindString:
144-
// fallthrough
144+
case slog.KindString:
145+
fallthrough
145146
default:
146147
e.writeColoredString(buf, value.String(), colorAttrValue)
147148
}

handler_test.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package console
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
78
"log/slog"
89
"os"
@@ -34,6 +35,14 @@ func TestHandler_NoColor(t *testing.T) {
3435
AssertEqual(t, expected, buf.String())
3536
}
3637

38+
type theStringer struct{}
39+
40+
func (t theStringer) String() string { return "stringer" }
41+
42+
type noStringer struct {
43+
Foo string
44+
}
45+
3746
func TestHandler_Attr(t *testing.T) {
3847
buf := bytes.Buffer{}
3948
h := NewHandler(&buf, &HandlerOptions{NoColor: true})
@@ -48,10 +57,13 @@ func TestHandler_Attr(t *testing.T) {
4857
slog.Time("time", now),
4958
slog.Duration("dur", time.Second),
5059
slog.Group("group", slog.String("foo", "bar"), slog.Group("subgroup", slog.String("foo", "bar"))),
60+
slog.Any("err", errors.New("the error")),
61+
slog.Any("stringer", theStringer{}),
62+
slog.Any("nostringer", noStringer{Foo: "bar"}),
5163
)
5264
AssertNoError(t, h.Handle(context.Background(), rec))
5365

54-
expected := fmt.Sprintf("%s INF foobar bool=true int=-12 uint=12 float=3.14 foo=bar time=%s dur=1s group.foo=bar group.subgroup.foo=bar\r\n", now.Format(time.DateTime), now.Format(time.RFC3339))
66+
expected := fmt.Sprintf("%s INF foobar bool=true int=-12 uint=12 float=3.14 foo=bar time=%s dur=1s group.foo=bar group.subgroup.foo=bar err=the error stringer=stringer nostringer={bar}\r\n", now.Format(time.DateTime), now.Format(time.RFC3339))
5567
AssertEqual(t, expected, buf.String())
5668
}
5769

@@ -148,3 +160,10 @@ func TestHandler_Source(t *testing.T) {
148160
AssertNoError(t, h2.Handle(context.Background(), rec))
149161
AssertEqual(t, fmt.Sprintf("%s INF foobar\r\n", now.Format(time.DateTime)), buf.String())
150162
}
163+
164+
func TestHandler_Err(t *testing.T) {
165+
w := writerFunc(func(b []byte) (int, error) { return 0, errors.New("nope") })
166+
h := NewHandler(w, &HandlerOptions{NoColor: true})
167+
rec := slog.NewRecord(time.Now(), slog.LevelInfo, "foobar", 0)
168+
AssertError(t, h.Handle(context.Background(), rec))
169+
}

utils_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package console
2+
3+
import (
4+
"cmp"
5+
"testing"
6+
)
7+
8+
func AssertZero[E comparable](t *testing.T, v E) {
9+
t.Helper()
10+
var zero E
11+
if v != zero {
12+
t.Errorf("expected zero value, got %v", v)
13+
}
14+
}
15+
16+
func AssertEqual[E comparable](t *testing.T, expected, value E) {
17+
t.Helper()
18+
if expected != value {
19+
t.Errorf("expected %v, got %v", expected, value)
20+
}
21+
}
22+
23+
func AssertNotEqual[E comparable](t *testing.T, expected, value E) {
24+
t.Helper()
25+
if expected == value {
26+
t.Errorf("expected to be different, got %v", value)
27+
}
28+
}
29+
30+
func AssertGreaterOrEqual[E cmp.Ordered](t *testing.T, expected, value E) {
31+
t.Helper()
32+
if expected > value {
33+
t.Errorf("expected to be %v to be greater than %v", value, expected)
34+
}
35+
}
36+
37+
func AssertNoError(t *testing.T, err error) {
38+
t.Helper()
39+
if err != nil {
40+
t.Errorf("expected no error, got %q", err.Error())
41+
}
42+
}
43+
44+
func AssertError(t *testing.T, err error) {
45+
t.Helper()
46+
if err == nil {
47+
t.Error("expected an error, got nil")
48+
}
49+
}
50+
51+
// func AssertNil(t *testing.T, value any) {
52+
// t.Helper()
53+
// if value != nil {
54+
// t.Errorf("expected nil, got %v", value)
55+
// }
56+
// }
57+
58+
type writerFunc func([]byte) (int, error)
59+
60+
func (w writerFunc) Write(b []byte) (int, error) {
61+
return w(b)
62+
}

0 commit comments

Comments
 (0)