disable support for string indexing
This commit is contained in:
@@ -515,36 +515,6 @@ func TestParse(t *testing.T) {
|
||||
require.Empty(t, sel[3].Index())
|
||||
})
|
||||
|
||||
t.Run("index on string", func(t *testing.T) {
|
||||
sel, err := Parse(`.["foo"].[1]`)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 4, len(sel))
|
||||
require.True(t, sel[0].Identity())
|
||||
require.False(t, sel[0].Optional())
|
||||
require.False(t, sel[0].Iterator())
|
||||
require.Empty(t, sel[0].Slice())
|
||||
require.Empty(t, sel[0].Field())
|
||||
require.Empty(t, sel[0].Index())
|
||||
require.False(t, sel[1].Identity())
|
||||
require.False(t, sel[1].Optional())
|
||||
require.False(t, sel[1].Iterator())
|
||||
require.Empty(t, sel[1].Slice())
|
||||
require.Equal(t, sel[1].Field(), "foo")
|
||||
require.Empty(t, sel[1].Index())
|
||||
require.True(t, sel[2].Identity())
|
||||
require.False(t, sel[2].Optional())
|
||||
require.False(t, sel[2].Iterator())
|
||||
require.Empty(t, sel[2].Slice())
|
||||
require.Empty(t, sel[2].Field())
|
||||
require.Empty(t, sel[2].Index())
|
||||
require.False(t, sel[3].Identity())
|
||||
require.False(t, sel[3].Optional())
|
||||
require.False(t, sel[3].Iterator())
|
||||
require.Empty(t, sel[3].Slice())
|
||||
require.Empty(t, sel[3].Field())
|
||||
require.Equal(t, sel[3].Index(), 1)
|
||||
})
|
||||
|
||||
t.Run("slice on array", func(t *testing.T) {
|
||||
sel, err := Parse(`.[1:3]`)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -229,17 +229,18 @@ func resolve(sel Selector, subject ipld.Node, at []string) (ipld.Node, error) {
|
||||
}
|
||||
cur, _ = cur.LookupByIndex(int64(idx))
|
||||
|
||||
case datamodel.Kind_String:
|
||||
str, _ := cur.AsString()
|
||||
runes := []rune(str)
|
||||
if idx < 0 {
|
||||
idx = len(runes) + idx
|
||||
}
|
||||
if idx < 0 || idx >= len(runes) {
|
||||
err := newResolutionError(fmt.Sprintf("index out of bounds: %d", seg.Index()), at)
|
||||
return nil, errIfNotOptional(seg, err)
|
||||
}
|
||||
cur = basicnode.NewString(string(runes[idx]))
|
||||
// TODO: not supported yet
|
||||
//case datamodel.Kind_String:
|
||||
// str, _ := cur.AsString()
|
||||
// runes := []rune(str)
|
||||
// if idx < 0 {
|
||||
// idx = len(runes) + idx
|
||||
// }
|
||||
// if idx < 0 || idx >= len(runes) {
|
||||
// err := newResolutionError(fmt.Sprintf("index out of bounds: %d", seg.Index()), at)
|
||||
// return nil, errIfNotOptional(seg, err)
|
||||
// }
|
||||
// cur = basicnode.NewString(string(runes[idx]))
|
||||
|
||||
case datamodel.Kind_Bytes:
|
||||
b, _ := cur.AsBytes()
|
||||
|
||||
@@ -187,20 +187,6 @@ func TestSelect(t *testing.T) {
|
||||
require.Equal(t, "el", str) // assert sliced substring
|
||||
})
|
||||
|
||||
t.Run("index on string", func(t *testing.T) {
|
||||
sel, err := Parse(`.[2]`)
|
||||
require.NoError(t, err)
|
||||
|
||||
node := basicnode.NewString("hello")
|
||||
res, err := sel.Select(node)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, res)
|
||||
|
||||
str, err := res.AsString()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "l", str) // assert indexed character
|
||||
})
|
||||
|
||||
t.Run("out of bounds slicing", func(t *testing.T) {
|
||||
node, err := qp.BuildList(basicnode.Prototype.Any, 3, func(la datamodel.ListAssembler) {
|
||||
qp.ListEntry(la, qp.Int(1))
|
||||
|
||||
Reference in New Issue
Block a user