119 lines
1.8 KiB
Go
119 lines
1.8 KiB
Go
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")
|
|
}
|
|
}
|