|
1 | | -package errors |
| 1 | +package errors_test |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "testing" |
| 6 | + |
| 7 | + "github.com/memsql/errors" |
| 8 | + "github.com/stretchr/testify/require" |
5 | 9 | ) |
6 | 10 |
|
7 | 11 | func TestStringIs(t *testing.T) { |
8 | | - const myErr String = "custom type of error" |
| 12 | + const myErr errors.String = "custom type of error" |
9 | 13 | ex := myErr.Errorf("%s, we have a problem", "houston") |
10 | 14 | if ex.Error() != "houston, we have a problem" { |
11 | 15 | t.Errorf("mismatched text, have %q", ex.Error()) |
12 | 16 | } |
13 | | - if !Is(ex, myErr) { |
| 17 | + if !errors.Is(ex, myErr) { |
14 | 18 | t.Errorf("exception (%T) is not myErr (%T)", ex, myErr) |
15 | 19 | } |
16 | 20 | } |
| 21 | + |
| 22 | +func TestStringAsMarker(t *testing.T) { |
| 23 | + const signalOne errors.String = "signal one" |
| 24 | + const signalTwo errors.String = "signal two" |
| 25 | + |
| 26 | + err := errors.WithStack(fmt.Errorf("a test error")) |
| 27 | + require.False(t, errors.Is(err, signalOne), "non-signaled errors are not the signal error") |
| 28 | + require.NoError(t, signalOne.Wrap(nil), "wrapped nil is nil") |
| 29 | + |
| 30 | + require.True(t, errors.Is(signalOne.Wrap(err), signalOne), "wrapped errors are the signal error (Wrap)") |
| 31 | + require.False(t, errors.Is(signalTwo.Wrap(err), signalOne), "one signal error is not another (Wrap)") |
| 32 | + require.False(t, errors.Is(signalOne, signalTwo), "raw signal are not each other (Wrap)") |
| 33 | + require.True(t, errors.Is(signalOne, signalOne), "raw signal is itself (Wrap)") |
| 34 | + require.True(t, errors.Is(signalTwo.Wrap(signalOne.Wrap(err)), signalOne), "double wrapped is the signal #1 (Wrap)") |
| 35 | + require.True(t, errors.Is(signalOne.Wrap(signalTwo.Wrap(err)), signalOne), "double wrapped is the signal #2 (Wrap)") |
| 36 | + require.Equal(t, "a test error", signalOne.Wrap(signalTwo.Wrap(err)).Error(), "the string is untouched (Wrap)") |
| 37 | + |
| 38 | + require.True(t, errors.Is(signalOne.Errorf("%w", err), signalOne), "wrapped errors are the signal error (Errorf)") |
| 39 | + require.False(t, errors.Is(signalTwo.Errorf("%w", err), signalOne), "one signal error is not another (Errorf)") |
| 40 | + require.False(t, errors.Is(signalOne, signalTwo), "raw signal are not each other (Errorf)") |
| 41 | + require.True(t, errors.Is(signalOne, signalOne), "raw signal is itself (Errorf)") |
| 42 | + require.True(t, errors.Is(signalTwo.Errorf("%w", signalOne.Errorf("%w", err)), signalOne), "double wrapped is the signal #1 (Errorf)") |
| 43 | + require.True(t, errors.Is(signalOne.Errorf("%w", signalTwo.Errorf("%w", err)), signalOne), "double wrapped is the signal #2 (Errorf)") |
| 44 | + require.Equal(t, "a test error", signalOne.Errorf("%w", signalTwo.Errorf("%w", err)).Error(), "the string is untouched (Errorf)") |
| 45 | +} |
0 commit comments