aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2023-04-03 22:44:18 -0700
committerRob Mensching <rob@firegiant.com>2023-04-04 10:03:45 -0700
commit6670c51b9b5a56ec893c5fa7a3d26dc6fcc2f2be (patch)
treea7445224c1c8275bda433baf228e1eab35c0771b
parentef800a635a79effeec25775163002e1c8da9bb98 (diff)
downloadwix-6670c51b9b5a56ec893c5fa7a3d26dc6fcc2f2be.tar.gz
wix-6670c51b9b5a56ec893c5fa7a3d26dc6fcc2f2be.tar.bz2
wix-6670c51b9b5a56ec893c5fa7a3d26dc6fcc2f2be.zip
Convert RelatedBundle Action to lowercase
Fixes 7356
-rw-r--r--src/wix/WixToolset.Converters/WixConverter.cs20
-rw-r--r--src/wix/test/WixToolsetTest.Converters/RelatedBundleFixture.cs61
2 files changed, 81 insertions, 0 deletions
diff --git a/src/wix/WixToolset.Converters/WixConverter.cs b/src/wix/WixToolset.Converters/WixConverter.cs
index 2f00d15d..3b8966cb 100644
--- a/src/wix/WixToolset.Converters/WixConverter.cs
+++ b/src/wix/WixToolset.Converters/WixConverter.cs
@@ -115,6 +115,7 @@ namespace WixToolset.Converters
115 private static readonly XName RequiresElementName = WixNamespace + "Requires"; 115 private static readonly XName RequiresElementName = WixNamespace + "Requires";
116 private static readonly XName RequiresRefElementName = WixNamespace + "RequiresRef"; 116 private static readonly XName RequiresRefElementName = WixNamespace + "RequiresRef";
117 private static readonly XName MultiStringValueElementName = WixNamespace + "MultiStringValue"; 117 private static readonly XName MultiStringValueElementName = WixNamespace + "MultiStringValue";
118 private static readonly XName RelatedBundleElementName = WixNamespace + "RelatedBundle";
118 private static readonly XName RemotePayloadElementName = WixNamespace + "RemotePayload"; 119 private static readonly XName RemotePayloadElementName = WixNamespace + "RemotePayload";
119 private static readonly XName RegistryKeyElementName = WixNamespace + "RegistryKey"; 120 private static readonly XName RegistryKeyElementName = WixNamespace + "RegistryKey";
120 private static readonly XName RegistrySearchElementName = WixNamespace + "RegistrySearch"; 121 private static readonly XName RegistrySearchElementName = WixNamespace + "RegistrySearch";
@@ -313,6 +314,7 @@ namespace WixToolset.Converters
313 { WixConverter.MultiStringValueElementName, this.ConvertMultiStringValueElement }, 314 { WixConverter.MultiStringValueElementName, this.ConvertMultiStringValueElement },
314 { WixConverter.RegistryKeyElementName, this.ConvertRegistryKeyElement }, 315 { WixConverter.RegistryKeyElementName, this.ConvertRegistryKeyElement },
315 { WixConverter.RegistrySearchElementName, this.ConvertRegistrySearchElement }, 316 { WixConverter.RegistrySearchElementName, this.ConvertRegistrySearchElement },
317 { WixConverter.RelatedBundleElementName, this.ConvertRelatedBundleElement },
316 { WixConverter.RemotePayloadElementName, this.ConvertRemotePayloadElement }, 318 { WixConverter.RemotePayloadElementName, this.ConvertRemotePayloadElement },
317 { WixConverter.RequiredPrivilegeElementName, this.ConvertRequiredPrivilegeElement }, 319 { WixConverter.RequiredPrivilegeElementName, this.ConvertRequiredPrivilegeElement },
318 { WixConverter.CustomActionRefElementName, this.ConvertCustomActionRefElement }, 320 { WixConverter.CustomActionRefElementName, this.ConvertCustomActionRefElement },
@@ -1713,6 +1715,19 @@ namespace WixToolset.Converters
1713 } 1715 }
1714 } 1716 }
1715 1717
1718 private void ConvertRelatedBundleElement(XElement element)
1719 {
1720 var xAction = element.Attribute("Action");
1721 var value = xAction?.Value;
1722 var lowercaseValue = value?.ToLowerInvariant();
1723
1724 if (value != lowercaseValue
1725 && this.OnInformation(ConverterTestType.RelatedBundleActionLowercase, element, "The RelatedBundle element's Action attribute value must now be all lowercase. The Action='{0}' will be converted to '{1}'", value, lowercaseValue))
1726 {
1727 xAction.Value = lowercaseValue;
1728 }
1729 }
1730
1716 private void ConvertRemotePayloadElement(XElement element) 1731 private void ConvertRemotePayloadElement(XElement element)
1717 { 1732 {
1718 var xParent = element.Parent; 1733 var xParent = element.Parent;
@@ -3303,6 +3318,11 @@ namespace WixToolset.Converters
3303 /// The Certificate BinaryKey element has been renamed to BinaryRef. 3318 /// The Certificate BinaryKey element has been renamed to BinaryRef.
3304 /// </summary> 3319 /// </summary>
3305 CertificateBinaryKeyIsNowBinaryRef, 3320 CertificateBinaryKeyIsNowBinaryRef,
3321
3322 /// <summary>
3323 /// The RelatedBundle element's Action attribute value must now be all lowercase. The Action='{0}' will be converted to '{1}'
3324 /// </summary>
3325 RelatedBundleActionLowercase,
3306 } 3326 }
3307 } 3327 }
3308} 3328}
diff --git a/src/wix/test/WixToolsetTest.Converters/RelatedBundleFixture.cs b/src/wix/test/WixToolsetTest.Converters/RelatedBundleFixture.cs
new file mode 100644
index 00000000..ea0be80b
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.Converters/RelatedBundleFixture.cs
@@ -0,0 +1,61 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.Converters
4{
5 using System;
6 using System.Linq;
7 using System.Xml.Linq;
8 using WixInternal.TestSupport;
9 using WixToolset.Converters;
10 using WixToolsetTest.Converters.Mocks;
11 using Xunit;
12
13 public class RelatedBundleFixture : BaseConverterFixture
14 {
15 [Fact]
16 public void CanConvertActionToLowercase()
17 {
18 var parse = String.Join(Environment.NewLine,
19 "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>",
20 " <Fragment>",
21 " <RelatedBundle Id='D' Action='Detect' />",
22 " <RelatedBundle Id='U' Action='Upgrade' />",
23 " <RelatedBundle Id='A' Action='Addon' />",
24 " <RelatedBundle Id='P' Action='Patch' />",
25 " </Fragment>",
26 "</Wix>");
27
28 var expected = new[]
29 {
30 "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">",
31 " <Fragment>",
32 " <RelatedBundle Id=\"D\" Action=\"detect\" />",
33 " <RelatedBundle Id=\"U\" Action=\"upgrade\" />",
34 " <RelatedBundle Id=\"A\" Action=\"addon\" />",
35 " <RelatedBundle Id=\"P\" Action=\"patch\" />",
36 " </Fragment>",
37 "</Wix>"
38 };
39
40 var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo);
41
42 var messaging = new MockMessaging();
43 var converter = new WixConverter(messaging, 2, null, null);
44
45 var errors = converter.ConvertDocument(document);
46
47 var actualLines = UnformattedDocumentLines(document);
48 WixAssert.CompareLineByLine(expected, actualLines);
49
50 WixAssert.CompareLineByLine(new[]
51 {
52 "[Converted] The RelatedBundle element's Action attribute value must now be all lowercase. The Action='Detect' will be converted to 'detect' (RelatedBundleActionLowercase)",
53 "[Converted] The RelatedBundle element's Action attribute value must now be all lowercase. The Action='Upgrade' will be converted to 'upgrade' (RelatedBundleActionLowercase)",
54 "[Converted] The RelatedBundle element's Action attribute value must now be all lowercase. The Action='Addon' will be converted to 'addon' (RelatedBundleActionLowercase)",
55 "[Converted] The RelatedBundle element's Action attribute value must now be all lowercase. The Action='Patch' will be converted to 'patch' (RelatedBundleActionLowercase)",
56 }, messaging.Messages.Select(m => m.ToString()).ToArray());
57
58 Assert.Equal(4, errors);
59 }
60 }
61}