diff --git a/pkg/yqlib/decoder_test.go b/pkg/yqlib/decoder_test.go index f7fddd81..462eb4d1 100644 --- a/pkg/yqlib/decoder_test.go +++ b/pkg/yqlib/decoder_test.go @@ -15,8 +15,6 @@ type formatScenario struct { subdescription string skipDoc bool scenarioType string - decoder Decoder - encoder Encoder } func processFormatScenario(s formatScenario, decoder Decoder, encoder Encoder) string { diff --git a/pkg/yqlib/doc/usage/properties.md b/pkg/yqlib/doc/usage/properties.md index f69d6892..97d05760 100644 --- a/pkg/yqlib/doc/usage/properties.md +++ b/pkg/yqlib/doc/usage/properties.md @@ -17,7 +17,7 @@ Given a sample.yml file of: ```yaml # block comments don't come through person: # neither do comments on maps - name: Mike Wazowski # comments on values appear + name: Mike # comments on values appear pets: - cat # comments on array values appear food: [pizza] # comments on arrays do not @@ -32,36 +32,7 @@ yq -o=props sample.yml will output ```properties # comments on values appear -person.name = Mike Wazowski - -# comments on array values appear -person.pets.0 = cat -person.food.0 = pizza -``` - -## Encode properties: scalar encapsulation -Note that string values with blank characters in them are encapsulated with double quotes - -Given a sample.yml file of: -```yaml -# block comments don't come through -person: # neither do comments on maps - name: Mike Wazowski # comments on values appear - pets: - - cat # comments on array values appear - food: [pizza] # comments on arrays do not -emptyArray: [] -emptyMap: [] - -``` -then -```bash -yq -o=props sample.yml -``` -will output -```properties -# comments on values appear -person.name = "Mike Wazowski" +person.name = Mike # comments on array values appear person.pets.0 = cat @@ -73,7 +44,7 @@ Given a sample.yml file of: ```yaml # block comments don't come through person: # neither do comments on maps - name: Mike Wazowski # comments on values appear + name: Mike # comments on values appear pets: - cat # comments on array values appear food: [pizza] # comments on arrays do not @@ -87,7 +58,7 @@ yq -o=props '... comments = ""' sample.yml ``` will output ```properties -person.name = Mike Wazowski +person.name = Mike person.pets.0 = cat person.food.0 = pizza ``` @@ -99,7 +70,7 @@ Given a sample.yml file of: ```yaml # block comments don't come through person: # neither do comments on maps - name: Mike Wazowski # comments on values appear + name: Mike # comments on values appear pets: - cat # comments on array values appear food: [pizza] # comments on arrays do not @@ -114,7 +85,7 @@ yq -o=props '(.. | select( (tag == "!!map" or tag =="!!seq") and length == 0)) = will output ```properties # comments on values appear -person.name = Mike Wazowski +person.name = Mike # comments on array values appear person.pets.0 = cat @@ -127,7 +98,7 @@ emptyMap = Given a sample.properties file of: ```properties # comments on values appear -person.name = Mike Wazowski +person.name = Mike # comments on array values appear person.pets.0 = cat @@ -141,18 +112,18 @@ yq -p=props sample.properties will output ```yaml person: - name: Mike Wazowski # comments on values appear - pets: - - cat # comments on array values appear - food: - - pizza + name: Mike # comments on values appear + pets: + - cat # comments on array values appear + food: + - pizza ``` ## Roundtrip Given a sample.properties file of: ```properties # comments on values appear -person.name = Mike Wazowski +person.name = Mike # comments on array values appear person.pets.0 = cat @@ -166,7 +137,7 @@ yq -p=props -o=props '.person.pets.0 = "dog"' sample.properties will output ```properties # comments on values appear -person.name = Mike Wazowski +person.name = Mike # comments on array values appear person.pets.0 = dog diff --git a/pkg/yqlib/properties_test.go b/pkg/yqlib/properties_test.go index fc8e367a..1694c1ee 100644 --- a/pkg/yqlib/properties_test.go +++ b/pkg/yqlib/properties_test.go @@ -8,9 +8,9 @@ import ( "github.com/mikefarah/yq/v4/test" ) -const samplePropertiesYaml = `# block comments don't come through +var samplePropertiesYaml = `# block comments don't come through person: # neither do comments on maps - name: Mike Wazowski # comments on values appear + name: Mike # comments on values appear pets: - cat # comments on array values appear food: [pizza] # comments on arrays do not @@ -18,45 +18,37 @@ emptyArray: [] emptyMap: [] ` -const expectedPropertiesUnwrapped = `# comments on values appear -person.name = Mike Wazowski +var expectedProperties = `# comments on values appear +person.name = Mike # comments on array values appear person.pets.0 = cat person.food.0 = pizza ` -const expectedPropertiesWrapped = `# comments on values appear -person.name = "Mike Wazowski" - -# comments on array values appear -person.pets.0 = cat -person.food.0 = pizza -` - -const expectedUpdatedProperties = `# comments on values appear -person.name = Mike Wazowski +var expectedUpdatedProperties = `# comments on values appear +person.name = Mike # comments on array values appear person.pets.0 = dog person.food.0 = pizza ` -const expectedDecodedYaml = `person: - name: Mike Wazowski # comments on values appear +var expectedDecodedYaml = `person: + name: Mike # comments on values appear pets: - cat # comments on array values appear food: - pizza ` -const expectedPropertiesNoComments = `person.name = Mike Wazowski +var expectedPropertiesNoComments = `person.name = Mike person.pets.0 = cat person.food.0 = pizza ` -const expectedPropertiesWithEmptyMapsAndArrays = `# comments on values appear -person.name = Mike Wazowski +var expectedPropertiesWithEmptyMapsAndArrays = `# comments on values appear +person.name = Mike # comments on array values appear person.pets.0 = cat @@ -70,25 +62,13 @@ var propertyScenarios = []formatScenario{ description: "Encode properties", subdescription: "Note that empty arrays and maps are not encoded by default.", input: samplePropertiesYaml, - expected: expectedPropertiesUnwrapped, - encoder: NewPropertiesEncoder(true), - decoder: NewYamlDecoder(), - }, - { - description: "Encode properties: scalar encapsulation", - subdescription: "Note that string values with blank characters in them are encapsulated with double quotes", - input: samplePropertiesYaml, - expected: expectedPropertiesWrapped, - decoder: NewYamlDecoder(), - encoder: NewPropertiesEncoder(false), + expected: expectedProperties, }, { description: "Encode properties: no comments", input: samplePropertiesYaml, expected: expectedPropertiesNoComments, expression: `... comments = ""`, - decoder: NewYamlDecoder(), - encoder: NewPropertiesEncoder(true), }, { description: "Encode properties: include empty maps and arrays", @@ -96,16 +76,12 @@ var propertyScenarios = []formatScenario{ expression: `(.. | select( (tag == "!!map" or tag =="!!seq") and length == 0)) = ""`, input: samplePropertiesYaml, expected: expectedPropertiesWithEmptyMapsAndArrays, - decoder: NewYamlDecoder(), - encoder: NewPropertiesEncoder(true), }, { description: "Decode properties", - input: expectedPropertiesUnwrapped, + input: expectedProperties, expected: expectedDecodedYaml, scenarioType: "decode", - decoder: NewPropertiesDecoder(), - encoder: NewYamlEncoder(2, false, true, true), }, { description: "does not expand automatically", @@ -113,17 +89,13 @@ var propertyScenarios = []formatScenario{ input: "mike = ${dontExpand} this", expected: "mike: ${dontExpand} this\n", scenarioType: "decode", - decoder: NewPropertiesDecoder(), - encoder: NewYamlEncoder(2, false, true, true), }, { description: "Roundtrip", - input: expectedPropertiesUnwrapped, + input: expectedProperties, expression: `.person.pets.0 = "dog"`, expected: expectedUpdatedProperties, scenarioType: "roundtrip", - decoder: NewPropertiesDecoder(), - encoder: NewPropertiesEncoder(true), }, { description: "Empty doc", @@ -131,8 +103,6 @@ var propertyScenarios = []formatScenario{ input: "", expected: "", scenarioType: "decode", - decoder: NewPropertiesDecoder(), - encoder: NewYamlEncoder(2, false, true, true), }, } @@ -158,7 +128,7 @@ func documentEncodePropertyScenario(w *bufio.Writer, s formatScenario) { } writeOrPanic(w, "will output\n") - writeOrPanic(w, fmt.Sprintf("```properties\n%v```\n\n", processFormatScenario(s, s.decoder, s.encoder))) + writeOrPanic(w, fmt.Sprintf("```properties\n%v```\n\n", processFormatScenario(s, NewYamlDecoder(), NewPropertiesEncoder(true)))) } func documentDecodePropertyScenario(w *bufio.Writer, s formatScenario) { @@ -183,7 +153,7 @@ func documentDecodePropertyScenario(w *bufio.Writer, s formatScenario) { writeOrPanic(w, "will output\n") - writeOrPanic(w, fmt.Sprintf("```yaml\n%v```\n\n", processFormatScenario(s, s.decoder, s.encoder))) + writeOrPanic(w, fmt.Sprintf("```yaml\n%v```\n\n", processFormatScenario(s, NewPropertiesDecoder(), NewYamlEncoder(s.indent, false, true, true)))) } func documentRoundTripPropertyScenario(w *bufio.Writer, s formatScenario) { @@ -208,7 +178,7 @@ func documentRoundTripPropertyScenario(w *bufio.Writer, s formatScenario) { writeOrPanic(w, "will output\n") - writeOrPanic(w, fmt.Sprintf("```properties\n%v```\n\n", processFormatScenario(s, s.decoder, s.encoder))) + writeOrPanic(w, fmt.Sprintf("```properties\n%v```\n\n", processFormatScenario(s, NewPropertiesDecoder(), NewPropertiesEncoder(true)))) } func documentPropertyScenario(t *testing.T, w *bufio.Writer, i interface{}) { @@ -229,11 +199,11 @@ func documentPropertyScenario(t *testing.T, w *bufio.Writer, i interface{}) { func TestPropertyScenarios(t *testing.T) { for _, s := range propertyScenarios { if s.scenarioType == "decode" { - test.AssertResultWithContext(t, s.expected, processFormatScenario(s, s.decoder, s.encoder), s.description) + test.AssertResultWithContext(t, s.expected, processFormatScenario(s, NewPropertiesDecoder(), NewYamlEncoder(2, false, true, true)), s.description) } else if s.scenarioType == "roundtrip" { - test.AssertResultWithContext(t, s.expected, processFormatScenario(s, s.decoder, s.encoder), s.description) + test.AssertResultWithContext(t, s.expected, processFormatScenario(s, NewPropertiesDecoder(), NewPropertiesEncoder(true)), s.description) } else { - test.AssertResultWithContext(t, s.expected, processFormatScenario(s, s.decoder, s.encoder), s.description) + test.AssertResultWithContext(t, s.expected, processFormatScenario(s, NewYamlDecoder(), NewPropertiesEncoder(true)), s.description) } } genericScenarios := make([]interface{}, len(propertyScenarios))