summaryrefslogtreecommitdiff
path: root/assert/errequal_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'assert/errequal_test.go')
-rw-r--r--assert/errequal_test.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/assert/errequal_test.go b/assert/errequal_test.go
new file mode 100644
index 0000000..5efbdc5
--- /dev/null
+++ b/assert/errequal_test.go
@@ -0,0 +1,77 @@
+// SPDX-FileCopyrightText: 2026 Stefan Majewsky <majewsky@gmx.net>
+// SPDX-License-Identifier: Apache-2.0
+
+package assert_test
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "regexp"
+ "testing"
+
+ "go.xyrillian.de/gg/assert"
+ "go.xyrillian.de/gg/testcapture"
+)
+
+func TestErrEqual(t *testing.T) {
+ noError := error(nil)
+ fooError := errors.New("foo error")
+ barError := errors.New("bar error")
+ nestedFooError := fmt.Errorf("nested error: %w", fooError)
+
+ // test matching against nil
+ assert.ErrEqual(t, noError, nil)
+ assert.ErrEqual(t, noError, (*os.PathError)(nil))
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, fooError, nil)
+ }, `expected no error, but got "foo error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, fooError, (*os.PathError)(nil))
+ }, `expected no error, but got "foo error"`)
+
+ // test matching against error
+ assert.ErrEqual(t, fooError, fooError)
+ assert.ErrEqual(t, nestedFooError, fooError)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, fooError, nestedFooError) // error nesting does not work the other way, we need to see the full `expected`error in`actual`
+ }, `expected "nested error: foo error", but got "foo error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, barError, fooError) // check with unrelated errors for completeness
+ }, `expected "foo error", but got "bar error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, nil, fooError)
+ }, `expected "foo error", but got no error`)
+
+ // test matching against string
+ assert.ErrEqual(t, fooError, "foo error")
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, nestedFooError, "foo error") // partial matches do not work
+ }, `expected "foo error", but got "nested error: foo error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, barError, "foo error") // check with unrelated errors for completeness
+ }, `expected "foo error", but got "bar error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, nil, "foo error")
+ }, `expected "foo error", but got no error`)
+
+ // test matching against regexp
+ fooRegexp := regexp.MustCompile(`foo`)
+ assert.ErrEqual(t, fooError, fooRegexp) // partial matches allowed here as long as regexp does not use ^ and $
+ assert.ErrEqual(t, nestedFooError, fooRegexp)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, barError, fooRegexp) // check with unrelated errors for completeness
+ }, `expected an error matching /foo/, but got "bar error"`)
+ expectErrors(t, func(t assert.TestingTB) {
+ assert.ErrEqual(t, nil, fooRegexp)
+ }, `expected an error matching /foo/, but got no error`)
+
+ // test matching against unexpected type
+ result := testcapture.Capture(t.Context(), t.Name(), func(t assert.TestingTB) {
+ assert.ErrEqual(t, errors.New("42"), 42)
+ })
+ assert.Equal(t, result, testcapture.Result{
+ Outcome: testcapture.OutcomePanicked,
+ Panic: "cannot handle `expected` of type int",
+ })
+}