tpl/collections: Return en empty slice in after instead of error

When the given index is out of bounds. So it can safely be used with `with` etc. without extra length checking.

Fixes #4894
This commit is contained in:
Bjørn Erik Pedersen 2018-07-01 20:34:02 +02:00
parent 78e8a744b3
commit f8212d2000
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
2 changed files with 5 additions and 4 deletions

View file

@ -74,7 +74,7 @@ func (ns *Namespace) After(index interface{}, seq interface{}) (interface{}, err
} }
if indexv >= seqv.Len() { 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 return seqv.Slice(indexv, seqv.Len()).Interface(), nil

View file

@ -49,12 +49,13 @@ func TestAfter(t *testing.T) {
expect interface{} expect interface{}
}{ }{
{int(2), []string{"a", "b", "c", "d"}, []string{"c", "d"}}, {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}}, {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}}, {"1", []int{100, 200, 300}, []int{200, 300}},
{int64(-1), []int{100, 200, 300}, false}, {int64(-1), []int{100, 200, 300}, false},
{"noint", []int{100, 200, 300}, false}, {"noint", []int{100, 200, 300}, false},
{2, []string{}, []string{}},
{1, nil, false}, {1, nil, false},
{nil, []int{100}, false}, {nil, []int{100}, false},
{1, t, false}, {1, t, false},
@ -70,7 +71,7 @@ func TestAfter(t *testing.T) {
} }
require.NoError(t, err, errMsg) require.NoError(t, err, errMsg)
assert.Equal(t, test.expect, result, errMsg) require.Equal(t, test.expect, result, errMsg)
} }
} }