@joebigelow / wix / commits / ed20ef6d

Add failing tests for package description and packages sharing payloads In Core projects, treat warnings as errors.

Add failing tests for package description and packages sharing payloads In Core projects, treat warnings as errors.

Sean Hall committed Feb 27, 2021 at 16:28 UTC ed20ef6dc8caa5d585c1a715ff4ba577687bf291
7 files changed +176 -5
src/Custom.Build.props new
+6
@@ -0,0 +1,6 @@
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 +<Project>
3 + <PropertyGroup Condition="'$(Configuration)'=='Release'">
4 + <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
5 + </PropertyGroup>
6 +</Project>
src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs
+4 -5
@@ -211,7 +211,9 @@ namespace WixToolset.Core.Burn.Bundles
211
212 private void WritePayloadInfo(XmlTextWriter writer)
213 {
214 - var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>();
214 + // TODO: check v3 - should this be only include package payloads or include all non-UX container payloads?
215 + var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>()
216 + .Where(p => !String.IsNullOrEmpty(p.PackageRef));
217
218 foreach (var payloadSymbol in payloadSymbols)
219 {
@@ -219,10 +221,7 @@ namespace WixToolset.Core.Burn.Bundles
221
222 writer.WriteAttributeString("Payload", payloadSymbol.Id.Id);
223
222 - if (!String.IsNullOrEmpty(payloadSymbol.PackageRef))
223 - {
224 - writer.WriteAttributeString("Package", payloadSymbol.PackageRef);
225 - }
224 + writer.WriteAttributeString("Package", payloadSymbol.PackageRef);
225
226 if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef))
227 {
src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
+1
@@ -569,6 +569,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
569 /// </summary>
570 /// <param name="actionSymbol">The action symbol to be sequenced.</param>
571 /// <param name="requiredActionSymbols">Collection of actions which must be included.</param>
572 + /// <param name="firstReference">A dictionary used for detecting cyclic references among action symbols.</param>
573 private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary<string, WixActionSymbol> requiredActionSymbols, Dictionary<WixActionSymbol, WixActionSymbol> firstReference)
574 {
575 var after = false;
src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
+6
@@ -3,6 +3,7 @@
3 namespace WixToolsetTest.CoreIntegration
4 {
5 using System;
6 + using System.Collections.Generic;
7 using System.IO;
8 using System.Linq;
9 using System.Text;
@@ -115,6 +116,11 @@ namespace WixToolsetTest.CoreIntegration
116 Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" +
117 "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" +
118 "</Registration>", registrationElement.GetTestXml());
119 +
120 + var msiPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='test.msi']");
121 + var msiPayload = (XmlNode)Assert.Single(msiPayloads);
122 + Assert.Equal("<Payload Id='test.msi' FilePath='test.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />",
123 + msiPayload.GetTestXml(new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } }));
124 }
125
126 var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033);
src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs
+129
@@ -51,6 +51,93 @@ namespace WixToolsetTest.CoreIntegration
51 }
52 }
53
54 + [Fact(Skip = "Test demonstrates failure")]
55 + public void PopulatesBAManifestWithPackageInformation()
56 + {
57 + var folder = TestData.Get(@"TestData");
58 +
59 + using (var fs = new DisposableFileSystem())
60 + {
61 + var baseFolder = fs.GetFolder();
62 + var intermediateFolder = Path.Combine(baseFolder, "obj");
63 + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
64 + var baFolderPath = Path.Combine(baseFolder, "ba");
65 + var extractFolderPath = Path.Combine(baseFolder, "extract");
66 +
67 + var result = WixRunner.Execute(false, new[]
68 + {
69 + "build",
70 + Path.Combine(folder, "CustomPackageDescription", "CustomPackageDescription.wxs"),
71 + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
72 + "-bindpath", Path.Combine(folder, ".Data"),
73 + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
74 + "-intermediateFolder", intermediateFolder,
75 + "-o", bundlePath
76 + });
77 +
78 + result.AssertSuccess();
79 +
80 + Assert.True(File.Exists(bundlePath));
81 +
82 + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
83 + extractResult.AssertSuccess();
84 +
85 + var packageElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPackageProperties");
86 + var ignoreAttributesByElementName = new Dictionary<string, List<string>>
87 + {
88 + { "WixPackageProperties", new List<string> { "DownloadSize", "PackageSize", "InstalledSize", "Version" } },
89 + };
90 + Assert.Equal(3, packageElements.Count);
91 + Assert.Equal("<WixPackageProperties Package='burn.exe' Vital='yes' DisplayName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[0].GetTestXml(ignoreAttributesByElementName));
92 + Assert.Equal("<WixPackageProperties Package='RemotePayloadExe' Vital='yes' DisplayName='Override RemotePayload display name' Description='Override RemotePayload description' DownloadSize='1' PackageSize='1' InstalledSize='1' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_RemotePayloadExe' RollbackLogPathVariable='WixBundleRollbackLog_RemotePayloadExe' Compressed='no' Version='1.0.0.0' Cache='yes' />", packageElements[1].GetTestXml());
93 + Assert.Equal("<WixPackageProperties Package='calc.exe' Vital='yes' DisplayName='Override harvested display name' Description='Override harvested description' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_calc.exe' RollbackLogPathVariable='WixBundleRollbackLog_calc.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[2].GetTestXml(ignoreAttributesByElementName));
94 + }
95 + }
96 +
97 + [Fact(Skip = "Test demonstrates failure")]
98 + public void PopulatesBAManifestWithPayloadInformation()
99 + {
100 + var folder = TestData.Get(@"TestData");
101 +
102 + using (var fs = new DisposableFileSystem())
103 + {
104 + var baseFolder = fs.GetFolder();
105 + var intermediateFolder = Path.Combine(baseFolder, "obj");
106 + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
107 + var baFolderPath = Path.Combine(baseFolder, "ba");
108 + var extractFolderPath = Path.Combine(baseFolder, "extract");
109 +
110 + var result = WixRunner.Execute(false, new[]
111 + {
112 + "build",
113 + Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"),
114 + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
115 + "-bindpath", Path.Combine(folder, ".Data"),
116 + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
117 + "-intermediateFolder", intermediateFolder,
118 + "-o", bundlePath
119 + });
120 +
121 + result.AssertSuccess();
122 +
123 + Assert.True(File.Exists(bundlePath));
124 +
125 + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
126 + extractResult.AssertSuccess();
127 +
128 + var payloadElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties");
129 + var ignoreAttributesByElementName = new Dictionary<string, List<string>>
130 + {
131 + { "WixPayloadProperties", new List<string> { "Size" } },
132 + };
133 + Assert.Equal(4, payloadElements.Count);
134 + Assert.Equal("<WixPayloadProperties Payload='credwiz.exe' Package='credwiz.exe' Container='WixAttachedContainer' Name='credwiz.exe' Size='*' LayoutOnly='no' />", payloadElements[0].GetTestXml(ignoreAttributesByElementName));
135 + Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='credwiz.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[1].GetTestXml(ignoreAttributesByElementName));
136 + Assert.Equal("<WixPayloadProperties Payload='cscript.exe' Package='cscript.exe' Container='WixAttachedContainer' Name='cscript.exe' Size='*' LayoutOnly='no' />", payloadElements[2].GetTestXml(ignoreAttributesByElementName));
137 + Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='cscript.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[3].GetTestXml(ignoreAttributesByElementName));
138 + }
139 + }
140 +
141 [Fact]
142 public void PopulatesBEManifestWithBundleExtensionBundleCustomData()
143 {
@@ -191,6 +278,48 @@ namespace WixToolsetTest.CoreIntegration
278 }
279 }
280
281 + [Fact(Skip = "Test demonstrates failure")]
282 + public void PopulatesManifestWithExePackages()
283 + {
284 + var folder = TestData.Get(@"TestData");
285 +
286 + using (var fs = new DisposableFileSystem())
287 + {
288 + var baseFolder = fs.GetFolder();
289 + var intermediateFolder = Path.Combine(baseFolder, "obj");
290 + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
291 + var baFolderPath = Path.Combine(baseFolder, "ba");
292 + var extractFolderPath = Path.Combine(baseFolder, "extract");
293 +
294 + var result = WixRunner.Execute(false, new[]
295 + {
296 + "build",
297 + Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"),
298 + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
299 + "-bindpath", Path.Combine(folder, ".Data"),
300 + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
301 + "-intermediateFolder", intermediateFolder,
302 + "-o", bundlePath
303 + });
304 +
305 + result.AssertSuccess();
306 +
307 + Assert.True(File.Exists(bundlePath));
308 +
309 + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
310 + extractResult.AssertSuccess();
311 +
312 + var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage");
313 + var ignoreAttributesByElementName = new Dictionary<string, List<string>>
314 + {
315 + { "ExePackage", new List<string> { "CacheId", "InstallSize", "Size" } },
316 + };
317 + Assert.Equal(2, exePackageElements.Count);
318 + Assert.Equal("<ExePackage Id='credwiz.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_credwiz.exe' RollbackLogPathVariable='WixBundleRollbackLog_credwiz.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='credwiz.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[0].GetTestXml(ignoreAttributesByElementName));
319 + Assert.Equal("<ExePackage Id='cscript.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_cscript.exe' RollbackLogPathVariable='WixBundleRollbackLog_cscript.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='cscript.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[1].GetTestXml(ignoreAttributesByElementName));
320 + }
321 + }
322 +
323 [Fact]
324 public void PopulatesManifestWithSetVariables()
325 {
src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs new
+12
@@ -0,0 +1,12 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 + <Fragment>
4 + <PackageGroup Id="BundlePackages">
5 + <ExePackage SourceFile="burn.exe" Permanent="yes" />
6 + <ExePackage Id="RemotePayloadExe" Name="fake.exe" Compressed="no" DownloadUrl="example.com" Description="Override RemotePayload description" DisplayName="Override RemotePayload display name" Permanent="yes">
7 + <RemotePayload Description="RemotePayload description" Hash="a" ProductName="RemotePayload product name" Size="1" Version="1.0.0.0" />
8 + </ExePackage>
9 + <ExePackage SourceFile="C:\Windows\system32\calc.exe" Permanent="yes" Description="Override harvested description" DisplayName="Override harvested display name" />
10 + </PackageGroup>
11 + </Fragment>
12 +</Wix>
src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs new
+18
@@ -0,0 +1,18 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 + <Fragment>
4 + <PackageGroup Id="BundlePackages">
5 + <ExePackage SourceFile="C:\Windows\system32\credwiz.exe" Permanent="yes">
6 + <PayloadGroupRef Id="SharedPayloads" />
7 + </ExePackage>
8 + <ExePackage SourceFile="C:\Windows\system32\cscript.exe" Permanent="yes">
9 + <PayloadGroupRef Id="SharedPayloads" />
10 + </ExePackage>
11 + </PackageGroup>
12 + </Fragment>
13 + <Fragment>
14 + <PayloadGroup Id="SharedPayloads">
15 + <Payload SourceFile="$(sys.SOURCEFILEPATH)" />
16 + </PayloadGroup>
17 + </Fragment>
18 +</Wix>