diff --git a/render/render_test.go b/render/render_test.go index b27134ff..477cf774 100644 --- a/render/render_test.go +++ b/render/render_test.go @@ -8,6 +8,7 @@ import ( "bytes" "encoding/xml" "errors" + "github.com/stretchr/testify/mock" "html/template" "net/http" "net/http/httptest" @@ -177,6 +178,46 @@ func TestRenderJsonpJSONError2(t *testing.T) { assert.Equal(t, "application/javascript; charset=utf-8", w.Header().Get("Content-Type")) } +type mockResponseRecorder struct { + mock.Mock + httptest.ResponseRecorder +} + +func (m *mockResponseRecorder) Write(content []byte) (int, error) { + args := m.Called(content) + return args.Int(0), args.Error(1) +} + +func TestRenderJsonpError3(t *testing.T) { + var m *mockResponseRecorder + + data := map[string]interface{}{ + "foo": "bar", + } + + m = new(mockResponseRecorder) + m.On("Write", []byte("x")).Return(1, errors.New("mock callback write error")) + assert.Error(t, (JsonpJSON{"x", data}).Render(m), "mock callback write error") + + m = new(mockResponseRecorder) + m.On("Write", []byte("x")).Return(1, nil) + m.On("Write", []byte("(")).Return(1, errors.New("mock ( write error")) + assert.Error(t, (JsonpJSON{"x", data}).Render(m), "mock ( write error") + + m = new(mockResponseRecorder) + m.On("Write", []byte("x")).Return(1, nil) + m.On("Write", []byte("(")).Return(1, nil) + m.On("Write", []byte("{\"foo\":\"bar\"}")).Return(1, errors.New("mock ret write error")) + assert.Error(t, (JsonpJSON{"x", data}).Render(m), "mock ret write error") + + m = new(mockResponseRecorder) + m.On("Write", []byte("x")).Return(1, nil) + m.On("Write", []byte("(")).Return(1, nil) + m.On("Write", []byte("{\"foo\":\"bar\"}")).Return(1, nil) + m.On("Write", []byte(");")).Return(1, errors.New("mock ); write error")) + assert.Error(t, (JsonpJSON{"x", data}).Render(m), "mock ); write error") +} + func TestRenderJsonpJSONFail(t *testing.T) { w := httptest.NewRecorder() data := make(chan int)