aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-07-17 21:28:38 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-07-17 21:52:36 +1000
commite845e7c68ae792ab2ccd4ca2f054700dde624375 (patch)
tree27aa4807d2e397bc977a6fcf8231f7a5fe569084
parented36894d8b4da2f28972811f39d5e3685964e413 (diff)
downloadwix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.gz
wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.bz2
wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.zip
Add VariantTest.
-rw-r--r--src/test/BurnUnitTest/BurnTestFixture.h4
-rw-r--r--src/test/BurnUnitTest/BurnUnitTest.vcxproj1
-rw-r--r--src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters11
-rw-r--r--src/test/BurnUnitTest/VariantTest.cpp197
4 files changed, 209 insertions, 4 deletions
diff --git a/src/test/BurnUnitTest/BurnTestFixture.h b/src/test/BurnUnitTest/BurnTestFixture.h
index f158c192..6b041641 100644
--- a/src/test/BurnUnitTest/BurnTestFixture.h
+++ b/src/test/BurnUnitTest/BurnTestFixture.h
@@ -26,6 +26,9 @@ namespace Bootstrapper
26 hr = RegInitialize(); 26 hr = RegInitialize();
27 TestThrowOnFailure(hr, L"Failed to initialize Regutil."); 27 TestThrowOnFailure(hr, L"Failed to initialize Regutil.");
28 28
29 hr = CrypInitialize();
30 TestThrowOnFailure(hr, L"Failed to initialize Cryputil.");
31
29 PlatformInitialize(); 32 PlatformInitialize();
30 33
31 this->testDirectory = WixBuildTools::TestSupport::TestData::Get(); 34 this->testDirectory = WixBuildTools::TestSupport::TestData::Get();
@@ -38,6 +41,7 @@ namespace Bootstrapper
38 41
39 ~BurnTestFixture() 42 ~BurnTestFixture()
40 { 43 {
44 CrypUninitialize();
41 XmlUninitialize(); 45 XmlUninitialize();
42 RegUninitialize(); 46 RegUninitialize();
43 LogUninitialize(FALSE); 47 LogUninitialize(FALSE);
diff --git a/src/test/BurnUnitTest/BurnUnitTest.vcxproj b/src/test/BurnUnitTest/BurnUnitTest.vcxproj
index 93b3e562..3f3c7b4f 100644
--- a/src/test/BurnUnitTest/BurnUnitTest.vcxproj
+++ b/src/test/BurnUnitTest/BurnUnitTest.vcxproj
@@ -46,6 +46,7 @@
46 <ClCompile Include="SearchTest.cpp" /> 46 <ClCompile Include="SearchTest.cpp" />
47 <ClCompile Include="VariableHelpers.cpp" /> 47 <ClCompile Include="VariableHelpers.cpp" />
48 <ClCompile Include="VariableTest.cpp" /> 48 <ClCompile Include="VariableTest.cpp" />
49 <ClCompile Include="VariantTest.cpp" />
49 </ItemGroup> 50 </ItemGroup>
50 <ItemGroup> 51 <ItemGroup>
51 <ClInclude Include="BurnTestException.h" /> 52 <ClInclude Include="BurnTestException.h" />
diff --git a/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters b/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters
index bee5d15e..14261ba0 100644
--- a/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters
+++ b/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters
@@ -18,6 +18,9 @@
18 <ClCompile Include="AssemblyInfo.cpp"> 18 <ClCompile Include="AssemblyInfo.cpp">
19 <Filter>Source Files</Filter> 19 <Filter>Source Files</Filter>
20 </ClCompile> 20 </ClCompile>
21 <ClCompile Include="CacheTest.cpp">
22 <Filter>Source Files</Filter>
23 </ClCompile>
21 <ClCompile Include="ElevationTest.cpp"> 24 <ClCompile Include="ElevationTest.cpp">
22 <Filter>Source Files</Filter> 25 <Filter>Source Files</Filter>
23 </ClCompile> 26 </ClCompile>
@@ -27,6 +30,9 @@
27 <ClCompile Include="ManifestTest.cpp"> 30 <ClCompile Include="ManifestTest.cpp">
28 <Filter>Source Files</Filter> 31 <Filter>Source Files</Filter>
29 </ClCompile> 32 </ClCompile>
33 <ClCompile Include="precomp.cpp">
34 <Filter>Source Files</Filter>
35 </ClCompile>
30 <ClCompile Include="RegistrationTest.cpp"> 36 <ClCompile Include="RegistrationTest.cpp">
31 <Filter>Source Files</Filter> 37 <Filter>Source Files</Filter>
32 </ClCompile> 38 </ClCompile>
@@ -39,10 +45,7 @@
39 <ClCompile Include="VariableTest.cpp"> 45 <ClCompile Include="VariableTest.cpp">
40 <Filter>Source Files</Filter> 46 <Filter>Source Files</Filter>
41 </ClCompile> 47 </ClCompile>
42 <ClCompile Include="CacheTest.cpp"> 48 <ClCompile Include="VariantTest.cpp">
43 <Filter>Source Files</Filter>
44 </ClCompile>
45 <ClCompile Include="$(WixRoot)src\common\precomp.cpp">
46 <Filter>Source Files</Filter> 49 <Filter>Source Files</Filter>
47 </ClCompile> 50 </ClCompile>
48 </ItemGroup> 51 </ItemGroup>
diff --git a/src/test/BurnUnitTest/VariantTest.cpp b/src/test/BurnUnitTest/VariantTest.cpp
new file mode 100644
index 00000000..dd679f08
--- /dev/null
+++ b/src/test/BurnUnitTest/VariantTest.cpp
@@ -0,0 +1,197 @@
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
3#include "precomp.h"
4
5namespace Microsoft
6{
7namespace Tools
8{
9namespace WindowsInstallerXml
10{
11namespace Test
12{
13namespace Bootstrapper
14{
15 using namespace System;
16 using namespace Xunit;
17
18 public ref class VariantTest : BurnUnitTest
19 {
20 public:
21 VariantTest(BurnTestFixture^ fixture) : BurnUnitTest(fixture)
22 {
23 }
24
25 [Fact]
26 void VariantBasicTest()
27 {
28 BURN_VARIANT expectedVariants[8];
29 BURN_VARIANT actualVariants[8];
30 for (DWORD i = 0; i < 8; i++)
31 {
32 BVariantUninitialize(expectedVariants + i);
33 BVariantUninitialize(actualVariants + i);
34 }
35
36 try
37 {
38 InitNumericValue(expectedVariants + 0, 2, FALSE, L"PROP1", actualVariants + 0);
39 InitStringValue(expectedVariants + 1, L"VAL2", FALSE, L"PROP2", actualVariants + 1);
40 InitVersionValue(expectedVariants + 2, MAKEQWORDVERSION(1, 1, 0, 0), FALSE, L"PROP3", actualVariants + 2);
41 InitNoneValue(expectedVariants + 3, FALSE, L"PROP4", actualVariants + 3);
42 InitNoneValue(expectedVariants + 4, TRUE, L"PROP5", actualVariants + 4);
43 InitVersionValue(expectedVariants + 5, MAKEQWORDVERSION(1, 1, 1, 0), TRUE, L"PROP6", actualVariants + 5);
44 InitStringValue(expectedVariants + 6, L"7", TRUE, L"PROP7", actualVariants + 6);
45 InitNumericValue(expectedVariants + 7, 11, TRUE, L"PROP8", actualVariants + 7);
46
47 VerifyNumericValue(expectedVariants + 0, actualVariants + 0);
48 VerifyStringValue(expectedVariants + 1, actualVariants + 1);
49 VerifyVersionValue(expectedVariants + 2, actualVariants + 2);
50 VerifyNoneValue(expectedVariants + 3, actualVariants + 3);
51 VerifyNoneValue(expectedVariants + 4, actualVariants + 4);
52 VerifyVersionValue(expectedVariants + 5, actualVariants + 5);
53 VerifyStringValue(expectedVariants + 6, actualVariants + 6);
54 VerifyNumericValue(expectedVariants + 7, actualVariants + 7);
55 }
56 finally
57 {
58 for (DWORD i = 0; i < 8; i++)
59 {
60 BVariantUninitialize(expectedVariants + i);
61 BVariantUninitialize(actualVariants + i);
62 }
63 }
64 }
65
66 private:
67 void InitNoneValue(BURN_VARIANT* pValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue)
68 {
69 HRESULT hr = S_OK;
70 pValue->Type = BURN_VARIANT_TYPE_NONE;
71
72 hr = BVariantCopy(pValue, pActualValue);
73 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
74
75 if (fHidden)
76 {
77 hr = BVariantSetEncryption(pActualValue, TRUE);
78 NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz);
79
80 NativeAssert::True(pActualValue->fEncryptValue);
81 }
82 }
83
84 void InitNumericValue(BURN_VARIANT* pValue, LONGLONG llValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue)
85 {
86 HRESULT hr = S_OK;
87 pValue->Type = BURN_VARIANT_TYPE_NUMERIC;
88 pValue->llValue = llValue;
89
90 hr = BVariantCopy(pValue, pActualValue);
91 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
92
93 if (fHidden)
94 {
95 hr = BVariantSetEncryption(pActualValue, TRUE);
96 NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz);
97
98 NativeAssert::True(pActualValue->fEncryptValue);
99 }
100 }
101
102 void InitStringValue(BURN_VARIANT* pValue, LPWSTR wzValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue)
103 {
104 HRESULT hr = S_OK;
105 pValue->Type = BURN_VARIANT_TYPE_STRING;
106
107 hr = StrAllocString(&pValue->sczValue, wzValue, 0);
108 NativeAssert::Succeeded(hr, "Failed to alloc string: {0}", wzValue);
109
110 hr = BVariantCopy(pValue, pActualValue);
111 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
112
113 if (fHidden)
114 {
115 hr = BVariantSetEncryption(pActualValue, TRUE);
116 NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz);
117
118 NativeAssert::True(pActualValue->fEncryptValue);
119 }
120 }
121
122 void InitVersionValue(BURN_VARIANT* pValue, DWORD64 qwValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue)
123 {
124 HRESULT hr = S_OK;
125 pValue->Type = BURN_VARIANT_TYPE_VERSION;
126 pValue->qwValue = qwValue;
127
128 hr = BVariantCopy(pValue, pActualValue);
129 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
130
131 if (fHidden)
132 {
133 hr = BVariantSetEncryption(pActualValue, TRUE);
134 NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz);
135
136 NativeAssert::True(pActualValue->fEncryptValue);
137 }
138 }
139
140 void VerifyNumericValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
141 {
142 HRESULT hr = S_OK;
143 LONGLONG llValue = 0;
144 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pExpectedValue->Type);
145 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pActualValue->Type);
146
147 hr = BVariantGetNumeric(pActualValue, &llValue);
148 NativeAssert::Succeeded(hr, "Failed to get numeric value");
149
150 NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, llValue);
151 }
152
153 void VerifyNoneValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
154 {
155 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pExpectedValue->Type);
156 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pActualValue->Type);
157 NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, pActualValue->llValue);
158 }
159
160 void VerifyStringValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
161 {
162 HRESULT hr = S_OK;
163 LPWSTR sczValue = NULL;
164 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pExpectedValue->Type);
165 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pActualValue->Type);
166
167 try
168 {
169 hr = BVariantGetString(pActualValue, &sczValue);
170 NativeAssert::Succeeded(hr, "Failed to get numeric value");
171
172 NativeAssert::StringEqual(pExpectedValue->sczValue, sczValue);
173 }
174 finally
175 {
176 ReleaseStr(sczValue);
177 }
178 }
179
180 void VerifyVersionValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
181 {
182 HRESULT hr = S_OK;
183 DWORD64 qwValue = 0;
184 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pExpectedValue->Type);
185 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pActualValue->Type);
186
187 hr = BVariantGetVersion(pActualValue, &qwValue);
188 NativeAssert::Succeeded(hr, "Failed to get numeric value");
189
190 NativeAssert::Equal<DWORD64>(pExpectedValue->qwValue, qwValue);
191 }
192 };
193}
194}
195}
196}
197}