2020-11-03 23:48:43 +00:00
|
|
|
package yqlib
|
2020-10-17 11:10:47 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
var equalsOperatorScenarios = []expressionScenario{
|
2021-05-28 06:59:02 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
expression: ".a == .b",
|
|
|
|
expected: []string{
|
2022-11-13 00:58:21 +00:00
|
|
|
"D0, P[a], (!!bool)::true\n",
|
|
|
|
},
|
|
|
|
},
|
2023-05-05 04:13:18 +00:00
|
|
|
// {
|
|
|
|
// expression: `(.k | length) == 0`,
|
|
|
|
// skipDoc: true,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[k], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: `a: cat`,
|
|
|
|
// expression: ".a == .b",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[a], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: `a: cat`,
|
|
|
|
// expression: ".b == .a",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[b], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "cat",
|
|
|
|
// document2: "dog",
|
|
|
|
// expression: "select(fi==0) == select(fi==1)",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{}",
|
|
|
|
// expression: "(.a == .b) as $x | .",
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::{}\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{}",
|
|
|
|
// expression: ".a == .b",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[a], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{}",
|
|
|
|
// expression: "(.a != .b) as $x | .",
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::{}\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{}",
|
|
|
|
// expression: ".a != .b",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{a: {b: 10}}",
|
|
|
|
// expression: "select(.c != null)",
|
|
|
|
// expected: []string{},
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{a: {b: 10}}",
|
|
|
|
// expression: "select(.d == .c)",
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::{a: {b: 10}}\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{a: {b: 10}}",
|
|
|
|
// expression: "select(null == .c)",
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::{a: {b: 10}}\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: "{a: { b: {things: \"\"}, f: [1], g: [] }}",
|
|
|
|
// expression: ".. | select(. == \"\")",
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[a b things], (!!str)::\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Match string",
|
|
|
|
// document: `[cat,goat,dog]`,
|
|
|
|
// expression: `.[] | (. == "*at")`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[0], (!!bool)::true\n",
|
|
|
|
// "D0, P[1], (!!bool)::true\n",
|
|
|
|
// "D0, P[2], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Don't match string",
|
|
|
|
// document: `[cat,goat,dog]`,
|
|
|
|
// expression: `.[] | (. != "*at")`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[0], (!!bool)::false\n",
|
|
|
|
// "D0, P[1], (!!bool)::false\n",
|
|
|
|
// "D0, P[2], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Match number",
|
|
|
|
// document: `[3, 4, 5]`,
|
|
|
|
// expression: `.[] | (. == 4)`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[0], (!!bool)::false\n",
|
|
|
|
// "D0, P[1], (!!bool)::true\n",
|
|
|
|
// "D0, P[2], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Don't match number",
|
|
|
|
// document: `[3, 4, 5]`,
|
|
|
|
// expression: `.[] | (. != 4)`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[0], (!!bool)::true\n",
|
|
|
|
// "D0, P[1], (!!bool)::false\n",
|
|
|
|
// "D0, P[2], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: `a: { cat: {b: apple, c: whatever}, pat: {b: banana} }`,
|
|
|
|
// expression: `.a | (.[].b == "apple")`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[a cat b], (!!bool)::true\n",
|
|
|
|
// "D0, P[a pat b], (!!bool)::false\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// skipDoc: true,
|
|
|
|
// document: ``,
|
|
|
|
// expression: `null == null`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Match nulls",
|
|
|
|
// document: ``,
|
|
|
|
// expression: `null == ~`,
|
|
|
|
// expected: []string{
|
|
|
|
// "D0, P[], (!!bool)::true\n",
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Non existent key doesn't equal a value",
|
|
|
|
// document: "a: frog",
|
|
|
|
// expression: `select(.b != "thing")`,
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::a: frog\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// description: "Two non existent keys are equal",
|
|
|
|
// document: "a: frog",
|
|
|
|
// expression: `select(.b == .c)`,
|
|
|
|
// expected: []string{
|
2023-06-05 22:27:59 +00:00
|
|
|
// "D0, P[], (!!map)::a: frog\n",
|
2023-05-05 04:13:18 +00:00
|
|
|
// },
|
|
|
|
// },
|
2020-10-17 11:10:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestEqualOperatorScenarios(t *testing.T) {
|
|
|
|
for _, tt := range equalsOperatorScenarios {
|
|
|
|
testScenario(t, &tt)
|
|
|
|
}
|
2021-12-21 04:02:07 +00:00
|
|
|
documentOperatorScenarios(t, "equals", equalsOperatorScenarios)
|
2020-10-17 11:10:47 +00:00
|
|
|
}
|