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()) 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) { t.Run("slice on array", func(t *testing.T) {
sel, err := Parse(`.[1:3]`) sel, err := Parse(`.[1:3]`)
require.NoError(t, err) 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)) cur, _ = cur.LookupByIndex(int64(idx))
case datamodel.Kind_String: // TODO: not supported yet
str, _ := cur.AsString() //case datamodel.Kind_String:
runes := []rune(str) // str, _ := cur.AsString()
if idx < 0 { // runes := []rune(str)
idx = len(runes) + idx // 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) // if idx < 0 || idx >= len(runes) {
return nil, errIfNotOptional(seg, err) // err := newResolutionError(fmt.Sprintf("index out of bounds: %d", seg.Index()), at)
} // return nil, errIfNotOptional(seg, err)
cur = basicnode.NewString(string(runes[idx])) // }
// cur = basicnode.NewString(string(runes[idx]))
case datamodel.Kind_Bytes: case datamodel.Kind_Bytes:
b, _ := cur.AsBytes() b, _ := cur.AsBytes()

View File

@@ -187,20 +187,6 @@ func TestSelect(t *testing.T) {
require.Equal(t, "el", str) // assert sliced substring 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) { t.Run("out of bounds slicing", func(t *testing.T) {
node, err := qp.BuildList(basicnode.Prototype.Any, 3, func(la datamodel.ListAssembler) { node, err := qp.BuildList(basicnode.Prototype.Any, 3, func(la datamodel.ListAssembler) {
qp.ListEntry(la, qp.Int(1)) qp.ListEntry(la, qp.Int(1))