disable support for string indexing

This commit is contained in:
Fabio Bozzo
2024-10-23 18:25:16 +02:00
parent 2fafbe7bf3
commit 866683347f
3 changed files with 12 additions and 55 deletions

View File

@@ -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)

View File

@@ -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()

View File

@@ -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))