yq/pkg/yqlib/operator_equals_test.go

198 lines
3.9 KiB
Go
Raw Normal View History

2020-11-03 23:48:43 +00:00
package yqlib
2020-10-17 11:10:47 +00:00
import (
"testing"
)
var equalsOperatorScenarios = []expressionScenario{
{
skipDoc: true,
expression: ".a == .b",
expected: []string{
"D0, P[a], (!!bool)::true\n",
},
},
{
expression: `(.k | length) == 0`,
skipDoc: true,
expected: []string{
"D0, P[k], (!!bool)::true\n",
},
},
2021-06-09 23:53:50 +00:00
{
skipDoc: true,
document: `a: cat`,
2021-06-09 23:53:50 +00:00
expression: ".a == .b",
expected: []string{
"D0, P[a], (!!bool)::false\n",
},
},
{
skipDoc: true,
document: `a: cat`,
2021-06-09 23:53:50 +00:00
expression: ".b == .a",
expected: []string{
"D0, P[b], (!!bool)::false\n",
2021-06-09 23:53:50 +00:00
},
},
{
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{
"D0, P[], (doc)::{}\n",
},
},
{
skipDoc: true,
document: "{}",
expression: ".a == .b",
expected: []string{
"D0, P[a], (!!bool)::true\n",
},
},
{
skipDoc: true,
document: "{}",
expression: "(.a != .b) as $x | .",
expected: []string{
"D0, P[], (doc)::{}\n",
},
},
{
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{
"D0, P[], (doc)::{a: {b: 10}}\n",
},
},
{
skipDoc: true,
document: "{a: {b: 10}}",
expression: "select(null == .c)",
expected: []string{
"D0, P[], (doc)::{a: {b: 10}}\n",
},
},
2021-02-04 22:49:40 +00:00
{
skipDoc: true,
document: "{a: { b: {things: \"\"}, f: [1], g: [] }}",
expression: ".. | select(. == \"\")",
expected: []string{
2021-11-13 23:18:02 +00:00
"D0, P[a b things], (!!str)::\n",
2021-02-04 22:49:40 +00:00
},
},
2020-10-21 01:54:58 +00:00
{
2020-11-13 09:58:01 +00:00
description: "Match string",
document: `[cat,goat,dog]`,
expression: `.[] | (. == "*at")`,
2020-10-21 01:54:58 +00:00
expected: []string{
"D0, P[0], (!!bool)::true\n",
"D0, P[1], (!!bool)::true\n",
"D0, P[2], (!!bool)::false\n",
},
2021-02-04 22:54:03 +00:00
},
{
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",
},
},
{
2020-11-13 09:58:01 +00:00
description: "Match number",
document: `[3, 4, 5]`,
expression: `.[] | (. == 4)`,
2020-10-21 01:54:58 +00:00
expected: []string{
"D0, P[0], (!!bool)::false\n",
"D0, P[1], (!!bool)::true\n",
"D0, P[2], (!!bool)::false\n",
},
2021-02-04 22:54:03 +00:00
},
{
2022-05-24 08:18:27 +00:00
description: "Don't match number",
2021-02-04 22:54:03 +00:00
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",
},
},
{
2020-11-13 09:58:01 +00:00
skipDoc: true,
2020-10-21 01:54:58 +00:00
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",
},
},
2020-10-17 11:10:47 +00:00
{
2020-11-13 09:58:01 +00:00
skipDoc: true,
2020-10-20 05:27:30 +00:00
document: ``,
expression: `null == null`,
2020-10-17 11:10:47 +00:00
expected: []string{
"D0, P[], (!!bool)::true\n",
},
},
2020-10-21 01:54:58 +00:00
{
2020-11-13 09:58:01 +00:00
description: "Match nulls",
document: ``,
expression: `null == ~`,
2020-10-21 01:54:58 +00:00
expected: []string{
"D0, P[], (!!bool)::true\n",
},
},
{
2022-05-24 08:18:27 +00:00
description: "Non existent key doesn't equal a value",
document: "a: frog",
expression: `select(.b != "thing")`,
expected: []string{
"D0, P[], (doc)::a: frog\n",
},
},
{
2021-11-25 09:24:51 +00:00
description: "Two non existent keys are equal",
document: "a: frog",
expression: `select(.b == .c)`,
expected: []string{
"D0, P[], (doc)::a: frog\n",
},
},
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
}