github.com/0chain/gosdk@v1.17.11/zcnbridge/errors/errors_test.go (about)

     1  package errors
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  const (
     9  	testCode = "test_code"
    10  	testText = "test text"
    11  	wrapCode = "wrap_code"
    12  	wrapText = "wrap text"
    13  )
    14  
    15  func Test_errWrapper_Error(t *testing.T) {
    16  	t.Parallel()
    17  
    18  	tests := [1]struct {
    19  		name string
    20  		err  error
    21  		want string
    22  	}{
    23  		{
    24  			name: "OK",
    25  			err:  Wrap(wrapCode, wrapText, New(testCode, testText)),
    26  			want: wrapCode + delim + wrapText + delim + testCode + delim + testText,
    27  		},
    28  	}
    29  
    30  	for idx := range tests {
    31  		test := tests[idx]
    32  		t.Run(test.name, func(t *testing.T) {
    33  			t.Parallel()
    34  
    35  			if got := test.err.Error(); got != test.want {
    36  				t.Errorf("Error() got: %v | want: %v", got, test.want)
    37  			}
    38  		})
    39  	}
    40  }
    41  
    42  func Test_errWrapper_Unwrap(t *testing.T) {
    43  	t.Parallel()
    44  
    45  	err := New(testCode, testText)
    46  
    47  	tests := [1]struct {
    48  		name    string
    49  		wrapper *ErrWrapper
    50  		want    error
    51  	}{
    52  		{
    53  			name:    "OK",
    54  			wrapper: Wrap(wrapCode, wrapText, err),
    55  			want:    err,
    56  		},
    57  	}
    58  
    59  	for idx := range tests {
    60  		test := tests[idx]
    61  		t.Run(test.name, func(t *testing.T) {
    62  			t.Parallel()
    63  
    64  			if got := test.wrapper.Unwrap(); !reflect.DeepEqual(got, test.want) {
    65  				t.Errorf("Unwrap() got: %#v | want: %#v", got, test.want)
    66  			}
    67  		})
    68  	}
    69  }
    70  
    71  func Test_errWrapper_Wrap(t *testing.T) {
    72  	t.Parallel()
    73  
    74  	err := New(testCode, testText)
    75  
    76  	tests := [1]struct {
    77  		name    string
    78  		error   error
    79  		wrapper *ErrWrapper
    80  		want    *ErrWrapper
    81  	}{
    82  		{
    83  			name:    "OK",
    84  			error:   New(testCode, testText),
    85  			wrapper: New(wrapCode, wrapText),
    86  			want:    &ErrWrapper{code: wrapCode, text: wrapText + delim + err.Error(), wrap: err},
    87  		},
    88  	}
    89  
    90  	for idx := range tests {
    91  		test := tests[idx]
    92  		t.Run(test.name, func(t *testing.T) {
    93  			t.Parallel()
    94  
    95  			if got := test.wrapper.Wrap(test.error); !reflect.DeepEqual(got, test.want) {
    96  				t.Errorf("Wrap() got: %#v | want: %#v", got, test.want)
    97  			}
    98  		})
    99  	}
   100  }
   101  
   102  func Test_errAny(t *testing.T) {
   103  	t.Parallel()
   104  
   105  	testErr := New(testCode, testText)
   106  	wrapErr := Wrap(wrapCode, wrapText, testErr)
   107  
   108  	tests := [2]struct {
   109  		name    string
   110  		list    []error
   111  		wrapErr error
   112  		want    bool
   113  	}{
   114  		{
   115  			name:    "TRUE",
   116  			list:    []error{testErr},
   117  			wrapErr: wrapErr,
   118  			want:    true,
   119  		},
   120  		{
   121  			name:    "FALSE",
   122  			list:    []error{testErr},
   123  			wrapErr: Wrap(wrapCode, wrapText, New(testCode, testText)),
   124  			want:    false,
   125  		},
   126  	}
   127  
   128  	for idx := range tests {
   129  		test := tests[idx]
   130  		t.Run(test.name, func(t *testing.T) {
   131  			t.Parallel()
   132  
   133  			if got := Any(test.wrapErr, test.list...); got != test.want {
   134  				t.Errorf("errIs() got: %v | want: %v", got, test.want)
   135  			}
   136  		})
   137  	}
   138  }
   139  
   140  func Test_errIs(t *testing.T) {
   141  	t.Parallel()
   142  
   143  	testErr := New(testCode, testText)
   144  	wrapErr := Wrap(wrapCode, wrapText, testErr)
   145  
   146  	tests := [2]struct {
   147  		name    string
   148  		testErr error
   149  		wrapErr error
   150  		want    bool
   151  	}{
   152  		{
   153  			name:    "TRUE",
   154  			testErr: testErr,
   155  			wrapErr: wrapErr,
   156  			want:    true,
   157  		},
   158  		{
   159  			name:    "FALSE",
   160  			testErr: testErr,
   161  			wrapErr: Wrap(wrapCode, wrapText, New(testCode, testText)),
   162  			want:    false,
   163  		},
   164  	}
   165  
   166  	for idx := range tests {
   167  		test := tests[idx]
   168  		t.Run(test.name, func(t *testing.T) {
   169  			t.Parallel()
   170  
   171  			if got := Is(test.wrapErr, test.testErr); got != test.want {
   172  				t.Errorf("errIs() got: %v | want: %v", got, test.want)
   173  			}
   174  		})
   175  	}
   176  }
   177  
   178  func Test_errNew(t *testing.T) {
   179  	t.Parallel()
   180  
   181  	tests := [1]struct {
   182  		name string
   183  		code string
   184  		text string
   185  		want *ErrWrapper
   186  	}{
   187  		{
   188  			name: "Equal",
   189  			code: testCode,
   190  			text: testText,
   191  			want: &ErrWrapper{code: testCode, text: testText},
   192  		},
   193  	}
   194  
   195  	for idx := range tests {
   196  		test := tests[idx]
   197  		t.Run(test.name, func(t *testing.T) {
   198  			t.Parallel()
   199  
   200  			if got := New(test.code, test.text); !reflect.DeepEqual(got, test.want) {
   201  				t.Errorf("errNew() got: %#v | want: %#v", got, test.want)
   202  			}
   203  		})
   204  	}
   205  }
   206  
   207  func Test_errWrap(t *testing.T) {
   208  	t.Parallel()
   209  
   210  	tests := [2]struct {
   211  		name string
   212  		code string
   213  		text string
   214  		wrap error
   215  		want string
   216  	}{
   217  		{
   218  			name: "OK",
   219  			code: wrapCode,
   220  			text: wrapText,
   221  			wrap: New(testCode, testText),
   222  			want: wrapCode + delim + wrapText + delim + testCode + delim + testText,
   223  		},
   224  		{
   225  			name: "nil_Wrap_OK",
   226  			code: wrapCode,
   227  			text: wrapText,
   228  			wrap: nil,
   229  			want: wrapCode + delim + wrapText,
   230  		},
   231  	}
   232  
   233  	for idx := range tests {
   234  		test := tests[idx]
   235  		t.Run(test.name, func(t *testing.T) {
   236  			t.Parallel()
   237  
   238  			if got := Wrap(test.code, test.text, test.wrap).Error(); got != test.want {
   239  				t.Errorf("errWrap() got: %#v | want: %#v", got, test.want)
   240  			}
   241  		})
   242  	}
   243  }