tpl/collections: Return en empty slice in after instead of error
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 1 Jul 2018 18:34:02 +0000 (20:34 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 1 Jul 2018 18:34:02 +0000 (20:34 +0200)
When the given index is out of bounds. So it can safely be used with `with` etc. without extra length checking.

Fixes #4894

tpl/collections/collections.go
tpl/collections/collections_test.go

index d1b97677fdb900a62adbde0b11b692776d9e3b83..dd418d7d22f1f3598b59f791aa077c326d58dfca 100644 (file)
@@ -74,7 +74,7 @@ func (ns *Namespace) After(index interface{}, seq interface{}) (interface{}, err
        }
 
        if indexv >= seqv.Len() {
-               return nil, errors.New("no items left")
+               return seqv.Slice(0, 0).Interface(), nil
        }
 
        return seqv.Slice(indexv, seqv.Len()).Interface(), nil
index ac2c2fe6344463f62986526d9e79421b36c9d1c5..c3e88f36f2f3552159435d0e68628dae3399ce3b 100644 (file)
@@ -49,12 +49,13 @@ func TestAfter(t *testing.T) {
                expect interface{}
        }{
                {int(2), []string{"a", "b", "c", "d"}, []string{"c", "d"}},
-               {int32(3), []string{"a", "b"}, false},
+               {int32(3), []string{"a", "b"}, []string{}},
                {int64(2), []int{100, 200, 300}, []int{300}},
-               {100, []int{100, 200}, false},
+               {100, []int{100, 200}, []int{}},
                {"1", []int{100, 200, 300}, []int{200, 300}},
                {int64(-1), []int{100, 200, 300}, false},
                {"noint", []int{100, 200, 300}, false},
+               {2, []string{}, []string{}},
                {1, nil, false},
                {nil, []int{100}, false},
                {1, t, false},
@@ -70,7 +71,7 @@ func TestAfter(t *testing.T) {
                }
 
                require.NoError(t, err, errMsg)
-               assert.Equal(t, test.expect, result, errMsg)
+               require.Equal(t, test.expect, result, errMsg)
        }
 }