2022-10-29 07:15:21 +00:00
|
|
|
package yqlib
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
|
|
var sliceArrayScenarios = []expressionScenario{
|
|
|
|
{
|
|
|
|
description: "Slicing arrays",
|
|
|
|
document: `[cat, dog, frog, cow]`,
|
|
|
|
expression: `.[1:3]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- dog\n- frog\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Slicing arrays - without the first number",
|
|
|
|
subdescription: "Starts from the start of the array",
|
|
|
|
document: `[cat, dog, frog, cow]`,
|
|
|
|
expression: `.[:2]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- cat\n- dog\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Slicing arrays - without the second number",
|
|
|
|
subdescription: "Finishes at the end of the array",
|
|
|
|
document: `[cat, dog, frog, cow]`,
|
|
|
|
expression: `.[2:]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- frog\n- cow\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Slicing arrays - use negative numbers to count backwards from the end",
|
|
|
|
document: `[cat, dog, frog, cow]`,
|
|
|
|
expression: `.[1:-1]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- dog\n- frog\n",
|
|
|
|
},
|
|
|
|
},
|
2022-11-10 07:03:18 +00:00
|
|
|
{
|
|
|
|
description: "Inserting into the middle of an array",
|
|
|
|
subdescription: "using an expression to find the index",
|
|
|
|
document: `[cat, dog, frog, cow]`,
|
|
|
|
expression: `(.[] | select(. == "dog") | key + 1) as $pos | .[0:($pos)] + ["rabbit"] + .[$pos:]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- cat\n- dog\n- rabbit\n- frog\n- cow\n",
|
|
|
|
},
|
|
|
|
},
|
2022-10-29 07:15:21 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
document: `[[cat, dog, frog, cow], [apple, banana, grape, mango]]`,
|
|
|
|
expression: `.[] | .[1:3]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[0], (!!seq)::- dog\n- frog\n",
|
|
|
|
"D0, P[1], (!!seq)::- banana\n- grape\n",
|
|
|
|
},
|
|
|
|
},
|
2023-01-13 02:45:19 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
description: "second index beyond array clamps",
|
|
|
|
document: `[cat]`,
|
|
|
|
expression: `.[:3]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- cat\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
description: "first index beyond array returns nothing",
|
|
|
|
document: `[cat]`,
|
|
|
|
expression: `.[3:]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::[]\n",
|
|
|
|
},
|
|
|
|
},
|
2022-10-29 07:15:21 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
document: `[[cat, dog, frog, cow], [apple, banana, grape, mango]]`,
|
|
|
|
expression: `.[] | .[-2:-1]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[0], (!!seq)::- frog\n",
|
|
|
|
"D0, P[1], (!!seq)::- grape\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
document: `[cat1, cat2, cat3, cat4, cat5, cat6, cat7, cat8, cat9, cat10, cat11]`,
|
|
|
|
expression: `.[10:11]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- cat11\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
document: `[cat1, cat2, cat3, cat4, cat5, cat6, cat7, cat8, cat9, cat10, cat11]`,
|
|
|
|
expression: `.[-11:-10]`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!seq)::- cat1\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSliceOperatorScenarios(t *testing.T) {
|
|
|
|
for _, tt := range sliceArrayScenarios {
|
|
|
|
testScenario(t, &tt)
|
|
|
|
}
|
|
|
|
documentOperatorScenarios(t, "slice-array", sliceArrayScenarios)
|
|
|
|
}
|