// 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. namespace WixToolsetTest.CoreIntegration { using System; using System.Collections.Generic; using System.IO; using Example.Extension; using WixBuildTools.TestSupport; using WixToolset.Core.TestPackage; using Xunit; public class BundleManifestFixture { [Fact] public void PopulatesBAManifestWithBootstrapperApplicationBundleCustomData() { 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(new[] { "build", Path.Combine(folder, "BundleCustomTable", "BundleCustomTable.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-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 customElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:BundleCustomTableBA"); Assert.Equal(3, customElements.Count); Assert.Equal("", customElements[0].GetTestXml()); Assert.Equal("", customElements[1].GetTestXml()); Assert.Equal("", customElements[2].GetTestXml()); } } [Fact] 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] 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() { 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(new[] { "build", Path.Combine(folder, "BundleCustomTable", "BundleCustomTable.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-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 customElements = extractResult.SelectBundleExtensionDataNodes("/be:BundleExtensionData/be:BundleExtension[@Id='CustomTableExtension']/be:BundleCustomTableBE"); Assert.Equal(3, customElements.Count); Assert.Equal("", customElements[0].GetTestXml()); Assert.Equal("", customElements[1].GetTestXml()); Assert.Equal("", customElements[2].GetTestXml()); } } [Fact] public void PopulatesManifestWithBundleExtension() { 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(new[] { "build", Path.Combine(folder, "BundleExtension", "BundleExtension.wxs"), Path.Combine(folder, "BundleExtension", "SimpleBundleExtension.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-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 bundleExtensions = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:BundleExtension"); Assert.Equal(1, bundleExtensions.Count); Assert.Equal("", bundleExtensions[0].GetTestXml()); var bundleExtensionPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:UX/burn:Payload[@Id='ExampleBext']"); Assert.Equal(1, bundleExtensionPayloads.Count); var ignored = new Dictionary> { { "Payload", new List { "FileSize", "Hash", "SourcePath" } }, }; Assert.Equal("", bundleExtensionPayloads[0].GetTestXml(ignored)); } } [Fact] public void PopulatesManifestWithBundleExtensionSearches() { var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); 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(new[] { "build", Path.Combine(folder, "BundleExtension", "BundleExtensionSearches.wxs"), Path.Combine(folder, "BundleExtension", "BundleWithSearches.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-ext", extensionPath, "-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 bundleExtensions = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:BundleExtension"); Assert.Equal(1, bundleExtensions.Count); Assert.Equal("", bundleExtensions[0].GetTestXml()); var extensionSearches = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:ExtensionSearch"); Assert.Equal(2, extensionSearches.Count); Assert.Equal("", extensionSearches[0].GetTestXml()); Assert.Equal("", extensionSearches[1].GetTestXml()); var bundleExtensionDatas = extractResult.SelectBundleExtensionDataNodes("/be:BundleExtensionData/be:BundleExtension[@Id='ExampleBundleExtension']"); Assert.Equal(1, bundleExtensionDatas.Count); Assert.Equal("" + "" + "" + "", bundleExtensionDatas[0].GetTestXml()); var exampleSearches = extractResult.SelectBundleExtensionDataNodes("/be:BundleExtensionData/be:BundleExtension[@Id='ExampleBundleExtension']/be:ExampleSearch"); Assert.Equal(2, exampleSearches.Count); } } [Fact] 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() { 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(new[] { "build", Path.Combine(folder, "SetVariable", "Simple.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-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 setVariables = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:SetVariable"); Assert.Equal(6, setVariables.Count); Assert.Equal("", setVariables[0].GetTestXml()); Assert.Equal("", setVariables[1].GetTestXml()); Assert.Equal("", setVariables[2].GetTestXml()); Assert.Equal("", setVariables[3].GetTestXml()); Assert.Equal("", setVariables[4].GetTestXml()); Assert.Equal("", setVariables[5].GetTestXml()); } } } }