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_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)
+	}
+}