From 35606d2cd04a7b1bec1d669f9619501dff2bf9dc Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Thu, 22 Apr 2021 17:38:36 -0700 Subject: Simplify heat by creating a single executable --- src/test/WixToolsetTest.Heat/HeatRunner.cs | 92 +++++++++++++++++++++ src/test/WixToolsetTest.Heat/PayloadTests.cs | 66 +++++++++++++++ .../TestData/.Data/Windows8.1-KB2937592-x86.msu | Bin 0 -> 309544 bytes .../WixToolsetTest.Heat/TestData/.Data/burn.exe | Bin 0 -> 463360 bytes .../Payload/HarvestedExePackagePayload.wxs | 6 ++ .../Payload/HarvestedMsuPackagePayload.wxs | 6 ++ .../WixToolsetTest.Heat/WixToolsetTest.Heat.csproj | 28 +++++++ 7 files changed, 198 insertions(+) create mode 100644 src/test/WixToolsetTest.Heat/HeatRunner.cs create mode 100644 src/test/WixToolsetTest.Heat/PayloadTests.cs create mode 100644 src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msu create mode 100644 src/test/WixToolsetTest.Heat/TestData/.Data/burn.exe create mode 100644 src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedExePackagePayload.wxs create mode 100644 src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedMsuPackagePayload.wxs create mode 100644 src/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj (limited to 'src/test') diff --git a/src/test/WixToolsetTest.Heat/HeatRunner.cs b/src/test/WixToolsetTest.Heat/HeatRunner.cs new file mode 100644 index 00000000..287698a9 --- /dev/null +++ b/src/test/WixToolsetTest.Heat/HeatRunner.cs @@ -0,0 +1,92 @@ +// 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.Harvesters +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using WixToolset.Core; + using WixToolset.Core.Burn; + using WixToolset.Core.TestPackage; + using WixToolset.Data; + using WixToolset.Extensibility.Data; + using WixToolset.Extensibility.Services; + using WixToolset.Harvesters; + + /// + /// Utility class to emulate heat.exe. + /// + public static class HeatRunner + { + /// + /// Emulates calling heat.exe. + /// + /// + /// + /// + /// + public static int Execute(string[] args, out List messages, bool warningsAsErrors = true) + { + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); + var task = Execute(args, serviceProvider, out messages, warningsAsErrors: warningsAsErrors); + return task.Result; + } + + /// + /// Emulates calling wix.exe with standard backends. + /// This overload always treats warnings as errors. + /// + /// + /// + public static WixRunnerResult Execute(params string[] args) + { + return Execute(true, args); + } + + /// + /// Emulates calling wix.exe with standard backends. + /// + /// + /// + /// + public static WixRunnerResult Execute(bool warningsAsErrors, params string[] args) + { + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); + var exitCode = Execute(args, serviceProvider, out var messages, warningsAsErrors: warningsAsErrors); + return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }; + } + + /// + /// Emulates calling wix.exe with standard backends. + /// + /// + /// + /// + /// + /// + public static Task Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List messages, bool warningsAsErrors = true) + { + coreProvider.AddBundleBackend(); + + var listener = new TestMessageListener(); + + messages = listener.Messages; + + var messaging = coreProvider.GetService(); + messaging.SetListener(listener); + + if (warningsAsErrors) + { + messaging.WarningsAsError = true; + } + + var arguments = coreProvider.GetService(); + arguments.Populate(args); + + var commandLine = HeatCommandLineFactory.CreateCommandLine(coreProvider); + var command = commandLine.ParseStandardCommandLine(arguments); + return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1); + } + } +} diff --git a/src/test/WixToolsetTest.Heat/PayloadTests.cs b/src/test/WixToolsetTest.Heat/PayloadTests.cs new file mode 100644 index 00000000..8072f50d --- /dev/null +++ b/src/test/WixToolsetTest.Heat/PayloadTests.cs @@ -0,0 +1,66 @@ +// 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.Harvesters +{ + using System; + using System.IO; + using WixBuildTools.TestSupport; + using Xunit; + + public class PayloadTests + { + [Fact] + public void CanHarvestExePackagePayload() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var outputFilePath = Path.Combine(baseFolder, "test.wxs"); + + var result = HeatRunner.Execute(new[] + { + "exepackagepayload", + Path.Combine(folder, ".Data", "burn.exe"), + "-o", outputFilePath, + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(outputFilePath)); + + var expected = File.ReadAllText(Path.Combine(folder, "Payload", "HarvestedExePackagePayload.wxs")).Replace("\r\n", "\n"); + var actual = File.ReadAllText(outputFilePath).Replace("\r\n", "\n"); + Assert.Equal(expected, actual); + } + } + + [Fact] + public void CanHarvestMsuPackagePayload() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var outputFilePath = Path.Combine(baseFolder, "test.wxs"); + + var result = HeatRunner.Execute(new[] + { + "msupackagepayload", + Path.Combine(folder, ".Data", "Windows8.1-KB2937592-x86.msu"), + "-o", outputFilePath, + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(outputFilePath)); + + var expected = File.ReadAllText(Path.Combine(folder, "Payload", "HarvestedMsuPackagePayload.wxs")).Replace("\r\n", "\n"); + var actual = File.ReadAllText(outputFilePath).Replace("\r\n", "\n"); + Assert.Equal(expected, actual); + } + } + } +} diff --git a/src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msu b/src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msu new file mode 100644 index 00000000..c39f53b0 Binary files /dev/null and b/src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msu differ diff --git a/src/test/WixToolsetTest.Heat/TestData/.Data/burn.exe b/src/test/WixToolsetTest.Heat/TestData/.Data/burn.exe new file mode 100644 index 00000000..2a4f423f Binary files /dev/null and b/src/test/WixToolsetTest.Heat/TestData/.Data/burn.exe differ diff --git a/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedExePackagePayload.wxs b/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedExePackagePayload.wxs new file mode 100644 index 00000000..40100f22 --- /dev/null +++ b/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedExePackagePayload.wxs @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedMsuPackagePayload.wxs b/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedMsuPackagePayload.wxs new file mode 100644 index 00000000..f203fe27 --- /dev/null +++ b/src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedMsuPackagePayload.wxs @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj b/src/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj new file mode 100644 index 00000000..4af6749c --- /dev/null +++ b/src/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj @@ -0,0 +1,28 @@ + + + + + + netcoreapp3.1 + false + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3-55-g6feb