1
0
mirror of https://github.com/golang/go synced 2024-11-21 20:24:50 -07:00

Fix a couple of bugs referencing data values in template.

Adds tests and fixes for two cases that fail with the current release.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/217115
This commit is contained in:
Micah Stetson 2010-02-26 18:39:43 +11:00 committed by Rob Pike
parent 8d4fb690d6
commit 8c5404746f
2 changed files with 18 additions and 0 deletions

View File

@ -623,6 +623,9 @@ func (st *state) findVar(s string) reflect.Value {
if data == nil {
return nil
}
if intf, ok := data.(*reflect.InterfaceValue); ok {
data = intf.Elem()
}
switch typ := data.Type().(type) {
case *reflect.StructType:
@ -706,6 +709,8 @@ func empty(v reflect.Value) bool {
return v.Get() == ""
case *reflect.StructValue:
return false
case *reflect.MapValue:
return false
case *reflect.ArrayValue:
return v.Len() == 0
case *reflect.SliceValue:

View File

@ -9,6 +9,7 @@ import (
"container/vector"
"fmt"
"io"
"json"
"testing"
)
@ -40,6 +41,7 @@ type S struct {
true bool
false bool
mp map[string]string
json interface{}
innermap U
stringmap map[string]string
bytes []byte
@ -340,6 +342,16 @@ var tests = []*Test{
out: "55\n",
},
&Test{
in: "{.section innermap}{.section mp}{innerkey}{.end}{.end}\n",
out: "55\n",
},
&Test{
in: "{.section json}{.repeated section maps}{a}{b}{.end}{.end}\n",
out: "1234\n",
},
&Test{
in: "{stringmap.stringkey1}\n",
@ -391,6 +403,7 @@ func TestAll(t *testing.T) {
s.false = false
s.mp = make(map[string]string)
s.mp["mapkey"] = "Ahoy!"
s.json, _ = json.Decode("{\"maps\":[{\"a\":1,\"b\":2},{\"a\":3,\"b\":4}]}")
s.innermap.mp = make(map[string]int)
s.innermap.mp["innerkey"] = 55
s.stringmap = make(map[string]string)