summaryrefslogtreecommitdiff
path: root/src/burn/test/BurnUnitTest/VariantTest.cpp
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:06:54 -0700
committerRob Mensching <rob@firegiant.com>2021-04-29 16:36:06 -0700
commitaf10c45d7b3a44af0b461a557847fe03263dcc10 (patch)
tree6a5c1532304782c36ffe4200b38f3afb76789a43 /src/burn/test/BurnUnitTest/VariantTest.cpp
parent9c2aed97299fb96aeee3f1471ce40225437aaecf (diff)
downloadwix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.gz
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.tar.bz2
wix-af10c45d7b3a44af0b461a557847fe03263dcc10.zip
Move burn into burn
Diffstat (limited to 'src/burn/test/BurnUnitTest/VariantTest.cpp')
-rw-r--r--src/burn/test/BurnUnitTest/VariantTest.cpp221
1 files changed, 221 insertions, 0 deletions
diff --git a/src/burn/test/BurnUnitTest/VariantTest.cpp b/src/burn/test/BurnUnitTest/VariantTest.cpp
new file mode 100644
index 00000000..43899a2b
--- /dev/null
+++ b/src/burn/test/BurnUnitTest/VariantTest.cpp
@@ -0,0 +1,221 @@
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[10];
29 BURN_VARIANT actualVariants[10];
30 for (DWORD i = 0; i < 10; 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, L"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, L"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 InitFormattedValue(expectedVariants + 8, L"VAL9", FALSE, L"PROP9", actualVariants + 8);
47 InitFormattedValue(expectedVariants + 9, L"VAL10", TRUE, L"PROP10", actualVariants + 9);
48
49 VerifyNumericValue(expectedVariants + 0, actualVariants + 0);
50 VerifyStringValue(expectedVariants + 1, actualVariants + 1);
51 VerifyVersionValue(expectedVariants + 2, actualVariants + 2);
52 VerifyNoneValue(expectedVariants + 3, actualVariants + 3);
53 VerifyNoneValue(expectedVariants + 4, actualVariants + 4);
54 VerifyVersionValue(expectedVariants + 5, actualVariants + 5);
55 VerifyStringValue(expectedVariants + 6, actualVariants + 6);
56 VerifyNumericValue(expectedVariants + 7, actualVariants + 7);
57 VerifyFormattedValue(expectedVariants + 8, actualVariants + 8);
58 VerifyFormattedValue(expectedVariants + 9, actualVariants + 9);
59 }
60 finally
61 {
62 for (DWORD i = 0; i < 10; i++)
63 {
64 BVariantUninitialize(expectedVariants + i);
65 BVariantUninitialize(actualVariants + i);
66 }
67 }
68 }
69
70 private:
71 void InitFormattedValue(BURN_VARIANT* pValue, LPWSTR wzValue, BOOL /*fHidden*/, LPCWSTR wz, BURN_VARIANT* pActualValue)
72 {
73 HRESULT hr = S_OK;
74 pValue->Type = BURN_VARIANT_TYPE_FORMATTED;
75
76 hr = StrAllocString(&pValue->sczValue, wzValue, 0);
77 NativeAssert::Succeeded(hr, "Failed to alloc string: {0}", wzValue);
78
79 hr = BVariantCopy(pValue, pActualValue);
80 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
81 }
82
83 void InitNoneValue(BURN_VARIANT* pValue, BOOL /*fHidden*/, LPCWSTR wz, BURN_VARIANT* pActualValue)
84 {
85 HRESULT hr = S_OK;
86 pValue->Type = BURN_VARIANT_TYPE_NONE;
87
88 hr = BVariantCopy(pValue, pActualValue);
89 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
90 }
91
92 void InitNumericValue(BURN_VARIANT* pValue, LONGLONG llValue, BOOL /*fHidden*/, LPCWSTR wz, BURN_VARIANT* pActualValue)
93 {
94 HRESULT hr = S_OK;
95 pValue->Type = BURN_VARIANT_TYPE_NUMERIC;
96 pValue->llValue = llValue;
97
98 hr = BVariantCopy(pValue, pActualValue);
99 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
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
114 void InitVersionValue(BURN_VARIANT* pValue, LPCWSTR wzValue, BOOL /*fHidden*/, LPCWSTR wz, BURN_VARIANT* pActualValue)
115 {
116 HRESULT hr = S_OK;
117 VERUTIL_VERSION* pVersion = NULL;
118
119 try
120 {
121 hr = VerParseVersion(wzValue, 0, FALSE, &pVersion);
122 NativeAssert::Succeeded(hr, "Failed to parse version {0}", wzValue);
123
124 pValue->Type = BURN_VARIANT_TYPE_VERSION;
125 pValue->pValue = pVersion;
126 pVersion = NULL;
127
128 hr = BVariantCopy(pValue, pActualValue);
129 NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz);
130 }
131 finally
132 {
133 ReleaseVerutilVersion(pVersion);
134 }
135 }
136
137 void VerifyFormattedValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
138 {
139 HRESULT hr = S_OK;
140 LPWSTR sczValue = NULL;
141 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_FORMATTED, pExpectedValue->Type);
142 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_FORMATTED, pActualValue->Type);
143
144 try
145 {
146 hr = BVariantGetString(pActualValue, &sczValue);
147 NativeAssert::Succeeded(hr, "Failed to get string value");
148
149 NativeAssert::StringEqual(pExpectedValue->sczValue, sczValue);
150 }
151 finally
152 {
153 ReleaseStr(sczValue);
154 }
155 }
156
157 void VerifyNumericValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
158 {
159 HRESULT hr = S_OK;
160 LONGLONG llValue = 0;
161 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pExpectedValue->Type);
162 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pActualValue->Type);
163
164 hr = BVariantGetNumeric(pActualValue, &llValue);
165 NativeAssert::Succeeded(hr, "Failed to get numeric value");
166
167 NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, llValue);
168 }
169
170 void VerifyNoneValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
171 {
172 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pExpectedValue->Type);
173 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pActualValue->Type);
174 NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, pActualValue->llValue);
175 }
176
177 void VerifyStringValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
178 {
179 HRESULT hr = S_OK;
180 LPWSTR sczValue = NULL;
181 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pExpectedValue->Type);
182 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pActualValue->Type);
183
184 try
185 {
186 hr = BVariantGetString(pActualValue, &sczValue);
187 NativeAssert::Succeeded(hr, "Failed to get string value");
188
189 NativeAssert::StringEqual(pExpectedValue->sczValue, sczValue);
190 }
191 finally
192 {
193 ReleaseStr(sczValue);
194 }
195 }
196
197 void VerifyVersionValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue)
198 {
199 HRESULT hr = S_OK;
200 VERUTIL_VERSION* pValue = NULL;
201 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pExpectedValue->Type);
202 NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pActualValue->Type);
203
204 try
205 {
206 hr = BVariantGetVersion(pActualValue, &pValue);
207 NativeAssert::Succeeded(hr, "Failed to get version value");
208
209 NativeAssert::StringEqual(pExpectedValue->pValue->sczVersion, pActualValue->pValue->sczVersion);
210 }
211 finally
212 {
213 ReleaseVerutilVersion(pValue);
214 }
215 }
216 };
217}
218}
219}
220}
221}