diff --git a/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs b/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs index daa6f0affd..b831bab042 100644 --- a/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs +++ b/OpenRA.Test/OpenRA.Game/MiniYamlTest.cs @@ -21,17 +21,22 @@ namespace OpenRA.Test [TestFixture] public class MiniYamlTest { - readonly string yamlForParent = @" -^Parent: - FromParent: - FromParentRemove: + readonly string mixedMergeA = @" +Merge: + FromA: + FromARemovedB: + FromARemovedA: + -FromBRemovedA: + -FromARemovedA: "; - readonly string yamlForChild = @" -Child: - Inherits: ^Parent - FromChild: - -FromParentRemove: + readonly string mixedMergeB = @" +Merge: + FromB: + FromBRemovedA: + FromBRemovedB: + -FromARemovedB: + -FromBRemovedB: "; readonly string yamlTabStyle = @" @@ -60,58 +65,28 @@ Root2: Attribute1: Test "; - List parentList; - List childList; - MiniYaml parent; - MiniYaml child; - - [SetUp] - public void SetUp() - { - parentList = MiniYaml.FromString(yamlForParent); - childList = MiniYaml.FromString(yamlForChild); - parent = parentList.First().Value; - child = childList.First().Value; - } - - void InheritanceTest(List nodes) - { - Assert.That(nodes.Any(n => n.Key == "FromParent"), Is.True, "Node from parent"); - Assert.That(nodes.Any(n => n.Key == "FromChild"), Is.True, "Node from child"); - Assert.That(nodes.Any(n => n.Key == "FromParentRemove"), Is.Not.True, "Node from parent - node from child"); - } - - [TestCase(TestName = "MergeStrict(MiniYaml, MiniYaml)")] + [TestCase(TestName = "Merging: mixed addition and removal")] public void MergeYamlA() { - var res = MiniYaml.MergeStrict(parent, child); - InheritanceTest(res.Nodes); + var a = MiniYaml.FromString(mixedMergeA, "mixedMergeA"); + var b = MiniYaml.FromString(mixedMergeB, "mixedMergeB"); + + // Merge order should not matter + // Note: All the Merge* variants are different plumbing over the same + // internal logic. Testing only MergeStrict is sufficent. + TestMixedMerge(MiniYaml.MergeStrict(a, b).First().Value); + TestMixedMerge(MiniYaml.MergeStrict(b, a).First().Value); } - [Ignore("Disabled until the code is fixed so we don't break continuous integration.")] - [TestCase(TestName = "MergeLiberal(MiniYaml, MiniYaml)")] - public void MergeYamlB() + void TestMixedMerge(MiniYaml result) { - var res = MiniYaml.MergeLiberal(parent, child); - InheritanceTest(res.Nodes); - } - - [Ignore("Disabled until the code is fixed so we don't break continuous integration.")] - [TestCase(TestName = "MergeStrict(List, List)")] - public void MergeYamlC() - { - var res = MiniYaml.MergeStrict(parentList, childList).Last(); - Assert.That(res.Key, Is.EqualTo("Child")); - InheritanceTest(res.Value.Nodes); - } - - [Ignore("Disabled until the code is fixed so we don't break continuous integration.")] - [TestCase(TestName = "MergeLiberal(List, List)")] - public void MergeYamlD() - { - var res = MiniYaml.MergeLiberal(parentList, childList).Last(); - Assert.That(res.Key, Is.EqualTo("Child")); - InheritanceTest(res.Value.Nodes); + Console.WriteLine(result.ToLines("result").JoinWith("\n")); + Assert.That(result.Nodes.Any(n => n.Key == "FromA"), Is.True, "Node from A"); + Assert.That(result.Nodes.Any(n => n.Key == "FromB"), Is.True, "Node from B"); + Assert.That(result.Nodes.Any(n => n.Key == "FromARemovedA"), Is.Not.True, "Node from A removed by A"); + Assert.That(result.Nodes.Any(n => n.Key == "FromARemovedB"), Is.Not.True, "Node from A removed by B"); + Assert.That(result.Nodes.Any(n => n.Key == "FromBRemovedA"), Is.Not.True, "Node from B removed by A"); + Assert.That(result.Nodes.Any(n => n.Key == "FromBRemovedB"), Is.Not.True, "Node from B removed by B"); } [TestCase(TestName = "Mixed tabs & spaces indents")]