From ed20ef6dc8caa5d585c1a715ff4ba577687bf291 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 27 Feb 2021 16:28:42 -0600 Subject: Add failing tests for package description and packages sharing payloads In Core projects, treat warnings as errors. --- src/Custom.Build.props | 6 + ...CreateBootstrapperApplicationManifestCommand.cs | 9 +- .../Bind/SequenceActionsCommand.cs | 1 + .../BundleFixture.cs | 6 + .../BundleManifestFixture.cs | 129 +++++++++++++++++++++ .../CustomPackageDescription.wxs | 12 ++ .../SharedPayloadsBetweenPackages.wxs | 18 +++ 7 files changed, 176 insertions(+), 5 deletions(-) create mode 100644 src/Custom.Build.props create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs diff --git a/src/Custom.Build.props b/src/Custom.Build.props new file mode 100644 index 00000000..889fb62e --- /dev/null +++ b/src/Custom.Build.props @@ -0,0 +1,6 @@ + + + + true + + diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs index f85a5b62..a24137f3 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs @@ -211,7 +211,9 @@ namespace WixToolset.Core.Burn.Bundles private void WritePayloadInfo(XmlTextWriter writer) { - var payloadSymbols = this.Section.Symbols.OfType(); + // TODO: check v3 - should this be only include package payloads or include all non-UX container payloads? + var payloadSymbols = this.Section.Symbols.OfType() + .Where(p => !String.IsNullOrEmpty(p.PackageRef)); foreach (var payloadSymbol in payloadSymbols) { @@ -219,10 +221,7 @@ namespace WixToolset.Core.Burn.Bundles writer.WriteAttributeString("Payload", payloadSymbol.Id.Id); - if (!String.IsNullOrEmpty(payloadSymbol.PackageRef)) - { - writer.WriteAttributeString("Package", payloadSymbol.PackageRef); - } + writer.WriteAttributeString("Package", payloadSymbol.PackageRef); if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef)) { diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs index 056b129b..7d75d74c 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs @@ -569,6 +569,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind /// /// The action symbol to be sequenced. /// Collection of actions which must be included. + /// A dictionary used for detecting cyclic references among action symbols. private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary requiredActionSymbols, Dictionary firstReference) { var after = false; diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 0660dd7b..2cc9a39e 100644 --- a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs @@ -3,6 +3,7 @@ namespace WixToolsetTest.CoreIntegration { using System; + using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; @@ -115,6 +116,11 @@ namespace WixToolsetTest.CoreIntegration Assert.Equal($"" + "" + "", registrationElement.GetTestXml()); + + var msiPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='test.msi']"); + var msiPayload = (XmlNode)Assert.Single(msiPayloads); + Assert.Equal("", + msiPayload.GetTestXml(new Dictionary>() { { "Payload", new List { "FileSize", "Hash" } } })); } var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs index ae83150a..3829cdf0 100644 --- a/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs @@ -51,6 +51,93 @@ namespace WixToolsetTest.CoreIntegration } } + [Fact(Skip = "Test demonstrates failure")] + public void PopulatesBAManifestWithPackageInformation() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); + var baFolderPath = Path.Combine(baseFolder, "ba"); + var extractFolderPath = Path.Combine(baseFolder, "extract"); + + var result = WixRunner.Execute(false, new[] + { + "build", + Path.Combine(folder, "CustomPackageDescription", "CustomPackageDescription.wxs"), + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), + "-bindpath", Path.Combine(folder, ".Data"), + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), + "-intermediateFolder", intermediateFolder, + "-o", bundlePath + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(bundlePath)); + + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); + extractResult.AssertSuccess(); + + var packageElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPackageProperties"); + var ignoreAttributesByElementName = new Dictionary> + { + { "WixPackageProperties", new List { "DownloadSize", "PackageSize", "InstalledSize", "Version" } }, + }; + Assert.Equal(3, packageElements.Count); + Assert.Equal("", packageElements[0].GetTestXml(ignoreAttributesByElementName)); + Assert.Equal("", packageElements[1].GetTestXml()); + Assert.Equal("", packageElements[2].GetTestXml(ignoreAttributesByElementName)); + } + } + + [Fact(Skip = "Test demonstrates failure")] + public void PopulatesBAManifestWithPayloadInformation() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); + var baFolderPath = Path.Combine(baseFolder, "ba"); + var extractFolderPath = Path.Combine(baseFolder, "extract"); + + var result = WixRunner.Execute(false, new[] + { + "build", + Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), + "-bindpath", Path.Combine(folder, ".Data"), + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), + "-intermediateFolder", intermediateFolder, + "-o", bundlePath + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(bundlePath)); + + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); + extractResult.AssertSuccess(); + + var payloadElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties"); + var ignoreAttributesByElementName = new Dictionary> + { + { "WixPayloadProperties", new List { "Size" } }, + }; + Assert.Equal(4, payloadElements.Count); + Assert.Equal("", payloadElements[0].GetTestXml(ignoreAttributesByElementName)); + Assert.Equal("", payloadElements[1].GetTestXml(ignoreAttributesByElementName)); + Assert.Equal("", payloadElements[2].GetTestXml(ignoreAttributesByElementName)); + Assert.Equal("", payloadElements[3].GetTestXml(ignoreAttributesByElementName)); + } + } + [Fact] public void PopulatesBEManifestWithBundleExtensionBundleCustomData() { @@ -191,6 +278,48 @@ namespace WixToolsetTest.CoreIntegration } } + [Fact(Skip = "Test demonstrates failure")] + public void PopulatesManifestWithExePackages() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); + var baFolderPath = Path.Combine(baseFolder, "ba"); + var extractFolderPath = Path.Combine(baseFolder, "extract"); + + var result = WixRunner.Execute(false, new[] + { + "build", + Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), + "-bindpath", Path.Combine(folder, ".Data"), + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), + "-intermediateFolder", intermediateFolder, + "-o", bundlePath + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(bundlePath)); + + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); + extractResult.AssertSuccess(); + + var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage"); + var ignoreAttributesByElementName = new Dictionary> + { + { "ExePackage", new List { "CacheId", "InstallSize", "Size" } }, + }; + Assert.Equal(2, exePackageElements.Count); + Assert.Equal("", exePackageElements[0].GetTestXml(ignoreAttributesByElementName)); + Assert.Equal("", exePackageElements[1].GetTestXml(ignoreAttributesByElementName)); + } + } + [Fact] public void PopulatesManifestWithSetVariables() { diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs new file mode 100644 index 00000000..db8b05f2 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs new file mode 100644 index 00000000..2588ffc1 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + -- cgit v1.2.3-55-g6feb