mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-21 21:35:28 +02:00
@@ -417,6 +417,29 @@ func (ns *Namespace) Querify(params ...interface{}) (string, error) {
|
|||||||
return qs.Encode(), nil
|
return qs.Encode(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reverse creates a copy of slice and reverses it.
|
||||||
|
func (ns *Namespace) Reverse(slice interface{}) (interface{}, error) {
|
||||||
|
if slice == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
v := reflect.ValueOf(slice)
|
||||||
|
|
||||||
|
switch v.Kind() {
|
||||||
|
case reflect.Slice:
|
||||||
|
default:
|
||||||
|
return nil, errors.New("argument must be a slice")
|
||||||
|
}
|
||||||
|
|
||||||
|
sliceCopy := reflect.MakeSlice(v.Type(), v.Len(), v.Len())
|
||||||
|
|
||||||
|
for i := v.Len() - 1; i >= 0; i-- {
|
||||||
|
element := sliceCopy.Index(i)
|
||||||
|
element.Set(v.Index(v.Len() - 1 - i))
|
||||||
|
}
|
||||||
|
|
||||||
|
return sliceCopy.Interface(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Seq creates a sequence of integers. It's named and used as GNU's seq.
|
// Seq creates a sequence of integers. It's named and used as GNU's seq.
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
|
@@ -211,6 +211,25 @@ func TestDictionary(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReverse(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
c := qt.New(t)
|
||||||
|
ns := New(&deps.Deps{})
|
||||||
|
|
||||||
|
s := []string{"a", "b", "c"}
|
||||||
|
reversed, err := ns.Reverse(s)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(reversed, qt.DeepEquals, []string{"c", "b", "a"}, qt.Commentf(fmt.Sprint(reversed)))
|
||||||
|
c.Assert(s, qt.DeepEquals, []string{"a", "b", "c"})
|
||||||
|
|
||||||
|
reversed, err = ns.Reverse(nil)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(reversed, qt.IsNil)
|
||||||
|
_, err = ns.Reverse(43)
|
||||||
|
c.Assert(err, qt.Not(qt.IsNil))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestEchoParam(t *testing.T) {
|
func TestEchoParam(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
|
Reference in New Issue
Block a user