Commit 02039b63 authored by Rob Pike's avatar Rob Pike

exp/template: add a tree-walking example to the test.

Also fix a comment formatting glitch.

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/4672054
parent ad58dc9d
......@@ -267,7 +267,7 @@ func isExported(name string) bool {
// The 'final' argument represents the return value from the preceding
// value of the pipeline, if any.
// If we're in a chain, such as (.X.Y.Z), .X and .Y cannot be methods;
//canBeMethod will be true only for the last element of such chains (here .Z).
// canBeMethod will be true only for the last element of such chains (here .Z).
// The isFirst argument tells whether this is the first element of a chain (here .X).
// If true, evaluation is allowed to examine the parent to resolve the reference.
func (s *state) evalField(data reflect.Value, fieldName string, args []node, final reflect.Value,
......
......@@ -346,3 +346,84 @@ func TestJSEscaping(t *testing.T) {
}
}
}
// A nice example: walk a binary tree.
type Tree struct {
Val int
Left, Right *Tree
}
const treeTemplate = `
{{define "tree"}}
[
{{.Val}}
{{with .Left}}
{{template "tree" .}}
{{end}}
{{with .Right}}
{{template "tree" .}}
{{end}}
]
{{end}}
`
func TestTree(t *testing.T) {
var tree = &Tree{
1,
&Tree{
2, &Tree{
3,
&Tree{
4, nil, nil,
},
nil,
},
&Tree{
5,
&Tree{
6, nil, nil,
},
nil,
},
},
&Tree{
7,
&Tree{
8,
&Tree{
9, nil, nil,
},
nil,
},
&Tree{
10,
&Tree{
11, nil, nil,
},
nil,
},
},
}
set := NewSet()
err := set.Parse(treeTemplate)
if err != nil {
t.Fatal("parse error:", err)
}
var b bytes.Buffer
err = set.Execute("tree", &b, tree)
if err != nil {
t.Fatal("exec error:", err)
}
stripSpace := func(r int) int {
if r == '\t' || r == '\n' {
return -1
}
return r
}
result := strings.Map(stripSpace, b.String())
const expect = "[1[2[3[4]][5[6]]][7[8[9]][10[11]]]]"
if result != expect {
t.Errorf("expected %q got %q", expect, result)
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment