]> Cypherpunks repositories - gostls13.git/commitdiff
html/template: include itself while cloning
authorNodir Turakulov <nodir@google.com>
Tue, 20 Oct 2015 16:02:28 +0000 (09:02 -0700)
committerAndrew Gerrand <adg@golang.org>
Tue, 20 Oct 2015 23:53:27 +0000 (23:53 +0000)
template.Clone() initialized template set incorrectly:
it didn't include itself.

* include itself in template set while cloning
* add a test

Fixes #12996

Change-Id: I932530e4f7f1bbebf833e12b000a5ce052bc9223
Reviewed-on: https://go-review.googlesource.com/16104
Reviewed-by: Andrew Gerrand <adg@golang.org>
src/html/template/template.go
src/html/template/template_test.go [new file with mode: 0644]

index 5cfac49d087eb8ae75a47845f7c8bee116ddbcba..f0609ca6350bbf70b7f5d238ca4f2daa44df85a3 100644 (file)
@@ -230,6 +230,7 @@ func (t *Template) Clone() (*Template, error) {
                        set: make(map[string]*Template),
                },
        }
+       ret.set[ret.Name()] = ret
        for _, x := range textClone.Templates() {
                name := x.Name()
                src := t.set[name]
diff --git a/src/html/template/template_test.go b/src/html/template/template_test.go
new file mode 100644 (file)
index 0000000..6f70d67
--- /dev/null
@@ -0,0 +1,29 @@
+package template
+
+import (
+       "bytes"
+       "testing"
+)
+
+func TestTemplateClone(t *testing.T) {
+       // https://golang.org/issue/12996
+       orig := New("name")
+       clone, err := orig.Clone()
+       if err != nil {
+               t.Fatal(err)
+       }
+       if len(clone.Templates()) != len(orig.Templates()) {
+               t.Fatalf("Invalid lenth of t.Clone().Templates()")
+       }
+
+       const want = "stuff"
+       parsed := Must(clone.Parse(want))
+       var buf bytes.Buffer
+       err = parsed.Execute(&buf, nil)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if got := buf.String(); got != want {
+               t.Fatalf("got %q; want %q", got, want)
+       }
+}