aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2019-12-22 10:31:33 +1100
committerSean Hall <r.sean.hall@gmail.com>2019-12-22 13:19:29 +1000
commit24379873f589cff33965f1104041f61c0c4503e0 (patch)
treeb50fb0270d2de706cb6f3a4dea0af77ce2cae9e1 /src/test
parentf3c383c2412e376353d64a8b744184fa1cee1c6e (diff)
downloadwix-24379873f589cff33965f1104041f61c0c4503e0.tar.gz
wix-24379873f589cff33965f1104041f61c0c4503e0.tar.bz2
wix-24379873f589cff33965f1104041f61c0c4503e0.zip
Move the responsibility of wrapping the binary interfaces from mbahost to the new mbanative dll of WixToolset.Mba.Core.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs113
-rw-r--r--src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj29
-rw-r--r--src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.v3.ncrunchproject5
3 files changed, 147 insertions, 0 deletions
diff --git a/src/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs b/src/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs
new file mode 100644
index 00000000..12483ddf
--- /dev/null
+++ b/src/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs
@@ -0,0 +1,113 @@
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.Util
4{
5 using System;
6 using System.Runtime.InteropServices;
7 using WixToolset.Mba.Core;
8 using Xunit;
9
10 public class BaseBootstrapperApplicationFactoryFixture
11 {
12 [Fact]
13 public void CanCreateBA()
14 {
15 var command = new TestCommand
16 {
17 action = LaunchAction.Install,
18 cbSize = Marshal.SizeOf(typeof(TestCommand)),
19 display = Display.Full,
20 wzCommandLine = "this \"is a\" test",
21 };
22 var pCommand = Marshal.AllocHGlobal(command.cbSize);
23 try
24 {
25 Marshal.StructureToPtr(command, pCommand, false);
26 var createArgs = new BootstrapperCreateArgs(0, IntPtr.Zero, IntPtr.Zero, pCommand);
27 var pArgs = Marshal.AllocHGlobal(createArgs.cbSize);
28 try
29 {
30 Marshal.StructureToPtr(createArgs, pArgs, false);
31 var createResults = new TestCreateResults
32 {
33 cbSize = Marshal.SizeOf<TestCreateResults>(),
34 };
35 var pResults = Marshal.AllocHGlobal(createResults.cbSize);
36 try
37 {
38 var baFactory = new TestBAFactory();
39 baFactory.Create(pArgs, pResults);
40
41 createResults = Marshal.PtrToStructure<TestCreateResults>(pResults);
42 Assert.Equal(baFactory.BA, createResults.pBA);
43 Assert.Equal(baFactory.BA.Command.Action, command.action);
44 Assert.Equal(baFactory.BA.Command.Display, command.display);
45 Assert.Equal(baFactory.BA.Command.CommandLineArgs, new string[] { "this", "is a", "test" });
46 }
47 finally
48 {
49 Marshal.FreeHGlobal(pResults);
50 }
51 }
52 finally
53 {
54 Marshal.FreeHGlobal(pArgs);
55 }
56 }
57 finally
58 {
59 Marshal.FreeHGlobal(pCommand);
60 }
61 }
62
63 internal class TestBAFactory : BaseBootstrapperApplicationFactory
64 {
65 public TestBA BA { get; private set; }
66
67 protected override IBootstrapperApplication Create(IEngine engine, IBootstrapperCommand bootstrapperCommand)
68 {
69 this.BA = new TestBA(engine, bootstrapperCommand);
70 return this.BA;
71 }
72 }
73
74 internal class TestBA : BootstrapperApplication
75 {
76 public IBootstrapperCommand Command { get; }
77
78 public TestBA(IEngine engine, IBootstrapperCommand command)
79 : base(engine)
80 {
81 this.Command = command;
82 }
83
84 protected override void Run()
85 {
86 }
87 }
88
89 [StructLayout(LayoutKind.Sequential)]
90 public struct TestCommand
91 {
92 public int cbSize;
93 public LaunchAction action;
94 public Display display;
95 public Restart restart;
96 [MarshalAs(UnmanagedType.LPWStr)] public string wzCommandLine;
97 public int nCmdShow;
98 public ResumeType resume;
99 public IntPtr hwndSplashScreen;
100 public RelationType relation;
101 [MarshalAs(UnmanagedType.Bool)] public bool passthrough;
102 [MarshalAs(UnmanagedType.LPWStr)] public string wzLayoutDirectory;
103 }
104
105 [StructLayout(LayoutKind.Sequential)]
106 public struct TestCreateResults
107 {
108 public int cbSize;
109 public IntPtr pBAProc;
110 [MarshalAs(UnmanagedType.Interface)] public IBootstrapperApplication pBA;
111 }
112 }
113}
diff --git a/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj b/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj
new file mode 100644
index 00000000..d401d877
--- /dev/null
+++ b/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj
@@ -0,0 +1,29 @@
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>netcoreapp2.1</TargetFramework>
7 <IsPackable>false</IsPackable>
8 <Platforms>AnyCPU;x86;x64</Platforms>
9 </PropertyGroup>
10
11 <PropertyGroup>
12 <NoWarn>NU1701</NoWarn>
13 </PropertyGroup>
14
15 <ItemGroup>
16 <ProjectReference Include="..\..\mbanative\mbanative.vcxproj">
17 <Project>{665E0441-17F9-4105-B202-EDF274657F6E}</Project>
18 <OutputItemType>Content</OutputItemType>
19 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
20 </ProjectReference>
21 <ProjectReference Include="..\..\WixToolset.Mba.Core\WixToolset.Mba.Core.csproj" />
22 </ItemGroup>
23
24 <ItemGroup>
25 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
26 <PackageReference Include="xunit" Version="2.4.1" />
27 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
28 </ItemGroup>
29</Project>
diff --git a/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.v3.ncrunchproject b/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.v3.ncrunchproject
new file mode 100644
index 00000000..7b5b2139
--- /dev/null
+++ b/src/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.v3.ncrunchproject
@@ -0,0 +1,5 @@
1<ProjectConfiguration>
2 <Settings>
3 <CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
4 </Settings>
5</ProjectConfiguration> \ No newline at end of file