diff --git a/pkg/policy/selector/parsing_test.go b/pkg/policy/selector/parsing_test.go index e693b80..cbf7309 100644 --- a/pkg/policy/selector/parsing_test.go +++ b/pkg/policy/selector/parsing_test.go @@ -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) diff --git a/pkg/policy/selector/selector.go b/pkg/policy/selector/selector.go index 1d7de5d..84a86ab 100644 --- a/pkg/policy/selector/selector.go +++ b/pkg/policy/selector/selector.go @@ -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() diff --git a/pkg/policy/selector/selector_test.go b/pkg/policy/selector/selector_test.go index 758add9..961060b 100644 --- a/pkg/policy/selector/selector_test.go +++ b/pkg/policy/selector/selector_test.go @@ -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))