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