| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package errors |
| |
| import ( |
| "errors" |
| "strings" |
| "testing" |
| ) |
| |
| func TestErrors(t *testing.T) { |
| var sentinel = New("sentinel") |
| var foreign = errors.New("foreign") |
| for _, test := range []struct { |
| what string |
| err error |
| wantText string |
| is []error |
| isNot []error |
| }{{ |
| what: `New("abc")`, |
| err: New("abc"), |
| wantText: "abc", |
| }, { |
| what: `New("%v", sentinel)`, |
| err: New("%v", sentinel), |
| wantText: "sentinel", |
| isNot: []error{sentinel}, |
| }, { |
| what: `Wrap(sentinel, "%v", "text")`, |
| err: Wrap(sentinel, "%v", "text"), |
| wantText: "text: sentinel", |
| is: []error{sentinel}, |
| }, { |
| what: `New("%v", foreign)`, |
| err: New("%v", foreign), |
| wantText: "foreign", |
| isNot: []error{foreign}, |
| }, { |
| what: `Wrap(foreign, "%v", "text")`, |
| err: Wrap(foreign, "%v", "text"), |
| wantText: "text: foreign", |
| is: []error{foreign}, |
| }} { |
| if got, want := test.err.Error(), prefix; !strings.HasPrefix(got, want) { |
| t.Errorf("%v.Error() = %q, want prefix %q", test.what, got, want) |
| } |
| if got, want := test.err.Error(), prefix+test.wantText; got != want { |
| t.Errorf("%v.Error() = %q, want %q", test.what, got, want) |
| } |
| if got, want := Is(test.err, Error), true; got != want { |
| t.Errorf("errors.Is(%v, errors.Error) = %v, want %v", test.what, got, want) |
| } |
| for _, err := range test.is { |
| if got, want := Is(test.err, err), true; got != want { |
| t.Errorf("errors.Is(%v, %v) = %v, want %v", test.what, err, got, want) |
| } |
| } |
| for _, err := range test.isNot { |
| if got, want := Is(test.err, err), false; got != want { |
| t.Errorf("errors.Is(%v, %v) = %v, want %v", test.what, err, got, want) |
| } |
| } |
| } |
| } |