| package skerr_test |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| assert "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/skerr" |
| "go.skia.org/infra/go/skerr/alpha_test" |
| "go.skia.org/infra/go/skerr/beta_test" |
| "go.skia.org/infra/go/testutils/unittest" |
| ) |
| |
| func TestCallStack(t *testing.T) { |
| unittest.SmallTest(t) |
| var stack []skerr.StackTrace |
| callback := func() error { |
| stack = skerr.CallStack(7, 0) |
| return nil |
| } |
| var alpha alpha_test.Alpha |
| alpha.SetWrappedCallback(callback) |
| assert.NoError(t, beta_test.CallAlpha(&alpha)) |
| assert.Len(t, stack, 7) |
| // Only assert line numbers in alpha_test.go and beta_test.go to avoid making the test brittle. |
| assert.Equal(t, "skerr.go", stack[0].File) // CallStack -> runtime.Caller |
| assert.Equal(t, "skerr_test.go", stack[1].File) // anonymous function in TestCallStack |
| assert.Equal(t, "alpha.go:14", stack[2].String()) // anonymous function in SetWrappedCallback |
| assert.Equal(t, "alpha.go:23", stack[3].String()) // Alpha.Call |
| assert.Equal(t, "beta.go:18", stack[4].String()) // callAlphaInternal |
| assert.Equal(t, "beta.go:22", stack[5].String()) // CallAlpha |
| assert.Equal(t, "skerr_test.go", stack[6].File) // TestCallStack |
| } |
| |
| func TestWrap(t *testing.T) { |
| unittest.SmallTest(t) |
| var alpha alpha_test.Alpha |
| alpha.SetWrappedCallback(beta_test.GetGenericError) |
| err := alpha.Call() |
| assert.Equal(t, beta_test.GenericError, skerr.Unwrap(err)) |
| assert.Regexp(t, beta_test.GenericError.Error()+`\. At alpha\.go:15 alpha\.go:23 skerr_test\.go:\d+.*`, err.Error()) |
| } |
| |
| func TestUnwrapOtherErr(t *testing.T) { |
| unittest.SmallTest(t) |
| err := beta_test.GenericError |
| assert.Equal(t, err, skerr.Unwrap(err)) |
| } |
| |
| func TestFmt(t *testing.T) { |
| unittest.SmallTest(t) |
| const fmtStr = "Dog too small; dog is %d kg; minimum is %d kg." |
| callback := func() error { |
| return skerr.Fmt(fmtStr, 45, 50) |
| } |
| var alpha alpha_test.Alpha |
| alpha.SetWrappedCallback(callback) |
| err := alpha.Call() |
| errStr := fmt.Sprintf(fmtStr, 45, 50) |
| assert.Equal(t, errStr, skerr.Unwrap(err).Error()) |
| assert.Regexp(t, errStr+`\. At skerr_test\.go:\d+ alpha\.go:14 alpha\.go:23 skerr_test\.go:\d+.*`, err.Error()) |
| } |
| |
| func TestWrapfCreate(t *testing.T) { |
| unittest.SmallTest(t) |
| err := beta_test.Context1(beta_test.GetGenericError) |
| assert.Equal(t, beta_test.GenericError, skerr.Unwrap(err)) |
| assert.Regexp(t, `When searching for 35 trees: human detected\. At beta.go:31 skerr_test\.go:\d+.*`, err.Error()) |
| } |
| |
| func TestWrapfAppend(t *testing.T) { |
| unittest.SmallTest(t) |
| callback := func() error { |
| return skerr.Fmt("Dog lost interest") |
| } |
| err := beta_test.Context2(callback) |
| assert.Regexp(t, `When walking the dog: When searching for 35 trees: Dog lost interest\. At skerr_test\.go:\d+ beta.go:30 beta.go:38 skerr_test\.go:\d+.*`, err.Error()) |
| } |