decred.org/dcrdex@v1.0.5/client/core/errors_test.go (about) 1 package core 2 3 import ( 4 "errors" 5 "fmt" 6 "testing" 7 ) 8 9 type testErr string 10 11 func (te testErr) Error() string { 12 return string(te) 13 } 14 15 const ( 16 err0 = testErr("other error") 17 err2 = testErr("Test error 2") 18 ) 19 20 // TestCoreError tests the error output for the Error type. 21 func TestCoreError(t *testing.T) { 22 tests := []struct { 23 in Error 24 want string 25 }{{ 26 Error{ 27 code: walletErr, 28 err: errors.New("wallet error"), 29 }, 30 "wallet error", 31 }, { 32 Error{ 33 code: walletAuthErr, 34 err: errors.New("wallet auth error"), 35 }, 36 "wallet auth error", 37 }} 38 39 for i, test := range tests { 40 result := test.in.Error() 41 if result != test.want { 42 t.Errorf("#%d: got: %s want: %s", i, result, test.want) 43 continue 44 } 45 } 46 47 coreErr := newError(walletErr, "stuff: %w", err0) 48 49 var err1 *Error 50 if !errors.As(coreErr, &err1) { 51 t.Errorf("it isn't a core.Error type") 52 } 53 if !errors.Is(coreErr, err0) { 54 t.Errorf("it wasn't err0") 55 } 56 if errors.Is(coreErr, err2) { 57 t.Errorf("it was err2") 58 } 59 otherErr := codedError(walletErr, err0) 60 var err3 testErr 61 if !errors.As(otherErr, &err3) { 62 t.Errorf("it wasn't an testErr") 63 } 64 } 65 66 func TestUnwrapErr(t *testing.T) { 67 err1 := errors.New("Error 1") 68 err2 := fmt.Errorf("Error 2: %w", err1) 69 err3 := fmt.Errorf("Not wrapped: %v, %d", "other string", 20) 70 erra := newError(walletErr, "wraps 2: %w", err2) 71 72 testCases := []struct { 73 err error 74 want error 75 }{ 76 {erra, err1}, 77 {newError(walletErr, "wraps 2: %w", err2), err1}, 78 {newError(walletErr, "wraps 1: %w", err1), err1}, 79 {newError(walletErr, "Not wrapped: %v, %d", "other string", 20), err3}, 80 } 81 for i, tc := range testCases { 82 if got := UnwrapErr(tc.err); got.Error() != tc.want.Error() { 83 t.Errorf("#%d: UnwrapErr(%v) = %v, want %v", i, tc.err, got.Error(), tc.want.Error()) 84 } 85 } 86 }