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  }