From 0baf6e26ec7ab2ff0b6ad36e9d44f3d68819b5d6 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 27 Mar 2020 13:54:56 +1000 Subject: Add ability for extensions to create custom bundle searches. This required creating BundleExtensionData.xml. --- src/WixToolset.Core.TestPackage/BundleExtractor.cs | 34 ++++++++++++++++++++++ .../ExtractBAContainerResult.cs | 32 ++++++++++++++++++++ 2 files changed, 66 insertions(+) (limited to 'src/WixToolset.Core.TestPackage') diff --git a/src/WixToolset.Core.TestPackage/BundleExtractor.cs b/src/WixToolset.Core.TestPackage/BundleExtractor.cs index 3d7b2932..8a56f117 100644 --- a/src/WixToolset.Core.TestPackage/BundleExtractor.cs +++ b/src/WixToolset.Core.TestPackage/BundleExtractor.cs @@ -22,11 +22,31 @@ namespace WixToolset.Core.TestPackage { result.ManifestDocument = LoadBurnManifest(destinationFolderPath); result.ManifestNamespaceManager = GetBurnNamespaceManager(result.ManifestDocument, "burn"); + + result.BADataDocument = LoadBAData(destinationFolderPath); + result.BADataNamespaceManager = GetBADataNamespaceManager(result.BADataDocument, "ba"); + + result.BundleExtensionDataDocument = LoadBundleExtensionData(destinationFolderPath); + result.BundleExtensionDataNamespaceManager = GetBundleExtensionDataNamespaceManager(result.BundleExtensionDataDocument, "be"); } return result; } + public static XmlNamespaceManager GetBADataNamespaceManager(XmlDocument document, string prefix) + { + var namespaceManager = new XmlNamespaceManager(document.NameTable); + namespaceManager.AddNamespace(prefix, BurnCommon.BADataNamespace); + return namespaceManager; + } + + public static XmlNamespaceManager GetBundleExtensionDataNamespaceManager(XmlDocument document, string prefix) + { + var namespaceManager = new XmlNamespaceManager(document.NameTable); + namespaceManager.AddNamespace(prefix, BurnCommon.BundleExtensionDataNamespace); + return namespaceManager; + } + public static XmlNamespaceManager GetBurnNamespaceManager(XmlDocument document, string prefix) { var namespaceManager = new XmlNamespaceManager(document.NameTable); @@ -34,6 +54,20 @@ namespace WixToolset.Core.TestPackage return namespaceManager; } + public static XmlDocument LoadBAData(string baFolderPath) + { + var document = new XmlDocument(); + document.Load(Path.Combine(baFolderPath, BurnCommon.BADataFileName)); + return document; + } + + public static XmlDocument LoadBundleExtensionData(string baFolderPath) + { + var document = new XmlDocument(); + document.Load(Path.Combine(baFolderPath, BurnCommon.BundleExtensionDataFileName)); + return document; + } + public static XmlDocument LoadBurnManifest(string baFolderPath) { var document = new XmlDocument(); diff --git a/src/WixToolset.Core.TestPackage/ExtractBAContainerResult.cs b/src/WixToolset.Core.TestPackage/ExtractBAContainerResult.cs index 6d2ea943..63d7bb31 100644 --- a/src/WixToolset.Core.TestPackage/ExtractBAContainerResult.cs +++ b/src/WixToolset.Core.TestPackage/ExtractBAContainerResult.cs @@ -8,6 +8,10 @@ namespace WixToolset.Core.TestPackage public class ExtractBAContainerResult { + public XmlDocument BundleExtensionDataDocument { get; set; } + public XmlNamespaceManager BundleExtensionDataNamespaceManager { get; set; } + public XmlDocument BADataDocument { get; set; } + public XmlNamespaceManager BADataNamespaceManager { get; set; } public XmlDocument ManifestDocument { get; set; } public XmlNamespaceManager ManifestNamespaceManager { get; set; } public bool Success { get; set; } @@ -26,6 +30,34 @@ namespace WixToolset.Core.TestPackage return Path.Combine(extractedBAContainerFolderPath, relativeBAPath); } + public string GetBundleExtensionFilePath(string extractedBAContainerFolderPath, string extensionId) + { + var uxPayloads = this.SelectManifestNodes($"/burn:BurnManifest/burn:UX/burn:Payload[@Id='{extensionId}']"); + var bextPayload = uxPayloads[0]; + var relativeBextPath = bextPayload.Attributes["FilePath"].Value; + return Path.Combine(extractedBAContainerFolderPath, relativeBextPath); + } + + /// + /// + /// + /// elements must have the 'ba' prefix + /// + public XmlNodeList SelectBADataNodes(string xpath) + { + return this.BADataDocument.SelectNodes(xpath, this.BADataNamespaceManager); + } + + /// + /// + /// + /// elements must have the 'be' prefix + /// + public XmlNodeList SelectBundleExtensionDataNodes(string xpath) + { + return this.BundleExtensionDataDocument.SelectNodes(xpath, this.BundleExtensionDataNamespaceManager); + } + /// /// /// -- cgit v1.2.3-55-g6feb