mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
95ef93be66
commit
90d0cdf236
2 changed files with 42 additions and 0 deletions
|
@ -417,6 +417,29 @@ func (ns *Namespace) Querify(params ...interface{}) (string, error) {
|
|||
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.
|
||||
//
|
||||
// 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) {
|
||||
t.Parallel()
|
||||
c := qt.New(t)
|
||||
|
|
Loading…
Reference in a new issue