Skip to content

Commit a5d3e6e

Browse files
committed
assert: Add Error and ErrorContains
1 parent 97798d6 commit a5d3e6e

File tree

2 files changed

+63
-4
lines changed

2 files changed

+63
-4
lines changed

sloggers/slogtest/assert/assert.go

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
// Package assert is a helper package for test assertions.
2+
//
3+
// On failure, every assertion will fatal the test.
4+
//
5+
// The name argument is included in each assertion for easier debugging.
26
package assert // import "cdr.dev/slog/sloggers/slogtest/assert"
37

48
import (
9+
"strings"
510
"testing"
611

712
"cdr.dev/slog"
@@ -24,8 +29,6 @@ func Equal(t testing.TB, exp, act interface{}, name string) {
2429
}
2530

2631
// Success asserts err == nil.
27-
//
28-
// If err isn't nil, it will fatal the test with the error.
2932
func Success(t testing.TB, err error, name string) {
3033
slog.Helper()
3134
if err != nil {
@@ -37,9 +40,39 @@ func Success(t testing.TB, err error, name string) {
3740
}
3841

3942
// True asserts act == true.
40-
//
41-
// If act isn't true, it will fatal the test.
4243
func True(t testing.TB, act bool, name string) {
4344
slog.Helper()
4445
Equal(t, true, act, name)
4546
}
47+
48+
// Error asserts err != nil.
49+
func Error(t testing.TB, err error, name string) {
50+
slog.Helper()
51+
if err == nil {
52+
slogtest.Fatal(t, "expected error",
53+
slog.F("name", name),
54+
)
55+
}
56+
}
57+
58+
// ErrorContains asserts err != nil and err.Error() contains sub.
59+
//
60+
// The match will be case insensitive.
61+
func ErrorContains(t testing.TB, err error, sub, name string) {
62+
slog.Helper()
63+
Error(t, err, name)
64+
errs := err.Error()
65+
if !stringContainsFold(errs, sub) {
66+
slogtest.Fatal(t, "unexpected error string",
67+
slog.F("name", name),
68+
slog.F("error_string", errs),
69+
slog.F("expected_substring", sub),
70+
)
71+
}
72+
}
73+
74+
func stringContainsFold(errs, sub string) bool {
75+
errs = strings.ToLower(errs)
76+
sub = strings.ToLower(sub)
77+
return strings.Contains(errs, sub)
78+
}

sloggers/slogtest/assert/assert_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,32 @@ func TestTrue(t *testing.T) {
4747
assert.True(tb, false, "meow")
4848
}
4949

50+
func TestError(t *testing.T) {
51+
t.Parallel()
52+
53+
tb := &fakeTB{}
54+
assert.Error(tb, io.EOF, "meow")
55+
56+
defer func() {
57+
recover()
58+
simpleassert.Equal(t, 1, tb.fatals, "fatals")
59+
}()
60+
assert.Error(tb, nil, "meow")
61+
}
62+
63+
func TestErrorContains(t *testing.T) {
64+
t.Parallel()
65+
66+
tb := &fakeTB{}
67+
assert.ErrorContains(tb, io.EOF, "eof", "meow")
68+
69+
defer func() {
70+
recover()
71+
simpleassert.Equal(t, 1, tb.fatals, "fatals")
72+
}()
73+
assert.ErrorContains(tb, io.ErrClosedPipe, "eof", "meow")
74+
}
75+
5076
type fakeTB struct {
5177
testing.TB
5278

0 commit comments

Comments
 (0)