mirror of
https://github.com/golang/go
synced 2024-11-21 13:54:43 -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:
parent
8d4fb690d6
commit
8c5404746f
@ -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:
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user