context: add Push action

Signed-off-by: Tw <tw19881113@gmail.com>
This commit is contained in:
Tw 2017-04-24 15:25:04 +08:00
parent aa7ecb02af
commit 761a32a080
4 changed files with 66 additions and 7 deletions

View file

@ -6,6 +6,7 @@ import (
"io/ioutil"
"net"
"net/http"
"net/http/httptest"
"net/url"
"os"
"path/filepath"
@ -731,8 +732,9 @@ func initTestContext() (Context, error) {
if err != nil {
return Context{}, err
}
res := httptest.NewRecorder()
return Context{Root: http.Dir(os.TempDir()), Req: request}, nil
return Context{Root: http.Dir(os.TempDir()), responseHeader: res.Header(), Req: request}, nil
}
func getContextOrFail(t *testing.T) Context {
@ -874,3 +876,35 @@ func TestFiles(t *testing.T) {
}
}
}
func TestPush(t *testing.T) {
for name, c := range map[string]struct {
input string
expectLinks []string
}{
"oneLink": {
input: `{{.Push "/test.css"}}`,
expectLinks: []string{"</test.css>; rel=preload"},
},
"multipleLinks": {
input: `{{.Push "/test1.css"}} {{.Push "/test2.css"}}`,
expectLinks: []string{"</test1.css>; rel=preload", "</test2.css>; rel=preload"},
},
} {
c := c
t.Run(name, func(t *testing.T) {
ctx := getContextOrFail(t)
tmpl, err := template.New("").Parse(c.input)
if err != nil {
t.Fatal(err)
}
err = tmpl.Execute(ioutil.Discard, ctx)
if err != nil {
t.Fatal(err)
}
if got := ctx.responseHeader["Link"]; !reflect.DeepEqual(got, c.expectLinks) {
t.Errorf("Result not match: expect %v, but got %v", c.expectLinks, got)
}
})
}
}