aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/WixToolsetTest.Heat/HeatRunner.cs92
-rw-r--r--src/test/WixToolsetTest.Heat/PayloadTests.cs66
-rw-r--r--src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msubin0 -> 309544 bytes
-rw-r--r--src/test/WixToolsetTest.Heat/TestData/.Data/burn.exebin0 -> 463360 bytes
-rw-r--r--src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedExePackagePayload.wxs6
-rw-r--r--src/test/WixToolsetTest.Heat/TestData/Payload/HarvestedMsuPackagePayload.wxs6
-rw-r--r--src/test/WixToolsetTest.Heat/WixToolsetTest.Heat.csproj28
7 files changed, 198 insertions, 0 deletions
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 @@
1// 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.
2
3namespace WixToolsetTest.Harvesters
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Threading;
8 using System.Threading.Tasks;
9 using WixToolset.Core;
10 using WixToolset.Core.Burn;
11 using WixToolset.Core.TestPackage;
12 using WixToolset.Data;
13 using WixToolset.Extensibility.Data;
14 using WixToolset.Extensibility.Services;
15 using WixToolset.Harvesters;
16
17 /// <summary>
18 /// Utility class to emulate heat.exe.
19 /// </summary>
20 public static class HeatRunner
21 {
22 /// <summary>
23 /// Emulates calling heat.exe.
24 /// </summary>
25 /// <param name="args"></param>
26 /// <param name="messages"></param>
27 /// <param name="warningsAsErrors"></param>
28 /// <returns></returns>
29 public static int Execute(string[] args, out List<Message> messages, bool warningsAsErrors = true)
30 {
31 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
32 var task = Execute(args, serviceProvider, out messages, warningsAsErrors: warningsAsErrors);
33 return task.Result;
34 }
35
36 /// <summary>
37 /// Emulates calling wix.exe with standard backends.
38 /// This overload always treats warnings as errors.
39 /// </summary>
40 /// <param name="args"></param>
41 /// <returns></returns>
42 public static WixRunnerResult Execute(params string[] args)
43 {
44 return Execute(true, args);
45 }
46
47 /// <summary>
48 /// Emulates calling wix.exe with standard backends.
49 /// </summary>
50 /// <param name="warningsAsErrors"></param>
51 /// <param name="args"></param>
52 /// <returns></returns>
53 public static WixRunnerResult Execute(bool warningsAsErrors, params string[] args)
54 {
55 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
56 var exitCode = Execute(args, serviceProvider, out var messages, warningsAsErrors: warningsAsErrors);
57 return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() };
58 }
59
60 /// <summary>
61 /// Emulates calling wix.exe with standard backends.
62 /// </summary>
63 /// <param name="args"></param>
64 /// <param name="coreProvider"></param>
65 /// <param name="messages"></param>
66 /// <param name="warningsAsErrors"></param>
67 /// <returns></returns>
68 public static Task<int> Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List<Message> messages, bool warningsAsErrors = true)
69 {
70 coreProvider.AddBundleBackend();
71
72 var listener = new TestMessageListener();
73
74 messages = listener.Messages;
75
76 var messaging = coreProvider.GetService<IMessaging>();
77 messaging.SetListener(listener);
78
79 if (warningsAsErrors)
80 {
81 messaging.WarningsAsError = true;
82 }
83
84 var arguments = coreProvider.GetService<ICommandLineArguments>();
85 arguments.Populate(args);
86
87 var commandLine = HeatCommandLineFactory.CreateCommandLine(coreProvider);
88 var command = commandLine.ParseStandardCommandLine(arguments);
89 return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1);
90 }
91 }
92}
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 @@
1// 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.
2
3namespace WixToolsetTest.Harvesters
4{
5 using System;
6 using System.IO;
7 using WixBuildTools.TestSupport;
8 using Xunit;
9
10 public class PayloadTests
11 {
12 [Fact]
13 public void CanHarvestExePackagePayload()
14 {
15 var folder = TestData.Get(@"TestData");
16
17 using (var fs = new DisposableFileSystem())
18 {
19 var baseFolder = fs.GetFolder();
20 var outputFilePath = Path.Combine(baseFolder, "test.wxs");
21
22 var result = HeatRunner.Execute(new[]
23 {
24 "exepackagepayload",
25 Path.Combine(folder, ".Data", "burn.exe"),
26 "-o", outputFilePath,
27 });
28
29 result.AssertSuccess();
30
31 Assert.True(File.Exists(outputFilePath));
32
33 var expected = File.ReadAllText(Path.Combine(folder, "Payload", "HarvestedExePackagePayload.wxs")).Replace("\r\n", "\n");
34 var actual = File.ReadAllText(outputFilePath).Replace("\r\n", "\n");
35 Assert.Equal(expected, actual);
36 }
37 }
38
39 [Fact]
40 public void CanHarvestMsuPackagePayload()
41 {
42 var folder = TestData.Get(@"TestData");
43
44 using (var fs = new DisposableFileSystem())
45 {
46 var baseFolder = fs.GetFolder();
47 var outputFilePath = Path.Combine(baseFolder, "test.wxs");
48
49 var result = HeatRunner.Execute(new[]
50 {
51 "msupackagepayload",
52 Path.Combine(folder, ".Data", "Windows8.1-KB2937592-x86.msu"),
53 "-o", outputFilePath,
54 });
55
56 result.AssertSuccess();
57
58 Assert.True(File.Exists(outputFilePath));
59
60 var expected = File.ReadAllText(Path.Combine(folder, "Payload", "HarvestedMsuPackagePayload.wxs")).Replace("\r\n", "\n");
61 var actual = File.ReadAllText(outputFilePath).Replace("\r\n", "\n");
62 Assert.Equal(expected, actual);
63 }
64 }
65 }
66}
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
--- /dev/null
+++ b/src/test/WixToolsetTest.Heat/TestData/.Data/Windows8.1-KB2937592-x86.msu
Binary files 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
--- /dev/null
+++ b/src/test/WixToolsetTest.Heat/TestData/.Data/burn.exe
Binary files 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 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment>
4 <ExePackagePayload Description="WiX Toolset Bootstrapper" Hash="F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E" ProductName="Windows Installer XML Toolset" Size="463360" Version="3.14.1703.0" />
5 </Fragment>
6</Wix> \ 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 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment>
4 <MsuPackagePayload Hash="904ADEA6AB675ACE16483138BF3F5850FD56ACB6E3A13AFA7263ED49C68CCE6CF84D6AAD6F99AAF175A95EE1A56C787C5AD968019056490B1073E7DBB7B9B7BE" Size="309544" />
5 </Fragment>
6</Wix> \ 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 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- 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. -->
3
4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <IsPackable>false</IsPackable>
8 </PropertyGroup>
9
10 <ItemGroup>
11 <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
12 </ItemGroup>
13
14 <ItemGroup>
15 <ProjectReference Include="..\..\heat\heat.csproj" />
16 </ItemGroup>
17
18 <ItemGroup>
19 <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
20 <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" />
25 <PackageReference Include="xunit" Version="2.4.1" />
26 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
27 </ItemGroup>
28</Project>