diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/WixToolset.Converters/WixConverter.cs | 95 | ||||
-rw-r--r-- | src/test/WixToolsetTest.Converters/TagFixture.cs | 66 |
2 files changed, 122 insertions, 39 deletions
diff --git a/src/WixToolset.Converters/WixConverter.cs b/src/WixToolset.Converters/WixConverter.cs index 09a4168a..b8f2a516 100644 --- a/src/WixToolset.Converters/WixConverter.cs +++ b/src/WixToolset.Converters/WixConverter.cs | |||
@@ -119,7 +119,9 @@ namespace WixToolset.Converters | |||
119 | private static readonly XName SetPropertyElementName = WixNamespace + "SetProperty"; | 119 | private static readonly XName SetPropertyElementName = WixNamespace + "SetProperty"; |
120 | private static readonly XName ShortcutPropertyElementName = WixNamespace + "ShortcutProperty"; | 120 | private static readonly XName ShortcutPropertyElementName = WixNamespace + "ShortcutProperty"; |
121 | private static readonly XName SoftwareTagElementName = WixNamespace + "SoftwareTag"; | 121 | private static readonly XName SoftwareTagElementName = WixNamespace + "SoftwareTag"; |
122 | private static readonly XName SoftwareTagRefElementName = WixNamespace + "SoftwareTagRef"; | ||
122 | private static readonly XName TagElementName = XNamespace.None + "Tag"; | 123 | private static readonly XName TagElementName = XNamespace.None + "Tag"; |
124 | private static readonly XName TagRefElementName = XNamespace.None + "TagRef"; | ||
123 | private static readonly XName TextElementName = WixNamespace + "Text"; | 125 | private static readonly XName TextElementName = WixNamespace + "Text"; |
124 | private static readonly XName UITextElementName = WixNamespace + "UIText"; | 126 | private static readonly XName UITextElementName = WixNamespace + "UIText"; |
125 | private static readonly XName VariableElementName = WixNamespace + "Variable"; | 127 | private static readonly XName VariableElementName = WixNamespace + "Variable"; |
@@ -235,6 +237,7 @@ namespace WixToolset.Converters | |||
235 | { WixConverter.SetPropertyElementName, this.ConvertSetPropertyElement }, | 237 | { WixConverter.SetPropertyElementName, this.ConvertSetPropertyElement }, |
236 | { WixConverter.ShortcutPropertyElementName, this.ConvertShortcutPropertyElement }, | 238 | { WixConverter.ShortcutPropertyElementName, this.ConvertShortcutPropertyElement }, |
237 | { WixConverter.TagElementName, this.ConvertTagElement }, | 239 | { WixConverter.TagElementName, this.ConvertTagElement }, |
240 | { WixConverter.TagRefElementName, this.ConvertTagRefElement }, | ||
238 | { WixConverter.TextElementName, this.ConvertTextElement }, | 241 | { WixConverter.TextElementName, this.ConvertTextElement }, |
239 | { WixConverter.UITextElementName, this.ConvertUITextElement }, | 242 | { WixConverter.UITextElementName, this.ConvertUITextElement }, |
240 | { WixConverter.VariableElementName, this.ConvertVariableElement }, | 243 | { WixConverter.VariableElementName, this.ConvertVariableElement }, |
@@ -686,13 +689,7 @@ namespace WixToolset.Converters | |||
686 | 689 | ||
687 | private void ConvertApprovedExeForElevationElement(XElement element) | 690 | private void ConvertApprovedExeForElevationElement(XElement element) |
688 | { | 691 | { |
689 | var win64 = element.Attribute("Win64"); | 692 | this.RenameWin64ToBitness(element); |
690 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
691 | { | ||
692 | var value = this.UpdateWin64ValueToBitnessValue(win64); | ||
693 | element.Add(new XAttribute("Bitness", value)); | ||
694 | win64.Remove(); | ||
695 | } | ||
696 | } | 693 | } |
697 | 694 | ||
698 | private void ConvertBalBootstrapperApplicationRef(XElement element, string theme, XName balBAElementName, XName oldBalBAElementName = null) | 695 | private void ConvertBalBootstrapperApplicationRef(XElement element, string theme, XName balBAElementName, XName oldBalBAElementName = null) |
@@ -897,13 +894,7 @@ namespace WixToolset.Converters | |||
897 | } | 894 | } |
898 | } | 895 | } |
899 | 896 | ||
900 | var win64 = element.Attribute("Win64"); | 897 | this.RenameWin64ToBitness(element); |
901 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
902 | { | ||
903 | var value = this.UpdateWin64ValueToBitnessValue(win64); | ||
904 | element.Add(new XAttribute("Bitness", value)); | ||
905 | win64.Remove(); | ||
906 | } | ||
907 | } | 898 | } |
908 | 899 | ||
909 | private void ConvertDirectoryElement(XElement element) | 900 | private void ConvertDirectoryElement(XElement element) |
@@ -1289,28 +1280,13 @@ namespace WixToolset.Converters | |||
1289 | 1280 | ||
1290 | this.OnError(ConverterTestType.BurnHashAlgorithmChanged, element, "The hash algorithm for bundles changed from SHA1 to SHA512."); | 1281 | this.OnError(ConverterTestType.BurnHashAlgorithmChanged, element, "The hash algorithm for bundles changed from SHA1 to SHA512."); |
1291 | 1282 | ||
1292 | RemoveIfPresent(element.Attribute("CertificatePublicKey")); | 1283 | this.RemoveAttributeIfPresent(element, "CertificatePublicKey", ConverterTestType.BundleSignatureValidationObsolete, "The {0} element contains obsolete '{1}' attribute. Signature validation is no longer supported. The attribute will be removed."); |
1293 | RemoveIfPresent(element.Attribute("CertificateThumbprint")); | 1284 | this.RemoveAttributeIfPresent(element, "CertificateThumbprint", ConverterTestType.BundleSignatureValidationObsolete, "The {0} element contains obsolete '{1}' attribute. Signature validation is no longer supported. The attribute will be removed."); |
1294 | |||
1295 | void RemoveIfPresent(XAttribute xAttribute) | ||
1296 | { | ||
1297 | if (null != xAttribute | ||
1298 | && this.OnError(ConverterTestType.BundleSignatureValidationObsolete, element, "The chain package element contains obsolete '{0}' attribute. Signature validation is no longer supported. The attribute will be removed.", xAttribute.Name)) | ||
1299 | { | ||
1300 | xAttribute.Remove(); | ||
1301 | } | ||
1302 | } | ||
1303 | } | 1285 | } |
1304 | 1286 | ||
1305 | private void ConvertRegistrySearchElement(XElement element) | 1287 | private void ConvertRegistrySearchElement(XElement element) |
1306 | { | 1288 | { |
1307 | var win64 = element.Attribute("Win64"); | 1289 | this.RenameWin64ToBitness(element); |
1308 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
1309 | { | ||
1310 | var value = this.UpdateWin64ValueToBitnessValue(win64); | ||
1311 | element.Add(new XAttribute("Bitness", value)); | ||
1312 | win64.Remove(); | ||
1313 | } | ||
1314 | } | 1290 | } |
1315 | 1291 | ||
1316 | private void ConvertRequiredPrivilegeElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Name"); | 1292 | private void ConvertRequiredPrivilegeElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Name"); |
@@ -1394,6 +1370,18 @@ namespace WixToolset.Converters | |||
1394 | { | 1370 | { |
1395 | element.Name = SoftwareTagElementName; | 1371 | element.Name = SoftwareTagElementName; |
1396 | } | 1372 | } |
1373 | |||
1374 | this.RemoveAttributeIfPresent(element, "Licensed", ConverterTestType.SoftwareTagLicensedObsolete, "The {0} element contains obsolete '{1}' attribute. The attribute will be removed."); | ||
1375 | this.RemoveAttributeIfPresent(element, "Type", ConverterTestType.SoftwareTagLicensedObsolete, "The {0} element contains obsolete '{1}' attribute. The attribute will be removed."); | ||
1376 | this.RenameWin64ToBitness(element); | ||
1377 | } | ||
1378 | |||
1379 | private void ConvertTagRefElement(XElement element) | ||
1380 | { | ||
1381 | if (this.OnError(ConverterTestType.TagRefElementRenamed, element, "The TagRef element has been renamed. Use the 'SoftwareTagRef' element instead.")) | ||
1382 | { | ||
1383 | element.Name = SoftwareTagRefElementName; | ||
1384 | } | ||
1397 | } | 1385 | } |
1398 | 1386 | ||
1399 | private void ConvertTextElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Value"); | 1387 | private void ConvertTextElement(XElement element) => this.ConvertInnerTextToAttribute(element, "Value"); |
@@ -1543,13 +1531,7 @@ namespace WixToolset.Converters | |||
1543 | 1531 | ||
1544 | private void ConvertUtilRegistrySearchElement(XElement element) | 1532 | private void ConvertUtilRegistrySearchElement(XElement element) |
1545 | { | 1533 | { |
1546 | var win64 = element.Attribute("Win64"); | 1534 | this.RenameWin64ToBitness(element); |
1547 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The Win64 attribute has been renamed. Use the Bitness attribute instead.")) | ||
1548 | { | ||
1549 | var value = this.UpdateWin64ValueToBitnessValue(win64); | ||
1550 | element.Add(new XAttribute("Bitness", value)); | ||
1551 | win64.Remove(); | ||
1552 | } | ||
1553 | 1535 | ||
1554 | if (this.SourceVersion < 4) | 1536 | if (this.SourceVersion < 4) |
1555 | { | 1537 | { |
@@ -1593,6 +1575,26 @@ namespace WixToolset.Converters | |||
1593 | } | 1575 | } |
1594 | } | 1576 | } |
1595 | 1577 | ||
1578 | void RemoveAttributeIfPresent(XElement element, string attributeName, ConverterTestType type, string format) | ||
1579 | { | ||
1580 | var xAttribute = element.Attribute(attributeName); | ||
1581 | if (null != xAttribute && this.OnError(type, element, format, element.Name.LocalName, xAttribute.Name)) | ||
1582 | { | ||
1583 | xAttribute.Remove(); | ||
1584 | } | ||
1585 | } | ||
1586 | |||
1587 | private void RenameWin64ToBitness(XElement element) | ||
1588 | { | ||
1589 | var win64 = element.Attribute("Win64"); | ||
1590 | if (win64 != null && this.OnError(ConverterTestType.Win64AttributeRenamed, element, "The {0} element's Win64 attribute has been renamed. Use the Bitness attribute instead.", element.Name.LocalName)) | ||
1591 | { | ||
1592 | var value = this.UpdateWin64ValueToBitnessValue(win64); | ||
1593 | element.Add(new XAttribute("Bitness", value)); | ||
1594 | win64.Remove(); | ||
1595 | } | ||
1596 | } | ||
1597 | |||
1596 | private string UpdateWin64ValueToBitnessValue(XAttribute xWin64Attribute) | 1598 | private string UpdateWin64ValueToBitnessValue(XAttribute xWin64Attribute) |
1597 | { | 1599 | { |
1598 | var value = xWin64Attribute.Value ?? String.Empty; | 1600 | var value = xWin64Attribute.Value ?? String.Empty; |
@@ -2185,6 +2187,21 @@ namespace WixToolset.Converters | |||
2185 | /// The RegistryKey element's Action attribute is obsolete. | 2187 | /// The RegistryKey element's Action attribute is obsolete. |
2186 | /// </summary> | 2188 | /// </summary> |
2187 | RegistryKeyActionObsolete, | 2189 | RegistryKeyActionObsolete, |
2190 | |||
2191 | /// <summary> | ||
2192 | /// The TagRef element has been renamed. Use the element 'SoftwareTagRef' name. | ||
2193 | /// </summary> | ||
2194 | TagRefElementRenamed, | ||
2195 | |||
2196 | /// <summary> | ||
2197 | /// The SoftwareTag element's Licensed attribute is obsolete. | ||
2198 | /// </summary> | ||
2199 | SoftwareTagLicensedObsolete, | ||
2200 | |||
2201 | /// <summary> | ||
2202 | /// The SoftwareTag element's Type attribute is obsolete. | ||
2203 | /// </summary> | ||
2204 | SoftwareTagTypeObsolete, | ||
2188 | } | 2205 | } |
2189 | } | 2206 | } |
2190 | } | 2207 | } |
diff --git a/src/test/WixToolsetTest.Converters/TagFixture.cs b/src/test/WixToolsetTest.Converters/TagFixture.cs index c163ea11..5e07c83b 100644 --- a/src/test/WixToolsetTest.Converters/TagFixture.cs +++ b/src/test/WixToolsetTest.Converters/TagFixture.cs | |||
@@ -41,5 +41,71 @@ namespace WixToolsetTest.Converters | |||
41 | var actualLines = UnformattedDocumentLines(document); | 41 | var actualLines = UnformattedDocumentLines(document); |
42 | WixAssert.CompareLineByLine(expected, actualLines); | 42 | WixAssert.CompareLineByLine(expected, actualLines); |
43 | } | 43 | } |
44 | |||
45 | [Fact] | ||
46 | public void FixTagExtensionDeprecations() | ||
47 | { | ||
48 | var parse = String.Join(Environment.NewLine, | ||
49 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:tag='http://schemas.microsoft.com/wix/TagExtension'>", | ||
50 | " <Product>", | ||
51 | " <tag:Tag Regid='wixtoolset.org' InstallDirectory='InstallFolder' Licensed='true' Type='component' Win64='yes' />", | ||
52 | " </Product>", | ||
53 | "</Wix>"); | ||
54 | |||
55 | var expected = new[] | ||
56 | { | ||
57 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", | ||
58 | " <Package>", | ||
59 | " <SoftwareTag Regid=\"wixtoolset.org\" InstallDirectory=\"InstallFolder\" Bitness=\"always64\" />", | ||
60 | " </Package>", | ||
61 | "</Wix>" | ||
62 | }; | ||
63 | |||
64 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
65 | |||
66 | var messaging = new MockMessaging(); | ||
67 | var converter = new WixConverter(messaging, 2, null, null); | ||
68 | |||
69 | var errors = converter.ConvertDocument(document); | ||
70 | Assert.Equal(7, errors); | ||
71 | |||
72 | var actualLines = UnformattedDocumentLines(document); | ||
73 | WixAssert.CompareLineByLine(expected, actualLines); | ||
74 | } | ||
75 | |||
76 | [Fact] | ||
77 | public void FixTagExtensionTagRef() | ||
78 | { | ||
79 | var parse = String.Join(Environment.NewLine, | ||
80 | "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:tag='http://schemas.microsoft.com/wix/TagExtension'>", | ||
81 | " <Fragment>", | ||
82 | " <PatchFamily>", | ||
83 | " <tag:TagRef Regid='wixtoolset.org' />", | ||
84 | " </PatchFamily>", | ||
85 | " </Fragment>", | ||
86 | "</Wix>"); | ||
87 | |||
88 | var expected = new[] | ||
89 | { | ||
90 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">", | ||
91 | " <Fragment>", | ||
92 | " <PatchFamily>", | ||
93 | " <SoftwareTagRef Regid=\"wixtoolset.org\" />", | ||
94 | " </PatchFamily>", | ||
95 | " </Fragment>", | ||
96 | "</Wix>" | ||
97 | }; | ||
98 | |||
99 | var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); | ||
100 | |||
101 | var messaging = new MockMessaging(); | ||
102 | var converter = new WixConverter(messaging, 2, null, null); | ||
103 | |||
104 | var errors = converter.ConvertDocument(document); | ||
105 | Assert.Equal(3, errors); | ||
106 | |||
107 | var actualLines = UnformattedDocumentLines(document); | ||
108 | WixAssert.CompareLineByLine(expected, actualLines); | ||
109 | } | ||
44 | } | 110 | } |
45 | } | 111 | } |