package yqlib import ( "testing" ) var multiplyOperatorScenarios = []expressionScenario{ { skipDoc: true, document: `{a: {also: [1]}, b: {also: me}}`, expression: `. * {"a" : .b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: me}, b: {also: me}}\n", }, }, { skipDoc: true, document: `{a: {also: me}, b: {also: [1]}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: [1]}, b: {also: [1]}}\n", }, }, { description: "Merge objects together", document: `{a: {also: me}, b: {also: {g: wizz}}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: {g: wizz}}, b: {also: {g: wizz}}}\n", }, }, { skipDoc: true, document: `{a: {also: {g: wizz}}, b: {also: me}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: me}, b: {also: me}}\n", }, }, { skipDoc: true, document: `{a: {also: {g: wizz}}, b: {also: [1]}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: [1]}, b: {also: [1]}}\n", }, }, { skipDoc: true, document: `{a: {also: [1]}, b: {also: {g: wizz}}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {also: {g: wizz}}, b: {also: {g: wizz}}}\n", }, }, { skipDoc: true, document: `{a: {things: great}, b: {also: me}}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: {things: great, also: me}, b: {also: me}}\n", }, }, { description: "Merge keeps style of LHS", document: `a: {things: great} b: also: "me" `, expression: `. * {"a":.b}`, expected: []string{ `D0, P[], (!!map)::a: {things: great, also: "me"} b: also: "me" `, }, }, { description: "Merge arrays", document: `{a: [1,2,3], b: [3,4,5]}`, expression: `. * {"a":.b}`, expected: []string{ "D0, P[], (!!map)::{a: [3, 4, 5], b: [3, 4, 5]}\n", }, }, { description: "Merge to prefix an element", document: `{a: cat, b: dog}`, expression: `. * {"a": {"c": .a}}`, expected: []string{ "D0, P[], (!!map)::{a: {c: cat}, b: dog}\n", }, }, { description: "Merge with simple aliases", document: `{a: &cat {c: frog}, b: {f: *cat}, c: {g: thongs}}`, expression: `.c * .b`, expected: []string{ "D0, P[c], (!!map)::{g: thongs, f: *cat}\n", }, }, { description: "Merge does not copy anchor names", document: `{a: {c: &cat frog}, b: {f: *cat}, c: {g: thongs}}`, expression: `.c * .a`, expected: []string{ "D0, P[c], (!!map)::{g: thongs, c: frog}\n", }, }, { description: "Merge with merge anchors", document: mergeDocSample, expression: `.foobar * .foobarList`, expected: []string{ "D0, P[foobar], (!!map)::c: foobarList_c\n<<: [*foo, *bar]\nthing: foobar_thing\nb: foobarList_b\n", }, }, } func TestMultiplyOperatorScenarios(t *testing.T) { for _, tt := range multiplyOperatorScenarios { testScenario(t, &tt) } documentScenarios(t, "Mulitply Operator", multiplyOperatorScenarios) }