mirror of
https://github.com/golang/go
synced 2024-11-05 17:06:13 -07:00
efd232e270
R=bradfitz CC=adg, golang-codereviews https://golang.org/cl/56680044
76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package godoc
|
|
|
|
import (
|
|
"errors"
|
|
"expvar"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"text/template"
|
|
)
|
|
|
|
var (
|
|
// NOTE: with no plain-text in the template, template.Execute will not
|
|
// return an error when http.ResponseWriter.Write does return an error.
|
|
tmpl = template.Must(template.New("test").Parse("{{.Foo}}"))
|
|
)
|
|
|
|
type withFoo struct {
|
|
Foo int
|
|
}
|
|
|
|
type withoutFoo struct {
|
|
}
|
|
|
|
type errResponseWriter struct {
|
|
}
|
|
|
|
func (*errResponseWriter) Header() http.Header {
|
|
return http.Header{}
|
|
}
|
|
|
|
func (*errResponseWriter) WriteHeader(int) {
|
|
}
|
|
|
|
func (*errResponseWriter) Write(p []byte) (int, error) {
|
|
return 0, errors.New("error")
|
|
}
|
|
|
|
func TestApplyTemplateToResponseWriter(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
desc string
|
|
rw http.ResponseWriter
|
|
data interface{}
|
|
expVars int
|
|
}{
|
|
{
|
|
desc: "no error",
|
|
rw: &httptest.ResponseRecorder{},
|
|
data: &withFoo{},
|
|
expVars: 0,
|
|
},
|
|
{
|
|
desc: "template error",
|
|
rw: &httptest.ResponseRecorder{},
|
|
data: &withoutFoo{},
|
|
expVars: 0,
|
|
},
|
|
{
|
|
desc: "ResponseWriter error",
|
|
rw: &errResponseWriter{},
|
|
data: &withFoo{},
|
|
expVars: 1,
|
|
},
|
|
} {
|
|
httpErrors.Init()
|
|
applyTemplateToResponseWriter(tc.rw, tmpl, tc.data)
|
|
gotVars := 0
|
|
httpErrors.Do(func(expvar.KeyValue) {
|
|
gotVars++
|
|
})
|
|
if gotVars != tc.expVars {
|
|
t.Errorf("applyTemplateToResponseWriter(%q): got %d vars, want %d", tc.desc, gotVars, tc.expVars)
|
|
}
|
|
}
|
|
}
|