Fixing TOML subarray parsing issue #2581

This commit is contained in:
Mike Farah
2026-01-31 15:25:11 +11:00
parent 3d918acc2a
commit bdeedbd275
4 changed files with 134 additions and 41 deletions
+44 -26
View File
@@ -228,31 +228,42 @@ B = 12
name = "Tom" # name comment
`
// var sampleFromWeb = `
// # This is a TOML document
var sampleFromWeb = `# This is a TOML document
title = "TOML Example"
// title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00
// [owner]
// name = "Tom Preston-Werner"
// dob = 1979-05-27T07:32:00-08:00
[database]
enabled = true
ports = [8000, 8001, 8002]
data = [["delta", "phi"], [3.14]]
temp_targets = { cpu = 79.5, case = 72.0 }
// [database]
// enabled = true
// ports = [8000, 8001, 8002]
// data = [["delta", "phi"], [3.14]]
// temp_targets = { cpu = 79.5, case = 72.0 }
# [servers] yq can't do this one yet
[servers.alpha]
ip = "10.0.0.1"
role = "frontend"
// [servers]
[servers.beta]
ip = "10.0.0.2"
role = "backend"
`
// [servers.alpha]
// ip = "10.0.0.1"
// role = "frontend"
var subArrays = `
[[array]]
// [servers.beta]
// ip = "10.0.0.2"
// role = "backend"
// `
[[array.subarray]]
[[array.subarray.subsubarray]]
`
var expectedSubArrays = `array:
- subarray:
- subsubarray:
- {}
`
var tomlScenarios = []formatScenario{
{
@@ -461,6 +472,13 @@ var tomlScenarios = []formatScenario{
expected: expectedMultipleEmptyTables,
scenarioType: "decode",
},
{
description: "subArrays",
skipDoc: true,
input: subArrays,
expected: expectedSubArrays,
scenarioType: "decode",
},
// Roundtrip scenarios
{
description: "Roundtrip: inline table attribute",
@@ -532,13 +550,13 @@ var tomlScenarios = []formatScenario{
expected: rtComments,
scenarioType: "roundtrip",
},
// {
// description: "Roundtrip: sample from web",
// input: sampleFromWeb,
// expression: ".",
// expected: sampleFromWeb,
// scenarioType: "roundtrip",
// },
{
description: "Roundtrip: sample from web",
input: sampleFromWeb,
expression: ".",
expected: sampleFromWeb,
scenarioType: "roundtrip",
},
}
func testTomlScenario(t *testing.T, s formatScenario) {