github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/http/httptest/recorder.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package httptest
     6  
     7  import (
     8  	"github.com/shogo82148/std/bytes"
     9  	"github.com/shogo82148/std/net/http"
    10  )
    11  
    12  // ResponseRecorderは [http.ResponseWriter] の実装であり、テストで後で検査するためにその変更を記録します。
    13  type ResponseRecorder struct {
    14  	// CodeはWriteHeaderが設定したHTTPレスポンスコードです。
    15  	//
    16  	// HandlerがWriteHeaderやWriteを呼び出さない場合、これは暗黙のhttp.StatusOKではなく、0になることに注意してください。暗黙の値を取得するには、Resultメソッドを使用してください。
    17  	Code int
    18  
    19  	// HeaderMapはHandlerによって明示的に設定されたヘッダーを含んでいます。
    20  	// これは内部の詳細です。
    21  	//
    22  	// Deprecated: HeaderMapは歴史的な互換性のために存在しており、使用すべきではありません。
    23  	// ハンドラによって返されるヘッダーにアクセスするためには、Resultメソッドによって返される
    24  	// Response.Headerマップを使用してください。
    25  	HeaderMap http.Header
    26  
    27  	// BodyはHandlerのWrite呼び出しで送信されるバッファです。
    28  	// nilの場合、書き込みは黙って破棄されます。
    29  	Body *bytes.Buffer
    30  
    31  	// Flushed はHandlerがFlushを呼び出したかどうかを示します。
    32  	Flushed bool
    33  
    34  	result      *http.Response
    35  	snapHeader  http.Header
    36  	wroteHeader bool
    37  }
    38  
    39  // NewRecorderは初期化された [ResponseRecorder] を返します。
    40  func NewRecorder() *ResponseRecorder
    41  
    42  // DefaultRemoteAddrは、[ResponseRecorder] に明示的なDefaultRemoteAddrが設定されていない場合に、
    43  // RemoteAddrで返すデフォルトのリモートアドレスです。
    44  const DefaultRemoteAddr = "1.2.3.4"
    45  
    46  // Headerは [http.ResponseWriter] を実装します。ハンドラ内で変更するためにレスポンスヘッダーを返します。ハンドラが完了した後に書き込まれたヘッダーをテストするには、[ResponseRecorder.Result] メソッドを使用し、返されたResponse値のHeaderを確認してください。
    47  func (rw *ResponseRecorder) Header() http.Header
    48  
    49  // Writeはhttp.ResponseWriterを実装します。buf内のデータは、rw.Bodyがnilでない場合にrw.Bodyに書き込まれます。
    50  func (rw *ResponseRecorder) Write(buf []byte) (int, error)
    51  
    52  // WriteStringは [io.StringWriter] を実装します。strのデータは、nilでない場合はrw.Bodyに書き込まれます。
    53  func (rw *ResponseRecorder) WriteString(str string) (int, error)
    54  
    55  // WriteHeaderは [http.ResponseWriter] を実装します。
    56  func (rw *ResponseRecorder) WriteHeader(code int)
    57  
    58  // Flushは [http.Flusher] を実装します。Flushが呼び出されたかどうかをテストするには、rw.Flushedを参照してください。
    59  func (rw *ResponseRecorder) Flush()
    60  
    61  // Resultはハンドラによって生成されたレスポンスを返します。
    62  //
    63  // 返されるレスポンスには、少なくともStatusCode、Header、Body、およびオプションでTrailerが含まれます。
    64  // 将来的にはさらなるフィールドが追加される可能性があるため、テストでは結果をDeepEqualで比較しないよう注意してください。
    65  //
    66  // Response.Headerは、最初の書き込み呼び出し時またはこの呼び出し時のヘッダのスナップショットですが、ハンドラが書き込みを行っていない場合は呼び出し時のものになります。
    67  //
    68  // Response.Bodyは非nilであり、Body.Read呼び出しは [io.EOF] 以外のエラーを返さないことが保証されています。
    69  //
    70  // Resultは、ハンドラの実行が完了した後にのみ呼び出す必要があります。
    71  func (rw *ResponseRecorder) Result() *http.Response