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<>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<>b\">",
37
+ " <Control Id=\"Control1\" DisableCondition=\"x=y\" HideCondition=\"a<>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<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<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);