Skip to content

Commit 94611f7

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

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

Diff for: sloggers/slogtest/assert/assert.go

+31-4
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 parameter is available in each assertion for easier debugging.
26
package assert // import "cdr.dev/slog/sloggers/slogtest/assert"
37

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

712
"cdr.dev/slog"
@@ -13,8 +18,15 @@ import (
1318
//
1419
// If they are not equal, it will fatal the test with a diff of the
1520
// two objects.
21+
//
22+
// If act is an error it will be unwrapped.
1623
func Equal(t testing.TB, exp, act interface{}, name string) {
1724
slog.Helper()
25+
26+
if err, ok := act.(error); ok {
27+
act = unwrapErr(err)
28+
}
29+
1830
if diff := assert.CmpDiff(exp, act); diff != "" {
1931
slogtest.Fatal(t, "unexpected value",
2032
slog.F("name", name),
@@ -24,8 +36,6 @@ func Equal(t testing.TB, exp, act interface{}, name string) {
2436
}
2537

2638
// Success asserts err == nil.
27-
//
28-
// If err isn't nil, it will fatal the test with the error.
2939
func Success(t testing.TB, err error, name string) {
3040
slog.Helper()
3141
if err != nil {
@@ -37,9 +47,26 @@ func Success(t testing.TB, err error, name string) {
3747
}
3848

3949
// True asserts act == true.
40-
//
41-
// If act isn't true, it will fatal the test.
4250
func True(t testing.TB, act bool, name string) {
4351
slog.Helper()
4452
Equal(t, true, act, name)
4553
}
54+
55+
// Error asserts err != nil.
56+
func Error(t testing.TB, err error, name string) {
57+
slog.Helper()
58+
if err == nil {
59+
slogtest.Fatal(t, "expected error",
60+
slog.F("name", name),
61+
)
62+
}
63+
}
64+
65+
func unwrapErr(err error) error {
66+
uerr := errors.Unwrap(err)
67+
for uerr != nil {
68+
err = uerr
69+
uerr = errors.Unwrap(uerr)
70+
}
71+
return err
72+
}

Diff for: sloggers/slogtest/assert/assert_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package assert_test
22

33
import (
4+
"fmt"
45
"io"
56
"testing"
67

@@ -21,6 +22,19 @@ func TestEqual(t *testing.T) {
2122
assert.Equal(tb, 3, 4, "meow")
2223
}
2324

25+
func TestEqual_error(t *testing.T) {
26+
t.Parallel()
27+
28+
tb := &fakeTB{}
29+
assert.Equal(tb, io.EOF, fmt.Errorf("failed: %w", io.EOF), "meow")
30+
31+
defer func() {
32+
recover()
33+
simpleassert.Equal(t, 1, tb.fatals, "fatals")
34+
}()
35+
assert.Equal(tb, io.ErrClosedPipe, fmt.Errorf("failed: %w", io.EOF), "meow")
36+
}
37+
2438
func TestSuccess(t *testing.T) {
2539
t.Parallel()
2640

@@ -47,6 +61,19 @@ func TestTrue(t *testing.T) {
4761
assert.True(tb, false, "meow")
4862
}
4963

64+
func TestError(t *testing.T) {
65+
t.Parallel()
66+
67+
tb := &fakeTB{}
68+
assert.Error(tb, io.EOF, "meow")
69+
70+
defer func() {
71+
recover()
72+
simpleassert.Equal(t, 1, tb.fatals, "fatals")
73+
}()
74+
assert.Error(tb, nil, "meow")
75+
}
76+
5077
type fakeTB struct {
5178
testing.TB
5279

0 commit comments

Comments
 (0)