aboutsummaryrefslogtreecommitdiff
path: root/src/text/template/exec_test.go
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2015-08-28 15:31:51 +1000
committerAndrew Gerrand <adg@golang.org>2015-09-28 06:01:30 +0000
commit12dfc3bee482f16263ce4673a0cce399127e2a0d (patch)
treeef8f60a50da69a5dfb3c8ab16082b385a59cfbec /src/text/template/exec_test.go
parent09c6d13ac248eefd1d47e20457125ab5ac8b3246 (diff)
downloadgo-12dfc3bee482f16263ce4673a0cce399127e2a0d.tar.xz
text/template, html/template: add block keyword and permit template redefinition
This change adds a new "block" keyword that permits the definition of templates inline inside existing templates, and loosens the restriction on template redefinition. Templates may now be redefined, but in the html/template package they may only be redefined before the template is executed (and therefore escaped). The intention is that such inline templates can be redefined by subsequent template definitions, permitting a kind of template "inheritance" or "overlay". (See the example for details.) Fixes #3812 Change-Id: I733cb5332c1c201c235f759cc64333462e70dc27 Reviewed-on: https://go-review.googlesource.com/14005 Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/text/template/exec_test.go')
-rw-r--r--src/text/template/exec_test.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/text/template/exec_test.go b/src/text/template/exec_test.go
index 139fc5320d..f9cb03eead 100644
--- a/src/text/template/exec_test.go
+++ b/src/text/template/exec_test.go
@@ -1232,3 +1232,36 @@ func testBadFuncName(name string, t *testing.T) {
// reports an error.
t.Errorf("%q succeeded incorrectly as function name", name)
}
+
+func TestBlock(t *testing.T) {
+ const (
+ input = `a({{block "inner" .}}bar({{.}})baz{{end}})b`
+ want = `a(bar(hello)baz)b`
+ overlay = `{{define "inner"}}foo({{.}})bar{{end}}`
+ want2 = `a(foo(goodbye)bar)b`
+ )
+ tmpl, err := New("outer").Parse(input)
+ if err != nil {
+ t.Fatal(err)
+ }
+ tmpl2, err := Must(tmpl.Clone()).Parse(overlay)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ var buf bytes.Buffer
+ if err := tmpl.Execute(&buf, "hello"); err != nil {
+ t.Fatal(err)
+ }
+ if got := buf.String(); got != want {
+ t.Errorf("got %q, want %q", got, want)
+ }
+
+ buf.Reset()
+ if err := tmpl2.Execute(&buf, "goodbye"); err != nil {
+ t.Fatal(err)
+ }
+ if got := buf.String(); got != want2 {
+ t.Errorf("got %q, want %q", got, want2)
+ }
+}