mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
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:
parent
1b92c8b713
commit
2bea9d0ca1
2 changed files with 10 additions and 30 deletions
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue