| // Copyright (c) HashiCorp, Inc. | |
| // SPDX-License-Identifier: MPL-2.0 | |
| package errwrap | |
| import ( | |
| "errors" | |
| "fmt" | |
| "testing" | |
| ) | |
| func TestWrappedError_impl(t *testing.T) { | |
| var _ error = new(wrappedError) | |
| } | |
| func TestGetAll(t *testing.T) { | |
| cases := []struct { | |
| Err error | |
| Msg string | |
| Len int | |
| }{ | |
| {}, | |
| { | |
| fmt.Errorf("foo"), | |
| "foo", | |
| 1, | |
| }, | |
| { | |
| fmt.Errorf("bar"), | |
| "foo", | |
| 0, | |
| }, | |
| { | |
| Wrapf("bar", fmt.Errorf("foo")), | |
| "foo", | |
| 1, | |
| }, | |
| { | |
| Wrapf("{{err}}", fmt.Errorf("foo")), | |
| "foo", | |
| 2, | |
| }, | |
| { | |
| Wrapf("bar", Wrapf("baz", fmt.Errorf("foo"))), | |
| "foo", | |
| 1, | |
| }, | |
| { | |
| fmt.Errorf("foo: %w", fmt.Errorf("bar")), | |
| "foo: bar", | |
| 1, | |
| }, | |
| { | |
| fmt.Errorf("foo: %w", fmt.Errorf("bar")), | |
| "bar", | |
| 1, | |
| }, | |
| } | |
| for i, tc := range cases { | |
| actual := GetAll(tc.Err, tc.Msg) | |
| if len(actual) != tc.Len { | |
| t.Fatalf("%d: bad: %#v", i, actual) | |
| } | |
| for _, v := range actual { | |
| if v.Error() != tc.Msg { | |
| t.Fatalf("%d: bad: %#v", i, actual) | |
| } | |
| } | |
| } | |
| } | |
| func TestGetAllType(t *testing.T) { | |
| cases := []struct { | |
| Err error | |
| Type interface{} | |
| Len int | |
| }{ | |
| {}, | |
| { | |
| fmt.Errorf("foo"), | |
| "foo", | |
| 0, | |
| }, | |
| { | |
| fmt.Errorf("bar"), | |
| fmt.Errorf("foo"), | |
| 1, | |
| }, | |
| { | |
| Wrapf("bar", fmt.Errorf("foo")), | |
| fmt.Errorf("baz"), | |
| 2, | |
| }, | |
| { | |
| Wrapf("bar", Wrapf("baz", fmt.Errorf("foo"))), | |
| Wrapf("", nil), | |
| 0, | |
| }, | |
| { | |
| fmt.Errorf("one: %w", fmt.Errorf("two: %w", fmt.Errorf("three"))), | |
| fmt.Errorf("%w", errors.New("")), | |
| 2, | |
| }, | |
| } | |
| for i, tc := range cases { | |
| actual := GetAllType(tc.Err, tc.Type) | |
| if len(actual) != tc.Len { | |
| t.Fatalf("%d: bad: %#v", i, actual) | |
| } | |
| } | |
| } | |
| func TestWrappedError_IsCompatibleWithErrorsUnwrap(t *testing.T) { | |
| inner := errors.New("inner error") | |
| err := Wrap(errors.New("outer"), inner) | |
| actual := errors.Unwrap(err) | |
| if actual != inner { | |
| t.Fatal("wrappedError did not unwrap to inner") | |
| } | |
| } |