1
0
mirror of https://github.com/golang/go synced 2024-11-21 20:44:39 -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 { if data == nil {
return nil return nil
} }
if intf, ok := data.(*reflect.InterfaceValue); ok {
data = intf.Elem()
}
switch typ := data.Type().(type) { switch typ := data.Type().(type) {
case *reflect.StructType: case *reflect.StructType:
@ -706,6 +709,8 @@ func empty(v reflect.Value) bool {
return v.Get() == "" return v.Get() == ""
case *reflect.StructValue: case *reflect.StructValue:
return false return false
case *reflect.MapValue:
return false
case *reflect.ArrayValue: case *reflect.ArrayValue:
return v.Len() == 0 return v.Len() == 0
case *reflect.SliceValue: case *reflect.SliceValue:

View File

@ -9,6 +9,7 @@ import (
"container/vector" "container/vector"
"fmt" "fmt"
"io" "io"
"json"
"testing" "testing"
) )
@ -40,6 +41,7 @@ type S struct {
true bool true bool
false bool false bool
mp map[string]string mp map[string]string
json interface{}
innermap U innermap U
stringmap map[string]string stringmap map[string]string
bytes []byte bytes []byte
@ -340,6 +342,16 @@ var tests = []*Test{
out: "55\n", 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{ &Test{
in: "{stringmap.stringkey1}\n", in: "{stringmap.stringkey1}\n",
@ -391,6 +403,7 @@ func TestAll(t *testing.T) {
s.false = false s.false = false
s.mp = make(map[string]string) s.mp = make(map[string]string)
s.mp["mapkey"] = "Ahoy!" 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 = make(map[string]int)
s.innermap.mp["innerkey"] = 55 s.innermap.mp["innerkey"] = 55
s.stringmap = make(map[string]string) s.stringmap = make(map[string]string)