#!/bin/bash setUp() { rm test*.yml 2>/dev/null || true rm test*.properties 2>/dev/null || true rm test*.csv 2>/dev/null || true rm test*.tsv 2>/dev/null || true rm test*.xml 2>/dev/null || true rm test*.tf 2>/dev/null || true rm test*.json5 2>/dev/null || true rm test*.kyaml 2>/dev/null || true } testInputProperties() { cat >test.properties <test.properties <test.csv <test.csv <test.csv <test.tsv <test.tsv <test.kyaml <<'EOL' # leading { a: 1, # a line # head b b: 2, c: [ # head d "d", # d line ], } EOL read -r -d '' expected <<'EOM' # leading a: 1 # a line # head b b: 2 c: # head d - d # d line EOM X=$(./yq e -p=kyaml -P test.kyaml) assertEquals "$expected" "$X" X=$(./yq ea -p=kyaml -P test.kyaml) assertEquals "$expected" "$X" } testInputJson5MultilineBlockComments() { cat >test.json5 <<'EOL' { /* multiline block comment */ first: 1, second/* inline block */: 2, third: /* before value */ 3, fourth: [1, /* between elements */ 2,], } EOL read -r -d '' expected <<'EOM' # multiline # block comment first: 1 second: 2 # inline block third: 3 # before value fourth: - 1 # between elements - 2 EOM X=$(./yq e -p=json5 test.json5) assertEquals "$expected" "$X" X=$(./yq ea -p=json5 test.json5) assertEquals "$expected" "$X" } testInputXml() { cat >test.yml <BiBi EOL read -r -d '' expected << EOM cat: +content: BiBi +@legs: "4" EOM X=$(./yq e -p=xml test.yml) assertEquals "$expected" "$X" X=$(./yq ea -p=xml test.yml) assertEquals "$expected" "$X" } testInputXmlNamespaces() { cat >test.xml < EOL read -r -d '' expected << EOM +p_xml: version="1.0" map: +@xmlns: some-namespace +@xmlns:xsi: some-instance +@xsi:schemaLocation: some-url EOM X=$(./yq e -p=xml test.xml) assertEquals "$expected" "$X" X=$(./yq ea -p=xml test.xml) assertEquals "$expected" "$X" } testInputXmlRoundtrip() { cat >test.yml < Meow EOL read -r -d '' expected << EOM Meow EOM X=$(./yq -p=xml -o=xml test.yml) assertEquals "$expected" "$X" X=$(./yq ea -p=xml -o=xml test.yml) assertEquals "$expected" "$X" } testInputXmlStrict() { cat >test.yml < ]> &writer;©right; EOL X=$(./yq -p=xml --xml-strict-mode test.yml -o=xml 2>&1) assertEquals 1 $? assertEquals "Error: bad file 'test.yml': XML syntax error on line 7: invalid character entity &writer;" "$X" X=$(./yq ea -p=xml --xml-strict-mode test.yml -o=xml 2>&1) assertEquals "Error: bad file 'test.yml': XML syntax error on line 7: invalid character entity &writer;" "$X" } testInputXmlGithubAction() { cat >test.yml <BiBi EOL read -r -d '' expected << EOM cat: +content: BiBi +@legs: "4" EOM X=$(cat /dev/null | ./yq e -p=xml test.yml) assertEquals "$expected" "$X" X=$(cat /dev/null | ./yq ea -p=xml test.yml) assertEquals "$expected" "$X" } testInputTerraform() { cat >test.tf <test.tf <