diff --git a/errors/errors.go b/errors/errors.go index fa0ef74..aedb951 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -3,6 +3,7 @@ package errors import ( "bytes" + "errors" "fmt" "strconv" @@ -94,3 +95,22 @@ func (m *multiError) Error() string { m.text = goutil.BytesToString(bText) return m.text } + +func (m *multiError) Is(target error) bool { + for _, e := range m.errs { + if errors.Is(e, target) { + return true + } + } + return false +} + + +func (m *multiError) As(target interface{}) bool{ + for _, e := range m.errs { + if errors.As(e, target){ + return true + } + } + return false +} diff --git a/errors/errors_test.go b/errors/errors_test.go index 0102c40..1715c9a 100644 --- a/errors/errors_test.go +++ b/errors/errors_test.go @@ -3,14 +3,20 @@ package errors import ( "errors" "testing" + + "github.com/stretchr/testify/assert" ) func TestErrors(t *testing.T) { + err1 := errors.New("error_text1") + err2 := errors.New("error not include") + err3 := New("error_text_3") errs := []error{ - errors.New("error_text1"), errors.New("error_text2"), nil, errors.New("error_text4"), + err3, + err1, errors.New("error_text5"), nil, errors.New("error_text7"), @@ -21,4 +27,14 @@ func TestErrors(t *testing.T) { t.Log(err) err = Append(err, errs...) t.Log(err) + + is := errors.Is(err, err1) + assert.True(t, is) + is = errors.Is(err, err2) + assert.False(t, is) + + target := &myerror{} + as := errors.As(err, &target) + assert.True(t, as) + assert.Equal(t, target, err3) }