From e7f7980ff33eef1dfd20d989c55eca11d6728f48 Mon Sep 17 00:00:00 2001 From: Dan Mullineux Date: Tue, 6 Dec 2022 13:51:07 +0000 Subject: [PATCH] Wrap the context render panic. Panic handling middleware can test for this error and decide to supress the error or not. --- context.go | 5 ++++- context_test.go | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/context.go b/context.go index c41c71ec..ef822cc7 100644 --- a/context.go +++ b/context.go @@ -922,7 +922,10 @@ func (c *Context) Render(code int, r render.Render) { } if err := r.Render(c.Writer); err != nil { - panic(err) + panic(Error{ + Err: err, + Type: ErrorTypeRender, + }) } } diff --git a/context_test.go b/context_test.go index 85e0a616..16ac5508 100644 --- a/context_test.go +++ b/context_test.go @@ -655,6 +655,16 @@ func TestContextRenderPanicIfErr(t *testing.T) { defer func() { r := recover() assert.Equal(t, "TestPanicRender", fmt.Sprint(r)) + + // confirm the recovered object is an error + err, ok := r.(error) + assert.True(t, ok) + + // the error returned should be a gin render Error + e := Error{} + assert.True(t, errors.As(err, &e)) + assert.ErrorContains(t, e.Unwrap(), "TestPanicRender") + assert.True(t, e.IsType(ErrorTypeRender)) }() w := httptest.NewRecorder() c, _ := CreateTestContext(w)