From 22a266a259de014fd27505ad77e0dc14fb8501d4 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sun, 20 Nov 2016 21:39:44 -0700 Subject: [PATCH] templates: Add arguments to .Include --- caddyhttp/gzip/gzip_test.go | 2 +- caddyhttp/httpserver/context.go | 7 +++++-- caddyhttp/httpserver/context_test.go | 13 +++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/caddyhttp/gzip/gzip_test.go b/caddyhttp/gzip/gzip_test.go index 738dff679..9c93a2742 100644 --- a/caddyhttp/gzip/gzip_test.go +++ b/caddyhttp/gzip/gzip_test.go @@ -104,7 +104,7 @@ func nextFunc(shouldGzip bool) httpserver.Handler { return 0, fmt.Errorf("ResponseWriter should be gzipResponseWriter, found %T", w) } if strings.Contains(w.Header().Get("Content-Type"), "application/x-gzip") { - return 0, fmt.Errorf("Content type should not be gzip.") + return 0, fmt.Errorf("Content-Type should not be gzip") } return 0, nil } diff --git a/caddyhttp/httpserver/context.go b/caddyhttp/httpserver/context.go index fcbae17d6..b7d1065c2 100644 --- a/caddyhttp/httpserver/context.go +++ b/caddyhttp/httpserver/context.go @@ -12,8 +12,9 @@ import ( "text/template" "time" - "github.com/russross/blackfriday" "os" + + "github.com/russross/blackfriday" ) // This file contains the context and functions available for @@ -24,10 +25,12 @@ type Context struct { Root http.FileSystem Req *http.Request URL *url.URL + Args []interface{} // defined by arguments to .Include } // Include returns the contents of filename relative to the site root. -func (c Context) Include(filename string) (string, error) { +func (c Context) Include(filename string, args ...interface{}) (string, error) { + c.Args = args return ContextInclude(filename, c, c.Root) } diff --git a/caddyhttp/httpserver/context_test.go b/caddyhttp/httpserver/context_test.go index b349f424e..2e51e7d78 100644 --- a/caddyhttp/httpserver/context_test.go +++ b/caddyhttp/httpserver/context_test.go @@ -30,6 +30,7 @@ func TestInclude(t *testing.T) { }() tests := []struct { + args []interface{} fileContent string expectedContent string shouldErr bool @@ -42,7 +43,15 @@ func TestInclude(t *testing.T) { shouldErr: false, expectedErrorContent: "", }, - // Test 1 - failure on template.Parse + // Test 1 - all good, with args + { + args: []interface{}{"hello", 5}, + fileContent: `str1 {{ .Root }} str2 {{index .Args 0}} {{index .Args 1}}`, + expectedContent: fmt.Sprintf("str1 %s str2 %s %d", context.Root, "hello", 5), + shouldErr: false, + expectedErrorContent: "", + }, + // Test 2 - failure on template.Parse { fileContent: `str1 {{ .Root } str2`, expectedContent: "", @@ -73,7 +82,7 @@ func TestInclude(t *testing.T) { t.Fatal(testPrefix+"Failed to create test file. Error was: %v", err) } - content, err := context.Include(inputFilename) + content, err := context.Include(inputFilename, test.args...) if err != nil { if !test.shouldErr { t.Errorf(testPrefix+"Expected no error, found [%s]", test.expectedErrorContent, err.Error())