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
diff --git a/src/pkg/exp/template/exec.go b/src/pkg/exp/template/exec.go
index 09bf858..42279c2 100644
--- a/src/pkg/exp/template/exec.go
+++ b/src/pkg/exp/template/exec.go
@@ -267,7 +267,7 @@
 // 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,
diff --git a/src/pkg/exp/template/exec_test.go b/src/pkg/exp/template/exec_test.go
index db3e89f..5d771a2 100644
--- a/src/pkg/exp/template/exec_test.go
+++ b/src/pkg/exp/template/exec_test.go
@@ -346,3 +346,84 @@
 		}
 	}
 }
+
+// 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)
+	}
+}