Revert "tplimpl: return an error on unsupported type in isSet"

This breaks the theme site and lots of themes, so we will have to thinkg a little harder about this one.

This reverts commit 74ea81b885.
This commit is contained in:
Bjørn Erik Pedersen 2017-03-26 20:07:15 +02:00
parent 1b92c8b713
commit 2bea9d0ca1
2 changed files with 10 additions and 30 deletions

View file

@ -1325,24 +1325,22 @@ func (p pairList) sort() interface{} {
// isSet returns whether a given array, channel, slice, or map has a key // isSet returns whether a given array, channel, slice, or map has a key
// defined. // defined.
func isSet(a interface{}, key interface{}) (bool, error) { func isSet(a interface{}, key interface{}) bool {
av := reflect.ValueOf(a) av := reflect.ValueOf(a)
kv := reflect.ValueOf(key) kv := reflect.ValueOf(key)
switch av.Kind() { switch av.Kind() {
case reflect.Array, reflect.Chan, reflect.Slice: case reflect.Array, reflect.Chan, reflect.Slice:
if int64(av.Len()) > kv.Int() { if int64(av.Len()) > kv.Int() {
return true, nil return true
} }
case reflect.Map: case reflect.Map:
if kv.Type() == av.Type().Key() { if kv.Type() == av.Type().Key() {
return av.MapIndex(kv).IsValid(), nil return av.MapIndex(kv).IsValid()
} }
default:
return false, fmt.Errorf("unsupported type %q", av.Kind())
} }
return false, nil return false
} }
// returnWhenSet returns a given value if it set. Otherwise, it returns an // returnWhenSet returns a given value if it set. Otherwise, it returns an

View file

@ -1070,31 +1070,13 @@ func TestUnion(t *testing.T) {
func TestIsSet(t *testing.T) { func TestIsSet(t *testing.T) {
t.Parallel() t.Parallel()
aSlice := []interface{}{1, 2, 3, 5}
aMap := map[string]interface{}{"a": 1, "b": 2}
for _, test := range []struct { assert.True(t, isSet(aSlice, 2))
src interface{} assert.True(t, isSet(aMap, "b"))
key interface{} assert.False(t, isSet(aSlice, 22))
res bool assert.False(t, isSet(aMap, "bc"))
isErr bool
errStr string
}{
{[]interface{}{1, 2, 3, 5}, 2, true, false, ""},
{[]interface{}{1, 2, 3, 5}, 22, false, false, ""},
{map[string]interface{}{"a": 1, "b": 2}, "b", true, false, ""},
{map[string]interface{}{"a": 1, "b": 2}, "bc", false, false, ""},
{time.Now(), 1, false, true, `unsupported type "struct"`},
} {
res, err := isSet(test.src, test.key)
if test.isErr {
assert.EqualError(t, err, test.errStr)
continue
}
assert.NoError(t, err)
assert.Equal(t, test.res, res)
}
} }
func (x *TstX) TstRp() string { func (x *TstX) TstRp() string {