mirror of https://github.com/pkg/errors.git
179 lines
3.1 KiB
Go
179 lines
3.1 KiB
Go
// +build go1.13
|
|
|
|
package errors
|
|
|
|
import (
|
|
stderrors "errors"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestErrorChainCompat(t *testing.T) {
|
|
err := stderrors.New("error that gets wrapped")
|
|
wrapped := Wrap(err, "wrapped up")
|
|
if !stderrors.Is(wrapped, err) {
|
|
t.Errorf("Wrap does not support Go 1.13 error chains")
|
|
}
|
|
}
|
|
|
|
func TestIs(t *testing.T) {
|
|
err := New("test")
|
|
|
|
type args struct {
|
|
err error
|
|
target error
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "with stack",
|
|
args: args{
|
|
err: WithStack(err),
|
|
target: err,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "with message",
|
|
args: args{
|
|
err: WithMessage(err, "test"),
|
|
target: err,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "with message format",
|
|
args: args{
|
|
err: WithMessagef(err, "%s", "test"),
|
|
target: err,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "std errors compatibility",
|
|
args: args{
|
|
err: fmt.Errorf("wrap it: %w", err),
|
|
target: err,
|
|
},
|
|
want: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := Is(tt.args.err, tt.args.target); got != tt.want {
|
|
t.Errorf("Is() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type customErr struct {
|
|
msg string
|
|
}
|
|
|
|
func (c customErr) Error() string { return c.msg }
|
|
|
|
func TestAs(t *testing.T) {
|
|
var err = customErr{msg: "test message"}
|
|
|
|
type args struct {
|
|
err error
|
|
target interface{}
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "with stack",
|
|
args: args{
|
|
err: WithStack(err),
|
|
target: new(customErr),
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "with message",
|
|
args: args{
|
|
err: WithMessage(err, "test"),
|
|
target: new(customErr),
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "with message format",
|
|
args: args{
|
|
err: WithMessagef(err, "%s", "test"),
|
|
target: new(customErr),
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "std errors compatibility",
|
|
args: args{
|
|
err: fmt.Errorf("wrap it: %w", err),
|
|
target: new(customErr),
|
|
},
|
|
want: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := As(tt.args.err, tt.args.target); got != tt.want {
|
|
t.Errorf("As() = %v, want %v", got, tt.want)
|
|
}
|
|
|
|
ce := tt.args.target.(*customErr)
|
|
if !reflect.DeepEqual(err, *ce) {
|
|
t.Errorf("set target error failed, target error is %v", *ce)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUnwrap(t *testing.T) {
|
|
err := New("test")
|
|
|
|
type args struct {
|
|
err error
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want error
|
|
}{
|
|
{
|
|
name: "with stack",
|
|
args: args{err: WithStack(err)},
|
|
want: err,
|
|
},
|
|
{
|
|
name: "with message",
|
|
args: args{err: WithMessage(err, "test")},
|
|
want: err,
|
|
},
|
|
{
|
|
name: "with message format",
|
|
args: args{err: WithMessagef(err, "%s", "test")},
|
|
want: err,
|
|
},
|
|
{
|
|
name: "std errors compatibility",
|
|
args: args{err: fmt.Errorf("wrap: %w", err)},
|
|
want: err,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if err := Unwrap(tt.args.err); !reflect.DeepEqual(err, tt.want) {
|
|
t.Errorf("Unwrap() error = %v, want %v", err, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|