text/template/parse: print TextNodes using %s not %q

This means that printing a Node will produce output that can be used as valid input.
It won't be exactly the same - some spacing may be different - but it will mean the same.

Fixes #4593.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/12006047
This commit is contained in:
Rob Pike 2013-07-31 15:09:13 +10:00
parent 221af5c12f
commit df4de948a5
3 changed files with 7 additions and 3 deletions

View file

@ -33,10 +33,10 @@ var multiParseTests = []multiParseTest{
nil},
{"one", `{{define "foo"}} FOO {{end}}`, noError,
[]string{"foo"},
[]string{`" FOO "`}},
[]string{" FOO "}},
{"two", `{{define "foo"}} FOO {{end}}{{define "bar"}} BAR {{end}}`, noError,
[]string{"foo", "bar"},
[]string{`" FOO "`, `" BAR "`}},
[]string{" FOO ", " BAR "}},
// errors
{"missing end", `{{define "foo"}} FOO `, hasError,
nil,

View file

@ -13,6 +13,8 @@ import (
"strings"
)
var textFormat = "%s" // Changed to "%q" in tests for better error messages.
// A Node is an element in the parse tree. The interface is trivial.
// The interface contains an unexported method so that only
// types local to this package can satisfy it.
@ -125,7 +127,7 @@ func newText(pos Pos, text string) *TextNode {
}
func (t *TextNode) String() string {
return fmt.Sprintf("%q", t.Text)
return fmt.Sprintf(textFormat, t.Text)
}
func (t *TextNode) Copy() Node {

View file

@ -256,6 +256,8 @@ var builtins = map[string]interface{}{
}
func testParse(doCopy bool, t *testing.T) {
textFormat = "%q"
defer func() { textFormat = "%s" }()
for _, test := range parseTests {
tmpl, err := New(test.name).Parse(test.input, "", "", make(map[string]*Tree), builtins)
switch {