panic if err is nil on c.Error

A panic here provides a more informative stack trace than the panic which would otherwise occur while errors are being collected.
This commit is contained in:
Ammar Bandukwala 2017-05-08 19:04:22 -05:00
parent d4a53101c3
commit 781cbd19f0
No known key found for this signature in database
GPG Key ID: E7622005E7EC3D82
2 changed files with 11 additions and 0 deletions

View File

@ -144,7 +144,11 @@ func (c *Context) AbortWithError(code int, err error) *Error {
// It's a good idea to call Error for each error that occurred during the resolution of a request. // It's a good idea to call Error for each error that occurred during the resolution of a request.
// A middleware can be used to collect all the errors // A middleware can be used to collect all the errors
// and push them to a database together, print a log, or append it in the HTTP response. // and push them to a database together, print a log, or append it in the HTTP response.
// Error will panic if err is nil.
func (c *Context) Error(err error) *Error { func (c *Context) Error(err error) *Error {
if err == nil {
panic("err is nil")
}
var parsedError *Error var parsedError *Error
switch err.(type) { switch err.(type) {
case *Error: case *Error:

View File

@ -852,6 +852,13 @@ func TestContextError(t *testing.T) {
assert.Equal(t, c.Errors[1].Type, ErrorTypePublic) assert.Equal(t, c.Errors[1].Type, ErrorTypePublic)
assert.Equal(t, c.Errors.Last(), c.Errors[1]) assert.Equal(t, c.Errors.Last(), c.Errors[1])
defer func() {
if recover() == nil {
t.Error("didn't panic")
}
}()
c.Error(nil)
} }
func TestContextTypedError(t *testing.T) { func TestContextTypedError(t *testing.T) {