diff options
| author | Horus3 | 2015-05-11 23:47:47 +0200 |
|---|---|---|
| committer | Horus3 | 2015-05-11 23:47:47 +0200 |
| commit | 5986015358e5b7cf523122bbdb6831dccf7ca306 (patch) | |
| tree | 6b0f5b5b8b80bef7f6a9f286298e8d06080cad84 /recorder.go | |
| parent | 9c757388f1974b32a2f88cf36b709a160491baf8 (diff) | |
| download | uhttpd-5986015358e5b7cf523122bbdb6831dccf7ca306.tar.gz | |
Some fixes, shows 404 page on directory not found.
Diffstat (limited to 'recorder.go')
| -rw-r--r-- | recorder.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/recorder.go b/recorder.go new file mode 100644 index 0000000..90ef1a7 --- /dev/null +++ b/recorder.go @@ -0,0 +1,72 @@ +package main + +/* + Copy from net/http/httptest + Please read there for the license. +*/ + +import ( + "bytes" + "net/http" +) + +// ResponseRecorder is an implementation of http.ResponseWriter that +// records its mutations for later inspection in tests. +type ResponseRecorder struct { + Code int // the HTTP response code from WriteHeader + HeaderMap http.Header // the HTTP response headers + Body *bytes.Buffer // if non-nil, the bytes.Buffer to append written data to + Flushed bool + + wroteHeader bool +} + +// NewRecorder returns an initialized ResponseRecorder. +func NewRecorder() *ResponseRecorder { + return &ResponseRecorder{ + HeaderMap: make(http.Header), + Body: new(bytes.Buffer), + Code: 200, + } +} + +// DefaultRemoteAddr is the default remote address to return in RemoteAddr if +// an explicit DefaultRemoteAddr isn't set on ResponseRecorder. +const DefaultRemoteAddr = "1.2.3.4" + +// Header returns the response headers. +func (rw *ResponseRecorder) Header() http.Header { + m := rw.HeaderMap + if m == nil { + m = make(http.Header) + rw.HeaderMap = m + } + return m +} + +// Write always succeeds and writes to rw.Body, if not nil. +func (rw *ResponseRecorder) Write(buf []byte) (int, error) { + if !rw.wroteHeader { + rw.WriteHeader(200) + } + if rw.Body != nil { + rw.Body.Write(buf) + } + return len(buf), nil +} + +// WriteHeader sets rw.Code. +func (rw *ResponseRecorder) WriteHeader(code int) { + if !rw.wroteHeader { + rw.Code = code + } + rw.wroteHeader = true +} + +// Flush sets rw.Flushed to true. +func (rw *ResponseRecorder) Flush() { + if !rw.wroteHeader { + rw.WriteHeader(200) + } + rw.Flushed = true +} |
