diff options
-rw-r--r-- | src/pkg/template/template_test.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/pkg/template/template_test.go b/src/pkg/template/template_test.go index 7aeec6d37..c293f6646 100644 --- a/src/pkg/template/template_test.go +++ b/src/pkg/template/template_test.go @@ -28,6 +28,7 @@ type S struct { integer int; raw string; innerT T; + innerPointerT *T; data []T; pdata []*T; empty []*T; @@ -341,3 +342,25 @@ func TestCustomDelims(t *testing.T) { } } } + +// Test that a variable evaluates to the field itself and does not further indirection +func TestVarIndirection(t *testing.T) { + s := new(S); + // initialized by hand for clarity. + s.innerPointerT = &t1; + + var buf bytes.Buffer; + input := "{.section @}{innerPointerT}{.end}"; + tmpl, err := Parse(input, nil); + if err != nil { + t.Fatal("unexpected parse error:", err); + } + err = tmpl.Execute(s, &buf); + if err != nil { + t.Fatal("unexpected execute error:", err) + } + expect := fmt.Sprintf("%v", &t1); // output should be hex address of t1 + if string(buf.Data()) != expect { + t.Errorf("for %q: expected %q got %q", input, expect, string(buf.Data())); + } +} |