github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/gin/response_writer_test.go (about) 1 // Copyright 2014 Manu Martinez-Almeida. All rights reserved. 2 // Use of this source code is governed by a MIT style 3 // license that can be found in the LICENSE file. 4 5 package gin 6 7 import ( 8 "github.com/hellobchain/newcryptosm/http" 9 "github.com/hellobchain/newcryptosm/http/httptest" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 // TODO 16 // func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { 17 // func (w *responseWriter) CloseNotify() <-chan bool { 18 // func (w *responseWriter) Flush() { 19 20 var _ ResponseWriter = &responseWriter{} 21 var _ http.ResponseWriter = &responseWriter{} 22 var _ http.ResponseWriter = ResponseWriter(&responseWriter{}) 23 var _ http.Hijacker = ResponseWriter(&responseWriter{}) 24 var _ http.Flusher = ResponseWriter(&responseWriter{}) 25 var _ http.CloseNotifier = ResponseWriter(&responseWriter{}) 26 27 func init() { 28 SetMode(TestMode) 29 } 30 31 func TestResponseWriterReset(t *testing.T) { 32 testWriter := httptest.NewRecorder() 33 writer := &responseWriter{} 34 var w ResponseWriter = writer 35 36 writer.reset(testWriter) 37 assert.Equal(t, -1, writer.size) 38 assert.Equal(t, http.StatusOK, writer.status) 39 assert.Equal(t, testWriter, writer.ResponseWriter) 40 assert.Equal(t, -1, w.Size()) 41 assert.Equal(t, http.StatusOK, w.Status()) 42 assert.False(t, w.Written()) 43 } 44 45 func TestResponseWriterWriteHeader(t *testing.T) { 46 testWriter := httptest.NewRecorder() 47 writer := &responseWriter{} 48 writer.reset(testWriter) 49 w := ResponseWriter(writer) 50 51 w.WriteHeader(http.StatusMultipleChoices) 52 assert.False(t, w.Written()) 53 assert.Equal(t, http.StatusMultipleChoices, w.Status()) 54 assert.NotEqual(t, http.StatusMultipleChoices, testWriter.Code) 55 56 w.WriteHeader(-1) 57 assert.Equal(t, http.StatusMultipleChoices, w.Status()) 58 } 59 60 func TestResponseWriterWriteHeadersNow(t *testing.T) { 61 testWriter := httptest.NewRecorder() 62 writer := &responseWriter{} 63 writer.reset(testWriter) 64 w := ResponseWriter(writer) 65 66 w.WriteHeader(http.StatusMultipleChoices) 67 w.WriteHeaderNow() 68 69 assert.True(t, w.Written()) 70 assert.Equal(t, 0, w.Size()) 71 assert.Equal(t, http.StatusMultipleChoices, testWriter.Code) 72 73 writer.size = 10 74 w.WriteHeaderNow() 75 assert.Equal(t, 10, w.Size()) 76 } 77 78 func TestResponseWriterWrite(t *testing.T) { 79 testWriter := httptest.NewRecorder() 80 writer := &responseWriter{} 81 writer.reset(testWriter) 82 w := ResponseWriter(writer) 83 84 n, err := w.Write([]byte("hola")) 85 assert.Equal(t, 4, n) 86 assert.Equal(t, 4, w.Size()) 87 assert.Equal(t, http.StatusOK, w.Status()) 88 assert.Equal(t, http.StatusOK, testWriter.Code) 89 assert.Equal(t, "hola", testWriter.Body.String()) 90 assert.NoError(t, err) 91 92 n, err = w.Write([]byte(" adios")) 93 assert.Equal(t, 6, n) 94 assert.Equal(t, 10, w.Size()) 95 assert.Equal(t, "hola adios", testWriter.Body.String()) 96 assert.NoError(t, err) 97 } 98 99 func TestResponseWriterHijack(t *testing.T) { 100 testWriter := httptest.NewRecorder() 101 writer := &responseWriter{} 102 writer.reset(testWriter) 103 w := ResponseWriter(writer) 104 105 assert.Panics(t, func() { 106 _, _, err := w.Hijack() 107 assert.NoError(t, err) 108 }) 109 assert.True(t, w.Written()) 110 111 assert.Panics(t, func() { 112 w.CloseNotify() 113 }) 114 115 w.Flush() 116 } 117 118 func TestResponseWriterFlush(t *testing.T) { 119 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 120 writer := &responseWriter{} 121 writer.reset(w) 122 123 writer.WriteHeader(http.StatusInternalServerError) 124 writer.Flush() 125 })) 126 defer testServer.Close() 127 128 // should return 500 129 resp, err := http.Get(testServer.URL) 130 assert.NoError(t, err) 131 assert.Equal(t, http.StatusInternalServerError, resp.StatusCode) 132 }