// 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());
}
}
}
}