@joebigelow / wix / commits / 48aea401

Handle multiple Condition conversions

Rob Mensching committed Jun 27, 2020 at 23:53 UTC 48aea40184697a5394875e07aac2293da10875bb
2 files changed +27 -9
src/WixToolset.Converters/WixConverter.cs
+18 -6
@@ -416,8 +416,9 @@ namespace WixToolset.Converters
416
417 private void ConvertControlElement(XElement element)
418 {
419 - var xCondition = element.Element(ConditionElementName);
420 - if (xCondition != null)
419 + var remove = new List<XElement>();
420 +
421 + foreach (var xCondition in element.Elements(ConditionElementName))
422 {
423 var action = UppercaseFirstChar(xCondition.Attribute("Action")?.Value);
424 if (!String.IsNullOrEmpty(action) &&
@@ -425,9 +426,14 @@ namespace WixToolset.Converters
426 this.OnError(ConverterTestType.InnerTextDeprecated, element, "Using {0} element text is deprecated. Use the '{1}Condition' attribute instead.", xCondition.Name.LocalName, action))
427 {
428 element.Add(new XAttribute(action + "Condition", text));
428 - xCondition.Remove();
429 + remove.Add(xCondition);
430 }
431 }
432 +
433 + for (var i = remove.Count - 1; i >= 0; i--)
434 + {
435 + remove[i].Remove();
436 + }
437 }
438
439 private void ConvertComponentElement(XElement element)
@@ -517,8 +523,9 @@ namespace WixToolset.Converters
523
524 private void ConvertFragmentElement(XElement element)
525 {
520 - var xCondition = element.Element(ConditionElementName);
521 - if (xCondition != null)
526 + var remove = new List<XElement>();
527 +
528 + foreach (var xCondition in element.Elements(ConditionElementName))
529 {
530 var message = xCondition.Attribute("Message")?.Value;
531
@@ -530,9 +537,14 @@ namespace WixToolset.Converters
537 new XAttribute("Condition", text),
538 new XAttribute("Message", message)
539 ));
533 - xCondition.Remove();
540 + remove.Add(xCondition);
541 }
542 }
543 +
544 + for (var i = remove.Count - 1; i >= 0; i--)
545 + {
546 + remove[i].Remove();
547 + }
548 }
549
550 private void ConvertEmbeddedChainerElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Condition");
src/test/WixToolsetTest.Converters/ConditionFixture.cs
+9 -3
@@ -20,6 +20,7 @@ namespace WixToolsetTest.Converters
20 " <UI>",
21 " <Dialog Id='Dlg1'>",
22 " <Control Id='Control1'>",
23 + " <Condition Action='disable'>x=y</Condition>",
24 " <Condition Action='hide'>a&lt;>b</Condition>",
25 " </Control>",
26 " </Dialog>",
@@ -33,7 +34,8 @@ namespace WixToolsetTest.Converters
34 " <Fragment>",
35 " <UI>",
36 " <Dialog Id=\"Dlg1\">",
36 - " <Control Id=\"Control1\" HideCondition=\"a&lt;&gt;b\">",
37 + " <Control Id=\"Control1\" DisableCondition=\"x=y\" HideCondition=\"a&lt;&gt;b\">",
38 + " ",
39 " ",
40 " </Control>",
41 " </Dialog>",
@@ -48,7 +50,7 @@ namespace WixToolsetTest.Converters
50 var converter = new WixConverter(messaging, 2, null, null);
51
52 var errors = converter.ConvertDocument(document);
51 - Assert.Equal(3, errors);
53 + Assert.Equal(4, errors);
54
55 var actualLines = UnformattedDocumentLines(document);
56 CompareLineByLine(expected, actualLines);
@@ -136,6 +138,9 @@ namespace WixToolsetTest.Converters
138 " <Condition Message='Stop the install'>",
139 " 1&lt;2",
140 " </Condition>",
141 + " <Condition Message='Do not stop'>",
142 + " 1=2",
143 + " </Condition>",
144 " </Fragment>",
145 "</Wix>");
146
@@ -144,6 +149,7 @@ namespace WixToolsetTest.Converters
149 "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">",
150 " <Fragment>",
151 " <Launch Condition=\"1&lt;2\" Message=\"Stop the install\" />",
152 + " <Launch Condition=\"1=2\" Message=\"Do not stop\" />",
153 " </Fragment>",
154 "</Wix>"
155 };
@@ -154,7 +160,7 @@ namespace WixToolsetTest.Converters
160 var converter = new WixConverter(messaging, 2, null, null);
161
162 var errors = converter.ConvertDocument(document);
157 - Assert.Equal(3, errors);
163 + Assert.Equal(4, errors);
164
165 var actualLines = UnformattedDocumentLines(document);
166 CompareLineByLine(expected, actualLines);