From 48aea40184697a5394875e07aac2293da10875bb Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sat, 27 Jun 2020 23:53:04 -0700 Subject: Handle multiple Condition conversions --- src/WixToolset.Converters/WixConverter.cs | 24 ++++++++++++++++------ .../WixToolsetTest.Converters/ConditionFixture.cs | 12 ++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/WixToolset.Converters/WixConverter.cs b/src/WixToolset.Converters/WixConverter.cs index 7ac64710..86a1bfba 100644 --- a/src/WixToolset.Converters/WixConverter.cs +++ b/src/WixToolset.Converters/WixConverter.cs @@ -416,8 +416,9 @@ namespace WixToolset.Converters private void ConvertControlElement(XElement element) { - var xCondition = element.Element(ConditionElementName); - if (xCondition != null) + var remove = new List(); + + foreach (var xCondition in element.Elements(ConditionElementName)) { var action = UppercaseFirstChar(xCondition.Attribute("Action")?.Value); if (!String.IsNullOrEmpty(action) && @@ -425,9 +426,14 @@ namespace WixToolset.Converters this.OnError(ConverterTestType.InnerTextDeprecated, element, "Using {0} element text is deprecated. Use the '{1}Condition' attribute instead.", xCondition.Name.LocalName, action)) { element.Add(new XAttribute(action + "Condition", text)); - xCondition.Remove(); + remove.Add(xCondition); } } + + for (var i = remove.Count - 1; i >= 0; i--) + { + remove[i].Remove(); + } } private void ConvertComponentElement(XElement element) @@ -517,8 +523,9 @@ namespace WixToolset.Converters private void ConvertFragmentElement(XElement element) { - var xCondition = element.Element(ConditionElementName); - if (xCondition != null) + var remove = new List(); + + foreach (var xCondition in element.Elements(ConditionElementName)) { var message = xCondition.Attribute("Message")?.Value; @@ -530,9 +537,14 @@ namespace WixToolset.Converters new XAttribute("Condition", text), new XAttribute("Message", message) )); - xCondition.Remove(); + remove.Add(xCondition); } } + + for (var i = remove.Count - 1; i >= 0; i--) + { + remove[i].Remove(); + } } private void ConvertEmbeddedChainerElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Condition"); diff --git a/src/test/WixToolsetTest.Converters/ConditionFixture.cs b/src/test/WixToolsetTest.Converters/ConditionFixture.cs index 3fa7c031..1b8a7604 100644 --- a/src/test/WixToolsetTest.Converters/ConditionFixture.cs +++ b/src/test/WixToolsetTest.Converters/ConditionFixture.cs @@ -20,6 +20,7 @@ namespace WixToolsetTest.Converters " ", " ", " ", + " x=y", " a<>b", " ", " ", @@ -33,7 +34,8 @@ namespace WixToolsetTest.Converters " ", " ", " ", - " ", + " ", + " ", " ", " ", " ", @@ -48,7 +50,7 @@ namespace WixToolsetTest.Converters var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); - Assert.Equal(3, errors); + Assert.Equal(4, errors); var actualLines = UnformattedDocumentLines(document); CompareLineByLine(expected, actualLines); @@ -136,6 +138,9 @@ namespace WixToolsetTest.Converters " ", " 1<2", " ", + " ", + " 1=2", + " ", " ", ""); @@ -144,6 +149,7 @@ namespace WixToolsetTest.Converters "", " ", " ", + " ", " ", "" }; @@ -154,7 +160,7 @@ namespace WixToolsetTest.Converters var converter = new WixConverter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); - Assert.Equal(3, errors); + Assert.Equal(4, errors); var actualLines = UnformattedDocumentLines(document); CompareLineByLine(expected, actualLines); -- cgit v1.2.3-55-g6feb