diff --git a/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs b/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs index 22c63b4a44..812f5b2e55 100644 --- a/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs +++ b/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs @@ -169,5 +169,30 @@ TestB: var result = MiniYaml.FromString(yaml).First(n => n.Key == "TestB"); Assert.AreEqual(5, result.Location.Line); } + + [TestCase(TestName = "Duplicated nodes are correctly merged")] + public void TestSelfMerging() + { + var baseYaml = @" +Test: + Merge: original + Child: original + Original: +Test: + Merge: override + Child: override + Override: +"; + + var result = MiniYaml.Merge(new[] { baseYaml }.Select(s => MiniYaml.FromString(s, ""))); + Assert.That(result.Count(n => n.Key == "Test"), Is.EqualTo(1), "Result should have exactly one Test node."); + + var testNodes = result.First(n => n.Key == "Test").Value.Nodes; + Assert.That(testNodes.Select(n => n.Key), Is.EqualTo(new[] { "Merge", "Original", "Override" }), "Merged Test node has incorrect child nodes."); + + var mergeNode = testNodes.First(n => n.Key == "Merge").Value; + Assert.That(mergeNode.Value, Is.EqualTo("override"), "Merge node has incorrect value."); + Assert.That(mergeNode.Nodes[0].Value.Value, Is.EqualTo("override"), "Merge node Child value should be 'override', but is not"); + } } }