diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/WixToolset.Converters/WixConverter.cs | 55 | ||||
-rw-r--r-- | src/test/WixToolsetTest.Converters/BitnessFixture.cs | 181 |
2 files changed, 235 insertions, 1 deletions
diff --git a/src/WixToolset.Converters/WixConverter.cs b/src/WixToolset.Converters/WixConverter.cs index 73daa9a2..18cd7115 100644 --- a/src/WixToolset.Converters/WixConverter.cs +++ b/src/WixToolset.Converters/WixConverter.cs | |||
@@ -43,6 +43,7 @@ namespace WixToolset.Converters | |||
43 | private static readonly XName BootstrapperApplicationElementName = WixNamespace + "BootstrapperApplication"; | 43 | private static readonly XName BootstrapperApplicationElementName = WixNamespace + "BootstrapperApplication"; |
44 | private static readonly XName BootstrapperApplicationDllElementName = WixNamespace + "BootstrapperApplicationDll"; | 44 | private static readonly XName BootstrapperApplicationDllElementName = WixNamespace + "BootstrapperApplicationDll"; |
45 | private static readonly XName BootstrapperApplicationRefElementName = WixNamespace + "BootstrapperApplicationRef"; | 45 | private static readonly XName BootstrapperApplicationRefElementName = WixNamespace + "BootstrapperApplicationRef"; |
46 | private static readonly XName ApprovedExeForElevationElementName = WixNamespace + "ApprovedExeForElevation"; | ||
46 | private static readonly XName EmbeddedChainerElementName = WixNamespace + "EmbeddedChainer"; | 47 | private static readonly XName EmbeddedChainerElementName = WixNamespace + "EmbeddedChainer"; |
47 | private static readonly XName CatalogElementName = WixNamespace + "Catalog"; | 48 | private static readonly XName CatalogElementName = WixNamespace + "Catalog"; |
48 | private static readonly XName ColumnElementName = WixNamespace + "Column"; | 49 | private static readonly XName ColumnElementName = WixNamespace + "Column"; |
@@ -73,6 +74,7 @@ namespace WixToolset.Converters | |||
73 | private static readonly XName PublishElementName = WixNamespace + "Publish"; | 74 | private static readonly XName PublishElementName = WixNamespace + "Publish"; |
74 | private static readonly XName MultiStringValueElementName = WixNamespace + "MultiStringValue"; | 75 | private static readonly XName MultiStringValueElementName = WixNamespace + "MultiStringValue"; |
75 | private static readonly XName RemotePayloadElementName = WixNamespace + "RemotePayload"; | 76 | private static readonly XName RemotePayloadElementName = WixNamespace + "RemotePayload"; |
77 | private static readonly XName RegistrySearchElementName = WixNamespace + "RegistrySearch"; | ||
76 | private static readonly XName RequiredPrivilegeElementName = WixNamespace + "RequiredPrivilege"; | 78 | private static readonly XName RequiredPrivilegeElementName = WixNamespace + "RequiredPrivilege"; |
77 | private static readonly XName ServiceArgumentElementName = WixNamespace + "ServiceArgument"; | 79 | private static readonly XName ServiceArgumentElementName = WixNamespace + "ServiceArgument"; |
78 | private static readonly XName SetDirectoryElementName = WixNamespace + "SetDirectory"; | 80 | private static readonly XName SetDirectoryElementName = WixNamespace + "SetDirectory"; |
@@ -151,6 +153,7 @@ namespace WixToolset.Converters | |||
151 | { WixConverter.InstallExecuteSequenceElementName, this.ConvertSequenceElement }, | 153 | { WixConverter.InstallExecuteSequenceElementName, this.ConvertSequenceElement }, |
152 | { WixConverter.BootstrapperApplicationElementName, this.ConvertBootstrapperApplicationElement }, | 154 | { WixConverter.BootstrapperApplicationElementName, this.ConvertBootstrapperApplicationElement }, |
153 | { WixConverter.BootstrapperApplicationRefElementName, this.ConvertBootstrapperApplicationRefElement }, | 155 | { WixConverter.BootstrapperApplicationRefElementName, this.ConvertBootstrapperApplicationRefElement }, |
156 | { WixConverter.ApprovedExeForElevationElementName, this.ConvertApprovedExeForElevationElement }, | ||
154 | { WixConverter.CatalogElementName, this.ConvertCatalogElement }, | 157 | { WixConverter.CatalogElementName, this.ConvertCatalogElement }, |
155 | { WixConverter.ColumnElementName, this.ConvertColumnElement }, | 158 | { WixConverter.ColumnElementName, this.ConvertColumnElement }, |
156 | { WixConverter.CustomTableElementName, this.ConvertCustomTableElement }, | 159 | { WixConverter.CustomTableElementName, this.ConvertCustomTableElement }, |
@@ -175,6 +178,7 @@ namespace WixToolset.Converters | |||
175 | { WixConverter.ProgressTextElementName, this.ConvertProgressTextElement }, | 178 | { WixConverter.ProgressTextElementName, this.ConvertProgressTextElement }, |
176 | { WixConverter.PublishElementName, this.ConvertPublishElement }, | 179 | { WixConverter.PublishElementName, this.ConvertPublishElement }, |
177 | { WixConverter.MultiStringValueElementName, this.ConvertMultiStringValueElement }, | 180 | { WixConverter.MultiStringValueElementName, this.ConvertMultiStringValueElement }, |
181 | { WixConverter.RegistrySearchElementName, this.ConvertRegistrySearchElement }, | ||
178 | { WixConverter.RemotePayloadElementName, this.ConvertRemotePayloadElement }, | 182 | { WixConverter.RemotePayloadElementName, this.ConvertRemotePayloadElement }, |
179 | { WixConverter.RequiredPrivilegeElementName, this.ConvertRequiredPrivilegeElement }, | 183 | { WixConverter.RequiredPrivilegeElementName, this.ConvertRequiredPrivilegeElement }, |
180 | { WixConverter.CustomActionElementName, this.ConvertCustomActionElement }, | 184 | { WixConverter.CustomActionElementName, this.ConvertCustomActionElement }, |
@@ -625,6 +629,20 @@ namespace WixToolset.Converters | |||
625 | } | 629 | } |
626 | } | 630 | } |
627 | 631 | ||
632 | private void ConvertApprovedExeForElevationElement(XElement element) | ||
633 | { | ||
634 | if (this.SourceVersion < 4) | ||
635 | { | ||
636 | var win64 = element.Attribute("Win64"); | ||
637 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
638 | { | ||
639 | var value = win64.Value; | ||
640 | element.Add(new XAttribute("Bitness", value == "yes" ? "always64" : "always32")); | ||
641 | win64.Remove(); | ||
642 | } | ||
643 | } | ||
644 | } | ||
645 | |||
628 | private void ConvertBalBootstrapperApplicationRef(XElement element, string theme, XName balBAElementName, XName oldBalBAElementName = null) | 646 | private void ConvertBalBootstrapperApplicationRef(XElement element, string theme, XName balBAElementName, XName oldBalBAElementName = null) |
629 | { | 647 | { |
630 | var xBalBa = element.Element(oldBalBAElementName ?? balBAElementName); | 648 | var xBalBa = element.Element(oldBalBAElementName ?? balBAElementName); |
@@ -733,6 +751,14 @@ namespace WixToolset.Converters | |||
733 | xCondition.Remove(); | 751 | xCondition.Remove(); |
734 | } | 752 | } |
735 | } | 753 | } |
754 | |||
755 | var win64 = element.Attribute("Win64"); | ||
756 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
757 | { | ||
758 | var value = win64.Value; | ||
759 | element.Add(new XAttribute("Bitness", value == "yes" ? "always64" : "always32")); | ||
760 | win64.Remove(); | ||
761 | } | ||
736 | } | 762 | } |
737 | 763 | ||
738 | private void ConvertDirectoryElement(XElement element) | 764 | private void ConvertDirectoryElement(XElement element) |
@@ -1071,6 +1097,20 @@ namespace WixToolset.Converters | |||
1071 | } | 1097 | } |
1072 | } | 1098 | } |
1073 | 1099 | ||
1100 | private void ConvertRegistrySearchElement(XElement element) | ||
1101 | { | ||
1102 | if (this.SourceVersion < 4) | ||
1103 | { | ||
1104 | var win64 = element.Attribute("Win64"); | ||
1105 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
1106 | { | ||
1107 | var value = win64.Value; | ||
1108 | element.Add(new XAttribute("Bitness", value == "yes" ? "always64" : "always32")); | ||
1109 | win64.Remove(); | ||
1110 | } | ||
1111 | } | ||
1112 | } | ||
1113 | |||
1074 | private void ConvertRequiredPrivilegeElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Name"); | 1114 | private void ConvertRequiredPrivilegeElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Name"); |
1075 | 1115 | ||
1076 | private void ConvertRowElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Value"); | 1116 | private void ConvertRowElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Value"); |
@@ -1241,7 +1281,7 @@ namespace WixToolset.Converters | |||
1241 | var inheritable = element.Parent.Name == CreateFolderElementName; | 1281 | var inheritable = element.Parent.Name == CreateFolderElementName; |
1242 | if (!inheritable) | 1282 | if (!inheritable) |
1243 | { | 1283 | { |
1244 | if (this.OnError(ConverterTestType.AssignPermissionExInheritable, element, "The PermissionEx Inheritable attribute is being set to 'no' to ensure it remains the same as the v3 default")) | 1284 | if (this.OnError(ConverterTestType.AssignPermissionExInheritable, element, "The PermissionEx Inheritable attribute is being set to 'no' to ensure it remains the same as the v3 default.")) |
1245 | { | 1285 | { |
1246 | element.Add(new XAttribute("Inheritable", "no")); | 1286 | element.Add(new XAttribute("Inheritable", "no")); |
1247 | } | 1287 | } |
@@ -1253,6 +1293,14 @@ namespace WixToolset.Converters | |||
1253 | { | 1293 | { |
1254 | if (this.SourceVersion < 4) | 1294 | if (this.SourceVersion < 4) |
1255 | { | 1295 | { |
1296 | var win64 = element.Attribute("Win64"); | ||
1297 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
1298 | { | ||
1299 | var value = win64.Value; | ||
1300 | element.Add(new XAttribute("Bitness", value == "yes" ? "always64" : "always32")); | ||
1301 | win64.Remove(); | ||
1302 | } | ||
1303 | |||
1256 | var result = element.Attribute("Result")?.Value; | 1304 | var result = element.Attribute("Result")?.Value; |
1257 | if (result == null || result == "value") | 1305 | if (result == null || result == "value") |
1258 | { | 1306 | { |
@@ -1742,6 +1790,11 @@ namespace WixToolset.Converters | |||
1742 | /// The ExePackage elements "XxxCommand" attributes have been renamed to "XxxArguments". | 1790 | /// The ExePackage elements "XxxCommand" attributes have been renamed to "XxxArguments". |
1743 | /// </summary> | 1791 | /// </summary> |
1744 | RenameExePackageCommandToArguments, | 1792 | RenameExePackageCommandToArguments, |
1793 | |||
1794 | /// <summary> | ||
1795 | /// The Win64 attribute has been renamed. Use the Bitness attribute instead. | ||
1796 | /// </summary> | ||
1797 | Win64AttributeRenamed, | ||
1745 | } | 1798 | } |
1746 | } | 1799 | } |
1747 | } | 1800 | } |
diff --git a/src/test/WixToolsetTest.Converters/BitnessFixture.cs b/src/test/WixToolsetTest.Converters/BitnessFixture.cs new file mode 100644 index 00000000..9996806d --- /dev/null +++ b/src/test/WixToolsetTest.Converters/BitnessFixture.cs | |||
@@ -0,0 +1,181 @@ | |||
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 | |||
3 | namespace WixToolsetTest.Converters | ||
4 | { | ||
5 | using System; | ||
6 | using System.Xml.Linq; | ||
7 | using WixBuildTools.TestSupport; | ||
8 | using WixToolset.Converters; | ||
9 | using WixToolsetTest.Converters.Mocks; | ||
10 | using Xunit; | ||
11 | |||
12 | public class BitnessFixture : BaseConverterFixture | ||
13 | { | ||
14 | [Fact] | ||
15 | public void FixComponentBitness() | ||
16 | { | ||
17 | var parse = String.Join(Environment.NewLine, | ||
18 | "<?xml version=\"1.0\" encoding=\"utf-16\"?>", | ||
19 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>", | ||
20 | " <Fragment>", | ||
21 | " <Component>", | ||
22 | " <File Source='default.exe' />", | ||
23 | " </Component>", | ||
24 | " <Component Win64='no'>", | ||
25 | " <File Source='32bit.exe' />", | ||
26 | " </Component>", | ||
27 | " <Component Win64='yes'>", | ||
28 | " <File Source='64bit.exe' />", | ||
29 | " </Component>", | ||
30 | " </Fragment>", | ||
31 | "</Wix>"); | ||
32 | |||
33 | var expected = new[] | ||
34 | { | ||
35 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", | ||
36 | " <Fragment>", | ||
37 | " <Component>", | ||
38 | " <File Id=\"default.exe\" Source=\"default.exe\" />", | ||
39 | " </Component>", | ||
40 | " <Component Bitness=\"always32\">", | ||
41 | " <File Id=\"_32bit.exe\" Source=\"32bit.exe\" />", | ||
42 | " </Component>", | ||
43 | " <Component Bitness=\"always64\">", | ||
44 | " <File Id=\"_64bit.exe\" Source=\"64bit.exe\" />", | ||
45 | " </Component>", | ||
46 | " </Fragment>", | ||
47 | "</Wix>" | ||
48 | }; | ||
49 | |||
50 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
51 | |||
52 | var messaging = new MockMessaging(); | ||
53 | var converter = new WixConverter(messaging, 2, null, null); | ||
54 | |||
55 | var errors = converter.ConvertDocument(document); | ||
56 | Assert.Equal(7, errors); | ||
57 | |||
58 | var actualLines = UnformattedDocumentLines(document); | ||
59 | WixAssert.CompareLineByLine(expected, actualLines); | ||
60 | } | ||
61 | |||
62 | [Fact] | ||
63 | public void FixRegistrySearchBitness() | ||
64 | { | ||
65 | var parse = String.Join(Environment.NewLine, | ||
66 | "<?xml version=\"1.0\" encoding=\"utf-16\"?>", | ||
67 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>", | ||
68 | " <Fragment>", | ||
69 | " <Property Id='BITNESSDEFAULT'>", | ||
70 | " <RegistrySearch Id='SampleRegSearch' Root='HKLM' Key='SampleReg' Type='raw'></RegistrySearch>", | ||
71 | " </Property>", | ||
72 | " <Property Id='BITNESS32'>", | ||
73 | " <RegistrySearch Id='SampleRegSearch' Root='HKLM' Key='SampleReg' Type='raw' Win64='no'></RegistrySearch>", | ||
74 | " </Property>", | ||
75 | " <Property Id='BITNESS64'>", | ||
76 | " <RegistrySearch Id='SampleRegSearch' Root='HKLM' Key='SampleReg' Type='raw' Win64='yes'></RegistrySearch>", | ||
77 | " </Property>", | ||
78 | " </Fragment>", | ||
79 | "</Wix>"); | ||
80 | |||
81 | var expected = new[] | ||
82 | { | ||
83 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", | ||
84 | " <Fragment>", | ||
85 | " <Property Id=\"BITNESSDEFAULT\">", | ||
86 | " <RegistrySearch Id=\"SampleRegSearch\" Root=\"HKLM\" Key=\"SampleReg\" Type=\"raw\"></RegistrySearch>", | ||
87 | " </Property>", | ||
88 | " <Property Id=\"BITNESS32\">", | ||
89 | " <RegistrySearch Id=\"SampleRegSearch\" Root=\"HKLM\" Key=\"SampleReg\" Type=\"raw\" Bitness=\"always32\"></RegistrySearch>", | ||
90 | " </Property>", | ||
91 | " <Property Id=\"BITNESS64\">", | ||
92 | " <RegistrySearch Id=\"SampleRegSearch\" Root=\"HKLM\" Key=\"SampleReg\" Type=\"raw\" Bitness=\"always64\"></RegistrySearch>", | ||
93 | " </Property>", | ||
94 | " </Fragment>", | ||
95 | "</Wix>" | ||
96 | }; | ||
97 | |||
98 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
99 | |||
100 | var messaging = new MockMessaging(); | ||
101 | var converter = new WixConverter(messaging, 2, null, null); | ||
102 | |||
103 | var errors = converter.ConvertDocument(document); | ||
104 | Assert.Equal(4, errors); | ||
105 | |||
106 | var actualLines = UnformattedDocumentLines(document); | ||
107 | WixAssert.CompareLineByLine(expected, actualLines); | ||
108 | } | ||
109 | |||
110 | [Fact] | ||
111 | public void FixUtilRegistrySearchBitness() | ||
112 | { | ||
113 | var parse = String.Join(Environment.NewLine, | ||
114 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'>", | ||
115 | " <Fragment>", | ||
116 | " <util:RegistrySearch Id='RegValue' Root='HKLM' Key='Converter' Variable='Test' />", | ||
117 | " <util:RegistrySearch Id='RegValue2' Root='HKLM' Key='Converter' Variable='Test' Result='value' Win64='no' />", | ||
118 | " <util:RegistrySearch Id='RegValue3' Root='HKLM' Key='Converter' Variable='Test' Result='exists' Win64='yes' />", | ||
119 | " </Fragment>", | ||
120 | "</Wix>"); | ||
121 | |||
122 | var expected = new[] | ||
123 | { | ||
124 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:util=\"http://wixtoolset.org/schemas/v4/wxs/util\">", | ||
125 | " <Fragment>", | ||
126 | " <util:RegistrySearch Id=\"RegValue\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" />", | ||
127 | " <util:RegistrySearch Id=\"RegValue2\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" Result=\"value\" Bitness=\"always32\" />", | ||
128 | " <util:RegistrySearch Id=\"RegValue3\" Root=\"HKLM\" Key=\"Converter\" Variable=\"Test\" Result=\"exists\" Bitness=\"always64\" />", | ||
129 | " </Fragment>", | ||
130 | "</Wix>" | ||
131 | }; | ||
132 | |||
133 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
134 | |||
135 | var messaging = new MockMessaging(); | ||
136 | var converter = new WixConverter(messaging, 2, null, null); | ||
137 | |||
138 | var errors = converter.ConvertDocument(document); | ||
139 | Assert.Equal(6, errors); | ||
140 | |||
141 | var actualLines = UnformattedDocumentLines(document); | ||
142 | WixAssert.CompareLineByLine(expected, actualLines); | ||
143 | } | ||
144 | |||
145 | [Fact] | ||
146 | public void FixApprovedExeBitness() | ||
147 | { | ||
148 | var parse = String.Join(Environment.NewLine, | ||
149 | "<?xml version=\"1.0\" encoding=\"utf-16\"?>", | ||
150 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>", | ||
151 | " <Bundle>", | ||
152 | " <ApprovedExeForElevation Id='Default' Key='WixToolset\\BurnTesting' Value='Test' />", | ||
153 | " <ApprovedExeForElevation Id='Bitness32' Key='WixToolset\\BurnTesting' Value='Test' Win64='no' />", | ||
154 | " <ApprovedExeForElevation Id='Bitness64' Key='WixToolset\\BurnTesting' Value='Test' Win64='yes' />", | ||
155 | " </Bundle>", | ||
156 | "</Wix>"); | ||
157 | |||
158 | var expected = new[] | ||
159 | { | ||
160 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", | ||
161 | " <Bundle>", | ||
162 | " <ApprovedExeForElevation Id=\"Default\" Key=\"WixToolset\\BurnTesting\" Value=\"Test\" />", | ||
163 | " <ApprovedExeForElevation Id=\"Bitness32\" Key=\"WixToolset\\BurnTesting\" Value=\"Test\" Bitness=\"always32\" />", | ||
164 | " <ApprovedExeForElevation Id=\"Bitness64\" Key=\"WixToolset\\BurnTesting\" Value=\"Test\" Bitness=\"always64\" />", | ||
165 | " </Bundle>", | ||
166 | "</Wix>" | ||
167 | }; | ||
168 | |||
169 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
170 | |||
171 | var messaging = new MockMessaging(); | ||
172 | var converter = new WixConverter(messaging, 2, null, null); | ||
173 | |||
174 | var errors = converter.ConvertDocument(document); | ||
175 | Assert.Equal(4, errors); | ||
176 | |||
177 | var actualLines = UnformattedDocumentLines(document); | ||
178 | WixAssert.CompareLineByLine(expected, actualLines); | ||
179 | } | ||
180 | } | ||
181 | } | ||