yq/pkg/yqlib/operator_parent_test.go

63 lines
1.6 KiB
Go

package yqlib
import (
"testing"
)
var parentOperatorScenarios = []expressionScenario{
{
description: "Simple example",
document: `a: {nested: cat}`,
expression: `.a.nested | parent`,
expected: []string{
"D0, P[a], (!!map)::{nested: cat}\n",
},
},
{
description: "Parent of nested matches",
document: `{a: {fruit: apple, name: bob}, b: {fruit: banana, name: sam}}`,
expression: `.. | select(. == "banana") | parent`,
expected: []string{
"D0, P[b], (!!map)::{fruit: banana, name: sam}\n",
},
},
{
description: "Get parent attribute",
document: `{a: {fruit: apple, name: bob}, b: {fruit: banana, name: sam}}`,
expression: `.. | select(. == "banana") | parent.name`,
expected: []string{
"D0, P[b name], (!!str)::sam\n",
},
},
{
description: "N-th parent",
subdescription: "You can optionally supply the number of levels to go up for the parent, the default being 1.",
document: "a:\n b:\n c: cat\n",
expression: `.a.b.c | parent(2)`,
expected: []string{
"D0, P[a], (!!map)::b:\n c: cat\n",
},
},
{
description: "N-th parent - another level",
document: "a:\n b:\n c: cat\n",
expression: `.a.b.c | parent(3)`,
expected: []string{
"D0, P[], (!!map)::a:\n b:\n c: cat\n",
},
},
{
description: "No parent",
document: `{}`,
expression: `parent`,
expected: []string{},
},
}
func TestParentOperatorScenarios(t *testing.T) {
for _, tt := range parentOperatorScenarios {
testScenario(t, &tt)
}
documentOperatorScenarios(t, "parent", parentOperatorScenarios)
}