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  }