]> Cypherpunks repositories - gostls13.git/commitdiff
template: fix error checking on execute without parse
authorScott Lawrence <bytbox@gmail.com>
Mon, 31 Oct 2011 23:07:17 +0000 (16:07 -0700)
committerRob Pike <r@golang.org>
Mon, 31 Oct 2011 23:07:17 +0000 (16:07 -0700)
Fixed error checking in exec.go to give a sensible error message when
execution is attempted before a successful parse (rather than an
outright panic).

R=r
CC=golang-dev
https://golang.org/cl/5306065

src/pkg/exp/template/html/escape_test.go
src/pkg/template/exec.go

index a4ea7596cd1175d9f6f679dbcd77d766da34d74d..1b3b2567335b8860163f09571fdd849d5b32b74e 100644 (file)
@@ -1549,8 +1549,8 @@ func TestEnsurePipelineContains(t *testing.T) {
        }
 }
 
-func expectExecuteFailure(t *testing.T, b *bytes.Buffer) {
-       if x := recover(); x != nil {
+func expectExecuteFailure(t *testing.T, b *bytes.Buffer, err os.Error) {
+       if err != nil {
                if b.Len() != 0 {
                        t.Errorf("output on buffer: %q", b.String())
                }
@@ -1563,8 +1563,8 @@ func TestEscapeErrorsNotIgnorable(t *testing.T) {
        var b bytes.Buffer
        tmpl := template.Must(template.New("dangerous").Parse("<a"))
        Escape(tmpl)
-       defer expectExecuteFailure(t, &b)
-       tmpl.Execute(&b, nil)
+       err := tmpl.Execute(&b, nil)
+       expectExecuteFailure(t, &b, err)
 }
 
 func TestEscapeSetErrorsNotIgnorable(t *testing.T) {
@@ -1574,8 +1574,8 @@ func TestEscapeSetErrorsNotIgnorable(t *testing.T) {
        }
        EscapeSet(s, "t")
        var b bytes.Buffer
-       defer expectExecuteFailure(t, &b)
-       s.Execute(&b, "t", nil)
+       err = s.Execute(&b, "t", nil)
+       expectExecuteFailure(t, &b, err)
 }
 
 func TestRedundantFuncs(t *testing.T) {
index e7fad72fe71a3c2833849ecfc915c2f4afe62f87..34c6633232ffaa864d5571e4172e5d24128661c9 100644 (file)
@@ -97,7 +97,7 @@ func (t *Template) Execute(wr io.Writer, data interface{}) (err os.Error) {
                line: 1,
                vars: []variable{{"$", value}},
        }
-       if t.Root == nil {
+       if t.Tree == nil || t.Root == nil {
                state.errorf("must be parsed before execution")
        }
        state.walk(value, t.Root)