diff --git a/multi/multi_error.go b/multi/multi_error.go index f1939e7..9807179 100644 --- a/multi/multi_error.go +++ b/multi/multi_error.go @@ -1,6 +1,7 @@ package multi import ( + "errors" "strings" "github.com/upfluence/errors/base" @@ -103,7 +104,7 @@ func ExtractErrors(err error) []error { errs := ExtractErrors(nerr) - if len(errs) == 1 && errs[0] == nerr { + if len(errs) == 1 && errors.Is(errs[0], nerr) { return []error{err} } diff --git a/multi/multi_error_test.go b/multi/multi_error_test.go index 855912c..ad7ae5d 100644 --- a/multi/multi_error_test.go +++ b/multi/multi_error_test.go @@ -34,6 +34,20 @@ func TestCombining(t *testing.T) { }, want: multi.Combine(foo, foo, foo), }, + { + errs: []error{ + errors.WithStack(notComparableError{s: []string{"foo"}}), + errors.Combine( + notComparableError{s: []string{"bar"}}, + notComparableError{s: []string{"buz"}}, + ), + }, + want: multi.Combine( + notComparableError{s: []string{"foo"}}, + notComparableError{s: []string{"bar"}}, + notComparableError{s: []string{"buz"}}, + ), + }, } { assert.Equal(t, tt.want, errors.Cause(errors.WrapErrors(tt.errs))) } @@ -55,3 +69,9 @@ func TestTags(t *testing.T) { tags.GetTags(err), ) } + +type notComparableError struct { + s []string +} + +func (notComparableError) Error() string { return "not comparable" }