diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-07-17 21:28:38 +1000 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-07-17 21:52:36 +1000 |
commit | e845e7c68ae792ab2ccd4ca2f054700dde624375 (patch) | |
tree | 27aa4807d2e397bc977a6fcf8231f7a5fe569084 | |
parent | ed36894d8b4da2f28972811f39d5e3685964e413 (diff) | |
download | wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.gz wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.bz2 wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.zip |
Add VariantTest.
-rw-r--r-- | src/test/BurnUnitTest/BurnTestFixture.h | 4 | ||||
-rw-r--r-- | src/test/BurnUnitTest/BurnUnitTest.vcxproj | 1 | ||||
-rw-r--r-- | src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters | 11 | ||||
-rw-r--r-- | src/test/BurnUnitTest/VariantTest.cpp | 197 |
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 | |||
5 | namespace Microsoft | ||
6 | { | ||
7 | namespace Tools | ||
8 | { | ||
9 | namespace WindowsInstallerXml | ||
10 | { | ||
11 | namespace Test | ||
12 | { | ||
13 | namespace 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 | } | ||