github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/backend/union/errors_test.go (about) 1 //go:build go1.20 2 3 package union 4 5 import ( 6 "errors" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 var ( 13 err1 = errors.New("Error 1") 14 err2 = errors.New("Error 2") 15 err3 = errors.New("Error 3") 16 ) 17 18 func TestErrorsMap(t *testing.T) { 19 es := Errors{ 20 nil, 21 err1, 22 err2, 23 } 24 want := Errors{ 25 err2, 26 } 27 got := es.Map(func(e error) error { 28 if e == err1 { 29 return nil 30 } 31 return e 32 }) 33 assert.Equal(t, want, got) 34 } 35 36 func TestErrorsFilterNil(t *testing.T) { 37 es := Errors{ 38 nil, 39 err1, 40 nil, 41 err2, 42 nil, 43 } 44 want := Errors{ 45 err1, 46 err2, 47 } 48 got := es.FilterNil() 49 assert.Equal(t, want, got) 50 } 51 52 func TestErrorsErr(t *testing.T) { 53 // Check not all nil case 54 es := Errors{ 55 nil, 56 err1, 57 nil, 58 err2, 59 nil, 60 } 61 want := Errors{ 62 err1, 63 err2, 64 } 65 got := es.Err() 66 67 // Check all nil case 68 assert.Equal(t, want, got) 69 es = Errors{ 70 nil, 71 nil, 72 nil, 73 } 74 assert.Nil(t, es.Err()) 75 } 76 77 func TestErrorsError(t *testing.T) { 78 assert.Equal(t, "no error", Errors{}.Error()) 79 assert.Equal(t, "1 error: Error 1", Errors{err1}.Error()) 80 assert.Equal(t, "1 error: nil error", Errors{nil}.Error()) 81 assert.Equal(t, "2 errors: Error 1; Error 2", Errors{err1, err2}.Error()) 82 } 83 84 func TestErrorsUnwrap(t *testing.T) { 85 es := Errors{ 86 err1, 87 err2, 88 } 89 assert.Equal(t, []error{err1, err2}, es.Unwrap()) 90 assert.True(t, errors.Is(es, err1)) 91 assert.True(t, errors.Is(es, err2)) 92 assert.False(t, errors.Is(es, err3)) 93 }