2021-11-16 04:29:16 +00:00
|
|
|
package yqlib
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
var loadScenarios = []expressionScenario{
|
2022-10-25 02:30:38 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
2022-10-28 03:16:46 +00:00
|
|
|
description: "Load empty file with a comment",
|
2022-10-25 02:30:38 +00:00
|
|
|
expression: `load("../../examples/empty.yaml")`,
|
2022-10-28 03:16:46 +00:00
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!null)::# comment\n",
|
2022-10-28 03:16:46 +00:00
|
|
|
},
|
|
|
|
},
|
2022-11-25 01:05:56 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
description: "Load file with a header comment into an array",
|
|
|
|
document: `- "../../examples/small.yaml"`,
|
|
|
|
expression: `.[] |= load(.)`,
|
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!seq)::- # comment\n # about things\n a: cat\n",
|
2022-11-25 01:05:56 +00:00
|
|
|
},
|
|
|
|
},
|
2022-10-28 03:16:46 +00:00
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
description: "Load empty file with no comment",
|
|
|
|
expression: `load("../../examples/empty-no-comment.yaml")`,
|
2022-10-25 02:30:38 +00:00
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!null)::\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
skipDoc: true,
|
|
|
|
description: "Load multiple documents",
|
|
|
|
expression: `load("../../examples/multiple_docs_small.yaml")`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], ()::- a: Easy! as one two three\n- another:\n document: here\n- - 1\n - 2\n",
|
|
|
|
},
|
|
|
|
},
|
2021-11-16 04:29:16 +00:00
|
|
|
{
|
|
|
|
description: "Simple example",
|
|
|
|
document: `{myFile: "../../examples/thing.yml"}`,
|
|
|
|
expression: `load(.myFile)`,
|
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::a: apple is included\nb: cool.\n",
|
2021-11-16 04:29:16 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Replace node with referenced file",
|
|
|
|
subdescription: "Note that you can modify the filename in the load operator if needed.",
|
|
|
|
document: `{something: {file: "thing.yml"}}`,
|
|
|
|
expression: `.something |= load("../../examples/" + .file)`,
|
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::{something: {a: apple is included, b: cool.}}\n",
|
2021-11-16 04:29:16 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Replace _all_ nodes with referenced file",
|
|
|
|
subdescription: "Recursively match all the nodes (`..`) and then filter the ones that have a 'file' attribute. ",
|
|
|
|
document: `{something: {file: "thing.yml"}, over: {here: [{file: "thing.yml"}]}}`,
|
|
|
|
expression: `(.. | select(has("file"))) |= load("../../examples/" + .file)`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!map)::{something: {a: apple is included, b: cool.}, over: {here: [{a: apple is included, b: cool.}]}}\n",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Replace node with referenced file as string",
|
|
|
|
subdescription: "This will work for any text based file",
|
|
|
|
document: `{something: {file: "thing.yml"}}`,
|
2022-02-15 03:51:22 +00:00
|
|
|
expression: `.something |= load_str("../../examples/" + .file)`,
|
2021-11-16 04:29:16 +00:00
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::{something: \"a: apple is included\\nb: cool.\"}\n",
|
2021-11-16 04:29:16 +00:00
|
|
|
},
|
|
|
|
},
|
2022-02-15 03:51:22 +00:00
|
|
|
{
|
2023-03-01 02:19:06 +00:00
|
|
|
requiresFormat: "xml",
|
|
|
|
description: "Load from XML",
|
|
|
|
document: "cool: things",
|
|
|
|
expression: `.more_stuff = load_xml("../../examples/small.xml")`,
|
2022-02-15 03:51:22 +00:00
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::cool: things\nmore_stuff:\n this: is some xml\n",
|
2022-02-15 03:51:22 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Load from Properties",
|
|
|
|
document: "cool: things",
|
|
|
|
expression: `.more_stuff = load_props("../../examples/small.properties")`,
|
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::cool: things\nmore_stuff:\n this:\n is: a properties file\n",
|
2022-02-15 03:51:22 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
description: "Merge from properties",
|
|
|
|
subdescription: "This can be used as a convenient way to update a yaml document",
|
|
|
|
document: "this:\n is: from yaml\n cool: ay\n",
|
|
|
|
expression: `. *= load_props("../../examples/small.properties")`,
|
|
|
|
expected: []string{
|
|
|
|
"D0, P[], (!!map)::this:\n is: a properties file\n cool: ay\n",
|
|
|
|
},
|
|
|
|
},
|
2022-02-22 22:36:03 +00:00
|
|
|
{
|
|
|
|
description: "Load from base64 encoded file",
|
|
|
|
document: "cool: things",
|
|
|
|
expression: `.more_stuff = load_base64("../../examples/base64.txt")`,
|
|
|
|
expected: []string{
|
2023-10-18 01:11:53 +00:00
|
|
|
"D0, P[], (!!map)::cool: things\nmore_stuff: my secret chilli recipe is....\n",
|
2022-02-22 22:36:03 +00:00
|
|
|
},
|
|
|
|
},
|
2021-11-16 04:29:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestLoadScenarios(t *testing.T) {
|
|
|
|
for _, tt := range loadScenarios {
|
|
|
|
testScenario(t, &tt)
|
|
|
|
}
|
2021-12-21 04:02:07 +00:00
|
|
|
documentOperatorScenarios(t, "load", loadScenarios)
|
2021-11-16 04:29:16 +00:00
|
|
|
}
|