72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package errors
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
type CustomError struct {
|
|
Err error
|
|
}
|
|
|
|
func (e *CustomError) Error() string { return e.Err.Error() }
|
|
|
|
func IsCustomError(err error) bool {
|
|
var asError *CustomError
|
|
return errors.As(err, &asError)
|
|
}
|
|
|
|
func TestWrapping(t *testing.T) {
|
|
t.Parallel()
|
|
originalErr := errors.New("original error")
|
|
err1 := NewError(originalErr)
|
|
if !errors.Is(err1, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
if !Is(err1, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
unwrappedErr := errors.Unwrap(err1)
|
|
if !errors.Is(unwrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
if !Is(unwrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
unwrappedErr = Unwrap(err1)
|
|
if !errors.Is(unwrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
if !Is(unwrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
wrappedErr := fmt.Errorf("wrapped: %w", originalErr)
|
|
if !errors.Is(wrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
if !Is(wrappedErr, originalErr) {
|
|
t.Errorf("original error is not wrapped")
|
|
}
|
|
}
|
|
|
|
func TestNewError(t *testing.T) {
|
|
t.Parallel()
|
|
originalErr := &CustomError{errors.New("err1")}
|
|
if !IsCustomError(originalErr) {
|
|
t.Errorf("TestNewError fail #1")
|
|
}
|
|
err1 := NewError(originalErr)
|
|
if !IsCustomError(err1) {
|
|
t.Errorf("TestNewError fail #2")
|
|
}
|
|
wrappedErr1 := fmt.Errorf("wrapped %w", err1)
|
|
if !IsCustomError(wrappedErr1) {
|
|
t.Errorf("TestNewError fail #3")
|
|
}
|
|
unwrappedErr1 := Unwrap(wrappedErr1)
|
|
if !IsCustomError(unwrappedErr1) {
|
|
t.Errorf("TestNewError fail #4")
|
|
}
|
|
}
|