|
package common
|
|
|
|
import (
|
|
fmt "fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestErrorPanic(t *testing.T) {
|
|
type pnk struct {
|
|
msg string
|
|
}
|
|
|
|
capturePanic := func() (err Error) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
err = ErrorWrap(r, "This is the message in ErrorWrap(r, message).")
|
|
}
|
|
return
|
|
}()
|
|
panic(pnk{"something"})
|
|
return nil
|
|
}
|
|
|
|
var err = capturePanic()
|
|
|
|
assert.Equal(t, pnk{"something"}, err.Cause())
|
|
assert.Equal(t, pnk{"something"}, err.T())
|
|
assert.Equal(t, "This is the message in ErrorWrap(r, message).", err.Message())
|
|
assert.Equal(t, "Error{`This is the message in ErrorWrap(r, message).` (cause: {something})}", fmt.Sprintf("%v", err))
|
|
assert.Contains(t, fmt.Sprintf("%#v", err), "Message: This is the message in ErrorWrap(r, message).")
|
|
assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n 0")
|
|
}
|
|
|
|
func TestErrorWrapSomething(t *testing.T) {
|
|
|
|
var err = ErrorWrap("something", "formatter%v%v", 0, 1)
|
|
|
|
assert.Equal(t, "something", err.Cause())
|
|
assert.Equal(t, "something", err.T())
|
|
assert.Equal(t, "formatter01", err.Message())
|
|
assert.Equal(t, "Error{`formatter01` (cause: something)}", fmt.Sprintf("%v", err))
|
|
assert.Regexp(t, `Message: formatter01\n`, fmt.Sprintf("%#v", err))
|
|
assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n 0")
|
|
}
|
|
|
|
func TestErrorWrapNothing(t *testing.T) {
|
|
|
|
var err = ErrorWrap(nil, "formatter%v%v", 0, 1)
|
|
|
|
assert.Equal(t, nil, err.Cause())
|
|
assert.Equal(t, nil, err.T())
|
|
assert.Equal(t, "formatter01", err.Message())
|
|
assert.Equal(t, "Error{`formatter01`}", fmt.Sprintf("%v", err))
|
|
assert.Regexp(t, `Message: formatter01\n`, fmt.Sprintf("%#v", err))
|
|
assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n 0")
|
|
}
|
|
|
|
func TestErrorNewError(t *testing.T) {
|
|
|
|
var err = NewError("formatter%v%v", 0, 1)
|
|
|
|
assert.Equal(t, nil, err.Cause())
|
|
assert.Equal(t, "formatter%v%v", err.T())
|
|
assert.Equal(t, "formatter01", err.Message())
|
|
assert.Equal(t, "Error{`formatter01`}", fmt.Sprintf("%v", err))
|
|
assert.Regexp(t, `Message: formatter01\n`, fmt.Sprintf("%#v", err))
|
|
assert.NotContains(t, fmt.Sprintf("%#v", err), "Stack Trace")
|
|
}
|
|
|
|
func TestErrorNewErrorWithStacktrace(t *testing.T) {
|
|
|
|
var err = NewError("formatter%v%v", 0, 1).Stacktrace()
|
|
|
|
assert.Equal(t, nil, err.Cause())
|
|
assert.Equal(t, "formatter%v%v", err.T())
|
|
assert.Equal(t, "formatter01", err.Message())
|
|
assert.Equal(t, "Error{`formatter01`}", fmt.Sprintf("%v", err))
|
|
assert.Regexp(t, `Message: formatter01\n`, fmt.Sprintf("%#v", err))
|
|
assert.Contains(t, fmt.Sprintf("%#v", err), "Stack Trace:\n 0")
|
|
}
|
|
|
|
func TestErrorNewErrorWithTrace(t *testing.T) {
|
|
|
|
var err = NewError("formatter%v%v", 0, 1)
|
|
err.Trace("trace %v", 1)
|
|
err.Trace("trace %v", 2)
|
|
err.Trace("trace %v", 3)
|
|
|
|
assert.Equal(t, nil, err.Cause())
|
|
assert.Equal(t, "formatter%v%v", err.T())
|
|
assert.Equal(t, "formatter01", err.Message())
|
|
assert.Equal(t, "Error{`formatter01`}", fmt.Sprintf("%v", err))
|
|
assert.Regexp(t, `Message: formatter01\n`, fmt.Sprintf("%#v", err))
|
|
dump := fmt.Sprintf("%#v", err)
|
|
assert.NotContains(t, dump, "Stack Trace")
|
|
assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 1`, dump)
|
|
assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 2`, dump)
|
|
assert.Regexp(t, `common/errors_test\.go:[0-9]+ - trace 3`, dump)
|
|
}
|
|
|
|
func TestErrorWrapError(t *testing.T) {
|
|
var err1 error = NewError("my message")
|
|
var err2 error = ErrorWrap(err1, "another message")
|
|
assert.Equal(t, err1, err2)
|
|
}
|