aboutsummaryrefslogtreecommitdiff
path: root/src/test/BurnUnitTest/VariableTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/BurnUnitTest/VariableTest.cpp')
-rw-r--r--src/test/BurnUnitTest/VariableTest.cpp480
1 files changed, 480 insertions, 0 deletions
diff --git a/src/test/BurnUnitTest/VariableTest.cpp b/src/test/BurnUnitTest/VariableTest.cpp
new file mode 100644
index 00000000..3a4caecf
--- /dev/null
+++ b/src/test/BurnUnitTest/VariableTest.cpp
@@ -0,0 +1,480 @@
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#undef GetTempPath
5#undef GetEnvironmentVariable
6
7namespace Microsoft
8{
9namespace Tools
10{
11namespace WindowsInstallerXml
12{
13namespace Test
14{
15namespace Bootstrapper
16{
17 using namespace System;
18 using namespace Xunit;
19
20 public ref class VariableTest : BurnUnitTest
21 {
22 public:
23 [NamedFact]
24 void VariablesBasicTest()
25 {
26 HRESULT hr = S_OK;
27 BURN_VARIABLES variables = { };
28 try
29 {
30 hr = VariableInitialize(&variables);
31 TestThrowOnFailure(hr, L"Failed to initialize variables.");
32
33 // set variables
34 VariableSetStringHelper(&variables, L"PROP1", L"VAL1");
35 VariableSetNumericHelper(&variables, L"PROP2", 2);
36 VariableSetStringHelper(&variables, L"PROP5", L"VAL5");
37 VariableSetStringHelper(&variables, L"PROP3", L"VAL3");
38 VariableSetStringHelper(&variables, L"PROP4", L"VAL4");
39 VariableSetStringHelper(&variables, L"PROP6", L"VAL6");
40 VariableSetStringHelper(&variables, L"PROP7", L"7");
41 VariableSetVersionHelper(&variables, L"PROP8", MAKEQWORDVERSION(1,1,0,0));
42
43 // set overwritten variables
44 VariableSetStringHelper(&variables, L"OVERWRITTEN_STRING", L"ORIGINAL");
45 VariableSetNumericHelper(&variables, L"OVERWRITTEN_STRING", 42);
46
47 VariableSetNumericHelper(&variables, L"OVERWRITTEN_NUMBER", 5);
48 VariableSetStringHelper(&variables, L"OVERWRITTEN_NUMBER", L"NEW");
49
50 // get and verify variable values
51 Assert::Equal(gcnew String(L"VAL1"), VariableGetStringHelper(&variables, L"PROP1"));
52 Assert::Equal(2ll, VariableGetNumericHelper(&variables, L"PROP2"));
53 Assert::Equal(gcnew String(L"2"), VariableGetStringHelper(&variables, L"PROP2"));
54 Assert::Equal(gcnew String(L"VAL3"), VariableGetStringHelper(&variables, L"PROP3"));
55 Assert::Equal(gcnew String(L"VAL4"), VariableGetStringHelper(&variables, L"PROP4"));
56 Assert::Equal(gcnew String(L"VAL5"), VariableGetStringHelper(&variables, L"PROP5"));
57 Assert::Equal(gcnew String(L"VAL6"), VariableGetStringHelper(&variables, L"PROP6"));
58 Assert::Equal(7ll, VariableGetNumericHelper(&variables, L"PROP7"));
59 Assert::Equal(MAKEQWORDVERSION(1,1,0,0), VariableGetVersionHelper(&variables, L"PROP8"));
60 Assert::Equal(gcnew String(L"1.1.0.0"), VariableGetStringHelper(&variables, L"PROP8"));
61
62 Assert::Equal(42ll, VariableGetNumericHelper(&variables, L"OVERWRITTEN_STRING"));
63 Assert::Equal(gcnew String(L"NEW"), VariableGetStringHelper(&variables, L"OVERWRITTEN_NUMBER"));
64 }
65 finally
66 {
67 VariablesUninitialize(&variables);
68 }
69 }
70
71 [NamedFact]
72 void VariablesParseXmlTest()
73 {
74 HRESULT hr = S_OK;
75 IXMLDOMElement* pixeBundle = NULL;
76 BURN_VARIABLES variables = { };
77 try
78 {
79 LPCWSTR wzDocument =
80 L"<Bundle>"
81 L" <Variable Id='Var1' Type='numeric' Value='1' Hidden='no' Persisted='no' />"
82 L" <Variable Id='Var2' Type='string' Value='String value.' Hidden='no' Persisted='no' />"
83 L" <Variable Id='Var3' Type='version' Value='1.2.3.4' Hidden='no' Persisted='no' />"
84 L" <Variable Id='Var4' Hidden='no' Persisted='no' />"
85 L" <Variable Id='Var5' Type='string' Value='' Hidden='no' Persisted='no' />"
86 L"</Bundle>";
87
88 hr = VariableInitialize(&variables);
89 TestThrowOnFailure(hr, L"Failed to initialize variables.");
90
91 // load XML document
92 LoadBundleXmlHelper(wzDocument, &pixeBundle);
93
94 hr = VariablesParseFromXml(&variables, pixeBundle);
95 TestThrowOnFailure(hr, L"Failed to parse searches from XML.");
96
97 // get and verify variable values
98 Assert::Equal((int)BURN_VARIANT_TYPE_NUMERIC, VariableGetTypeHelper(&variables, L"Var1"));
99 Assert::Equal((int)BURN_VARIANT_TYPE_STRING, VariableGetTypeHelper(&variables, L"Var2"));
100 Assert::Equal((int)BURN_VARIANT_TYPE_VERSION, VariableGetTypeHelper(&variables, L"Var3"));
101 Assert::Equal((int)BURN_VARIANT_TYPE_NONE, VariableGetTypeHelper(&variables, L"Var4"));
102
103 Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Var1"));
104 Assert::Equal(gcnew String(L"String value."), VariableGetStringHelper(&variables, L"Var2"));
105 Assert::Equal(MAKEQWORDVERSION(1,2,3,4), VariableGetVersionHelper(&variables, L"Var3"));
106 }
107 finally
108 {
109 ReleaseObject(pixeBundle);
110 VariablesUninitialize(&variables);
111 }
112 }
113
114 [NamedFact]
115 void VariablesFormatTest()
116 {
117 HRESULT hr = S_OK;
118 BURN_VARIABLES variables = { };
119 LPWSTR scz = NULL;
120 DWORD cch = 0;
121 try
122 {
123 hr = VariableInitialize(&variables);
124 TestThrowOnFailure(hr, L"Failed to initialize variables.");
125
126 // set variables
127 VariableSetStringHelper(&variables, L"PROP1", L"VAL1");
128 VariableSetStringHelper(&variables, L"PROP2", L"VAL2");
129 VariableSetNumericHelper(&variables, L"PROP3", 3);
130
131 // test string formatting
132 Assert::Equal(gcnew String(L"NOPROP"), VariableFormatStringHelper(&variables, L"NOPROP"));
133 Assert::Equal(gcnew String(L"VAL1"), VariableFormatStringHelper(&variables, L"[PROP1]"));
134 Assert::Equal(gcnew String(L" VAL1 "), VariableFormatStringHelper(&variables, L" [PROP1] "));
135 Assert::Equal(gcnew String(L"PRE VAL1"), VariableFormatStringHelper(&variables, L"PRE [PROP1]"));
136 Assert::Equal(gcnew String(L"VAL1 POST"), VariableFormatStringHelper(&variables, L"[PROP1] POST"));
137 Assert::Equal(gcnew String(L"PRE VAL1 POST"), VariableFormatStringHelper(&variables, L"PRE [PROP1] POST"));
138 Assert::Equal(gcnew String(L"VAL1 MID VAL2"), VariableFormatStringHelper(&variables, L"[PROP1] MID [PROP2]"));
139 Assert::Equal(gcnew String(L""), VariableFormatStringHelper(&variables, L"[NONE]"));
140 Assert::Equal(gcnew String(L""), VariableFormatStringHelper(&variables, L"[prop1]"));
141 Assert::Equal(gcnew String(L"["), VariableFormatStringHelper(&variables, L"[\\[]"));
142 Assert::Equal(gcnew String(L"]"), VariableFormatStringHelper(&variables, L"[\\]]"));
143 Assert::Equal(gcnew String(L"[]"), VariableFormatStringHelper(&variables, L"[]"));
144 Assert::Equal(gcnew String(L"[NONE"), VariableFormatStringHelper(&variables, L"[NONE"));
145 Assert::Equal(gcnew String(L"VAL2"), VariableGetFormattedHelper(&variables, L"PROP2"));
146 Assert::Equal(gcnew String(L"3"), VariableGetFormattedHelper(&variables, L"PROP3"));
147
148 hr = VariableFormatString(&variables, L"PRE [PROP1] POST", &scz, &cch);
149 TestThrowOnFailure(hr, L"Failed to format string");
150
151 Assert::Equal((DWORD)lstrlenW(scz), cch);
152
153 hr = VariableFormatString(&variables, L"PRE [PROP1] POST", NULL, &cch);
154 TestThrowOnFailure(hr, L"Failed to format string");
155
156 Assert::Equal((DWORD)lstrlenW(scz), cch);
157 }
158 finally
159 {
160 VariablesUninitialize(&variables);
161 ReleaseStr(scz);
162 }
163 }
164
165 [NamedFact]
166 void VariablesEscapeTest()
167 {
168 // test string escaping
169 Assert::Equal(gcnew String(L"[\\[]"), VariableEscapeStringHelper(L"["));
170 Assert::Equal(gcnew String(L"[\\]]"), VariableEscapeStringHelper(L"]"));
171 Assert::Equal(gcnew String(L" [\\[]TEXT[\\]] "), VariableEscapeStringHelper(L" [TEXT] "));
172 }
173
174 [NamedFact]
175 void VariablesConditionTest()
176 {
177 HRESULT hr = S_OK;
178 BURN_VARIABLES variables = { };
179 try
180 {
181 hr = VariableInitialize(&variables);
182 TestThrowOnFailure(hr, L"Failed to initialize variables.");
183
184 // set variables
185 VariableSetStringHelper(&variables, L"PROP1", L"VAL1");
186 VariableSetStringHelper(&variables, L"PROP2", L"VAL2");
187 VariableSetStringHelper(&variables, L"PROP3", L"VAL3");
188 VariableSetStringHelper(&variables, L"PROP4", L"BEGIN MID END");
189 VariableSetNumericHelper(&variables, L"PROP5", 5);
190 VariableSetNumericHelper(&variables, L"PROP6", 6);
191 VariableSetStringHelper(&variables, L"PROP7", L"");
192 VariableSetNumericHelper(&variables, L"PROP8", 0);
193 VariableSetStringHelper(&variables, L"_PROP9", L"VAL9");
194 VariableSetNumericHelper(&variables, L"PROP10", -10);
195 VariableSetNumericHelper(&variables, L"PROP11", 9223372036854775807ll);
196 VariableSetNumericHelper(&variables, L"PROP12", -9223372036854775808ll);
197 VariableSetNumericHelper(&variables, L"PROP13", 0x00010000);
198 VariableSetNumericHelper(&variables, L"PROP14", 0x00000001);
199 VariableSetNumericHelper(&variables, L"PROP15", 0x00010001);
200 VariableSetVersionHelper(&variables, L"PROP16", MAKEQWORDVERSION(0,0,0,0));
201 VariableSetVersionHelper(&variables, L"PROP17", MAKEQWORDVERSION(1,0,0,0));
202 VariableSetVersionHelper(&variables, L"PROP18", MAKEQWORDVERSION(1,1,0,0));
203 VariableSetVersionHelper(&variables, L"PROP19", MAKEQWORDVERSION(1,1,1,0));
204 VariableSetVersionHelper(&variables, L"PROP20", MAKEQWORDVERSION(1,1,1,1));
205 VariableSetNumericHelper(&variables, L"vPROP21", 1);
206 VariableSetVersionHelper(&variables, L"PROP22", MAKEQWORDVERSION(65535,65535,65535,65535));
207 VariableSetStringHelper(&variables, L"PROP23", L"1.1.1");
208
209 // test conditions
210 Assert::True(EvaluateConditionHelper(&variables, L"PROP1"));
211 Assert::True(EvaluateConditionHelper(&variables, L"PROP5"));
212 Assert::False(EvaluateConditionHelper(&variables, L"PROP7"));
213 Assert::False(EvaluateConditionHelper(&variables, L"PROP8"));
214 Assert::True(EvaluateConditionHelper(&variables, L"_PROP9"));
215 Assert::False(EvaluateConditionHelper(&variables, L"PROP16"));
216 Assert::True(EvaluateConditionHelper(&variables, L"PROP17"));
217
218 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\""));
219 Assert::False(EvaluateConditionHelper(&variables, L"NONE = \"NOT\""));
220 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 <> \"VAL1\""));
221 Assert::True(EvaluateConditionHelper(&variables, L"NONE <> \"NOT\""));
222
223 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 ~= \"val1\""));
224 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"val1\""));
225 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 ~<> \"val1\""));
226 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 <> \"val1\""));
227
228 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 = 5"));
229 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 = 0"));
230 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 <> 5"));
231 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 <> 0"));
232
233 Assert::True(EvaluateConditionHelper(&variables, L"PROP10 = -10"));
234 Assert::False(EvaluateConditionHelper(&variables, L"PROP10 <> -10"));
235
236 Assert::True(EvaluateConditionHelper(&variables, L"PROP17 = v1"));
237 Assert::False(EvaluateConditionHelper(&variables, L"PROP17 = v0"));
238 Assert::False(EvaluateConditionHelper(&variables, L"PROP17 <> v1"));
239 Assert::True(EvaluateConditionHelper(&variables, L"PROP17 <> v0"));
240
241 Assert::True(EvaluateConditionHelper(&variables, L"PROP16 = v0"));
242 Assert::True(EvaluateConditionHelper(&variables, L"PROP17 = v1"));
243 Assert::True(EvaluateConditionHelper(&variables, L"PROP18 = v1.1"));
244 Assert::True(EvaluateConditionHelper(&variables, L"PROP19 = v1.1.1"));
245 Assert::True(EvaluateConditionHelper(&variables, L"PROP20 = v1.1.1.1"));
246 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP20 = v1.1.1.1.0"));
247 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP20 = v1.1.1.1.1"));
248 Assert::True(EvaluateConditionHelper(&variables, L"vPROP21 = 1"));
249 Assert::True(EvaluateConditionHelper(&variables, L"PROP23 = v1.1.1"));
250 Assert::True(EvaluateConditionHelper(&variables, L"v1.1.1 = PROP23"));
251 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 <> v1.1.1"));
252 Assert::True(EvaluateConditionHelper(&variables, L"v1.1.1 <> PROP1"));
253
254 Assert::False(EvaluateConditionHelper(&variables, L"PROP11 = 9223372036854775806"));
255 Assert::True(EvaluateConditionHelper(&variables, L"PROP11 = 9223372036854775807"));
256 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP11 = 9223372036854775808"));
257 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP11 = 92233720368547758070000"));
258
259 Assert::False(EvaluateConditionHelper(&variables, L"PROP12 = -9223372036854775807"));
260 Assert::True(EvaluateConditionHelper(&variables, L"PROP12 = -9223372036854775808"));
261 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP12 = -9223372036854775809"));
262 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP12 = -92233720368547758080000"));
263
264 Assert::True(EvaluateConditionHelper(&variables, L"PROP22 = v65535.65535.65535.65535"));
265 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP22 = v65536.65535.65535.65535"));
266 Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP22 = v65535.655350000.65535.65535"));
267
268 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 < 6"));
269 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 < 5"));
270 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 > 4"));
271 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 > 5"));
272 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 <= 6"));
273 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 <= 5"));
274 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 <= 4"));
275 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 >= 4"));
276 Assert::True(EvaluateConditionHelper(&variables, L"PROP5 >= 5"));
277 Assert::False(EvaluateConditionHelper(&variables, L"PROP5 >= 6"));
278
279 Assert::True(EvaluateConditionHelper(&variables, L"PROP4 << \"BEGIN\""));
280 Assert::False(EvaluateConditionHelper(&variables, L"PROP4 << \"END\""));
281 Assert::True(EvaluateConditionHelper(&variables, L"PROP4 >> \"END\""));
282 Assert::False(EvaluateConditionHelper(&variables, L"PROP4 >> \"BEGIN\""));
283 Assert::True(EvaluateConditionHelper(&variables, L"PROP4 >< \"MID\""));
284 Assert::False(EvaluateConditionHelper(&variables, L"PROP4 >< \"NONE\""));
285
286 Assert::True(EvaluateConditionHelper(&variables, L"PROP16 < v1.1"));
287 Assert::False(EvaluateConditionHelper(&variables, L"PROP16 < v0"));
288 Assert::True(EvaluateConditionHelper(&variables, L"PROP17 > v0.12"));
289 Assert::False(EvaluateConditionHelper(&variables, L"PROP17 > v1"));
290 Assert::True(EvaluateConditionHelper(&variables, L"PROP18 >= v1.0"));
291 Assert::True(EvaluateConditionHelper(&variables, L"PROP18 >= v1.1"));
292 Assert::False(EvaluateConditionHelper(&variables, L"PROP18 >= v2.1"));
293 Assert::True(EvaluateConditionHelper(&variables, L"PROP19 <= v1.1234.1"));
294 Assert::True(EvaluateConditionHelper(&variables, L"PROP19 <= v1.1.1"));
295 Assert::False(EvaluateConditionHelper(&variables, L"PROP19 <= v1.0.123"));
296
297 Assert::True(EvaluateConditionHelper(&variables, L"PROP6 = \"6\""));
298 Assert::True(EvaluateConditionHelper(&variables, L"\"6\" = PROP6"));
299 Assert::False(EvaluateConditionHelper(&variables, L"PROP6 = \"ABC\""));
300 Assert::False(EvaluateConditionHelper(&variables, L"\"ABC\" = PROP6"));
301 Assert::False(EvaluateConditionHelper(&variables, L"\"ABC\" = PROP6"));
302
303 Assert::True(EvaluateConditionHelper(&variables, L"PROP13 << 1"));
304 Assert::False(EvaluateConditionHelper(&variables, L"PROP13 << 0"));
305 Assert::True(EvaluateConditionHelper(&variables, L"PROP14 >> 1"));
306 Assert::False(EvaluateConditionHelper(&variables, L"PROP14 >> 0"));
307 Assert::True(EvaluateConditionHelper(&variables, L"PROP15 >< 65537"));
308 Assert::False(EvaluateConditionHelper(&variables, L"PROP15 >< 0"));
309
310 Assert::False(EvaluateConditionHelper(&variables, L"NOT PROP1"));
311 Assert::True(EvaluateConditionHelper(&variables, L"NOT (PROP1 <> \"VAL1\")"));
312
313 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND PROP2 = \"VAL2\""));
314 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND PROP2 = \"NOT\""));
315 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"NOT\" AND PROP2 = \"VAL2\""));
316 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"NOT\" AND PROP2 = \"NOT\""));
317
318 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" OR PROP2 = \"VAL2\""));
319 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" OR PROP2 = \"NOT\""));
320 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"NOT\" OR PROP2 = \"VAL2\""));
321 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"NOT\" OR PROP2 = \"NOT\""));
322
323 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND PROP2 = \"VAL2\" OR PROP3 = \"NOT\""));
324 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND PROP2 = \"NOT\" OR PROP3 = \"VAL3\""));
325 Assert::False(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND PROP2 = \"NOT\" OR PROP3 = \"NOT\""));
326 Assert::True(EvaluateConditionHelper(&variables, L"PROP1 = \"VAL1\" AND (PROP2 = \"NOT\" OR PROP3 = \"VAL3\")"));
327 Assert::True(EvaluateConditionHelper(&variables, L"(PROP1 = \"VAL1\" AND PROP2 = \"VAL2\") OR PROP3 = \"NOT\""));
328
329 Assert::True(EvaluateConditionHelper(&variables, L"PROP3 = \"NOT\" OR PROP1 = \"VAL1\" AND PROP2 = \"VAL2\""));
330 Assert::True(EvaluateConditionHelper(&variables, L"PROP3 = \"VAL3\" OR PROP1 = \"VAL1\" AND PROP2 = \"NOT\""));
331 Assert::False(EvaluateConditionHelper(&variables, L"PROP3 = \"NOT\" OR PROP1 = \"VAL1\" AND PROP2 = \"NOT\""));
332 Assert::True(EvaluateConditionHelper(&variables, L"(PROP3 = \"NOT\" OR PROP1 = \"VAL1\") AND PROP2 = \"VAL2\""));
333 Assert::True(EvaluateConditionHelper(&variables, L"PROP3 = \"NOT\" OR (PROP1 = \"VAL1\" AND PROP2 = \"VAL2\")"));
334
335 Assert::True(EvaluateFailureConditionHelper(&variables, L"="));
336 Assert::True(EvaluateFailureConditionHelper(&variables, L"(PROP1"));
337 Assert::True(EvaluateFailureConditionHelper(&variables, L"(PROP1 = \""));
338 Assert::True(EvaluateFailureConditionHelper(&variables, L"1A"));
339 Assert::True(EvaluateFailureConditionHelper(&variables, L"*"));
340
341 Assert::True(EvaluateFailureConditionHelper(&variables, L"1 == 1"));
342 }
343 finally
344 {
345 VariablesUninitialize(&variables);
346 }
347 }
348
349 [NamedFact]
350 void VariablesSerializationTest()
351 {
352 HRESULT hr = S_OK;
353 BYTE* pbBuffer = NULL;
354 SIZE_T cbBuffer = 0;
355 SIZE_T iBuffer = 0;
356 BURN_VARIABLES variables1 = { };
357 BURN_VARIABLES variables2 = { };
358 try
359 {
360 // serialize
361 hr = VariableInitialize(&variables1);
362 TestThrowOnFailure(hr, L"Failed to initialize variables.");
363
364 VariableSetStringHelper(&variables1, L"PROP1", L"VAL1");
365 VariableSetNumericHelper(&variables1, L"PROP2", 2);
366 VariableSetVersionHelper(&variables1, L"PROP3", MAKEQWORDVERSION(1,1,1,1));
367 VariableSetStringHelper(&variables1, L"PROP4", L"VAL4");
368
369 hr = VariableSerialize(&variables1, FALSE, &pbBuffer, &cbBuffer);
370 TestThrowOnFailure(hr, L"Failed to serialize variables.");
371
372 // deserialize
373 hr = VariableInitialize(&variables2);
374 TestThrowOnFailure(hr, L"Failed to initialize variables.");
375
376 hr = VariableDeserialize(&variables2, FALSE, pbBuffer, cbBuffer, &iBuffer);
377 TestThrowOnFailure(hr, L"Failed to deserialize variables.");
378
379 Assert::Equal(gcnew String(L"VAL1"), VariableGetStringHelper(&variables2, L"PROP1"));
380 Assert::Equal(2ll, VariableGetNumericHelper(&variables2, L"PROP2"));
381 Assert::Equal(MAKEQWORDVERSION(1,1,1,1), VariableGetVersionHelper(&variables2, L"PROP3"));
382 Assert::Equal(gcnew String(L"VAL4"), VariableGetStringHelper(&variables2, L"PROP4"));
383 }
384 finally
385 {
386 ReleaseBuffer(pbBuffer);
387 VariablesUninitialize(&variables1);
388 VariablesUninitialize(&variables2);
389 }
390 }
391
392 [NamedFact]
393 void VariablesBuiltInTest()
394 {
395 HRESULT hr = S_OK;
396 BURN_VARIABLES variables = { };
397 try
398 {
399 hr = VariableInitialize(&variables);
400 TestThrowOnFailure(hr, L"Failed to initialize variables.");
401
402 // VersionMsi
403 Assert::True(EvaluateConditionHelper(&variables, L"VersionMsi >= v1.1"));
404
405 // VersionNT
406 Assert::True(EvaluateConditionHelper(&variables, L"VersionNT <> v0.0.0.0"));
407
408 // VersionNT64
409 if (nullptr == Environment::GetEnvironmentVariable("ProgramFiles(x86)"))
410 {
411 Assert::False(EvaluateConditionHelper(&variables, L"VersionNT64"));
412 }
413 else
414 {
415 Assert::True(EvaluateConditionHelper(&variables, L"VersionNT64"));
416 }
417
418 // attempt to set a built-in property
419 hr = VariableSetString(&variables, L"VersionNT", L"VAL", FALSE);
420 Assert::Equal(E_INVALIDARG, hr);
421 Assert::False(EvaluateConditionHelper(&variables, L"VersionNT = \"VAL\""));
422
423 VariableGetNumericHelper(&variables, L"NTProductType");
424 VariableGetNumericHelper(&variables, L"NTSuiteBackOffice");
425 VariableGetNumericHelper(&variables, L"NTSuiteDataCenter");
426 VariableGetNumericHelper(&variables, L"NTSuiteEnterprise");
427 VariableGetNumericHelper(&variables, L"NTSuitePersonal");
428 VariableGetNumericHelper(&variables, L"NTSuiteSmallBusiness");
429 VariableGetNumericHelper(&variables, L"NTSuiteSmallBusinessRestricted");
430 VariableGetNumericHelper(&variables, L"NTSuiteWebServer");
431 VariableGetNumericHelper(&variables, L"CompatibilityMode");
432 VariableGetNumericHelper(&variables, L"Privileged");
433 VariableGetNumericHelper(&variables, L"SystemLanguageID");
434 VariableGetNumericHelper(&variables, L"TerminalServer");
435 VariableGetNumericHelper(&variables, L"UserUILanguageID");
436 VariableGetNumericHelper(&variables, L"UserLanguageID");
437
438 // known folders
439 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData) + "\\", VariableGetStringHelper(&variables, L"AppDataFolder"));
440 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::CommonApplicationData) + "\\", VariableGetStringHelper(&variables, L"CommonAppDataFolder"));
441
442 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::ProgramFiles) + "\\", VariableGetStringHelper(&variables, L"ProgramFilesFolder"));
443 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::DesktopDirectory) + "\\", VariableGetStringHelper(&variables, L"DesktopFolder"));
444 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::Favorites) + "\\", VariableGetStringHelper(&variables, L"FavoritesFolder"));
445 VariableGetStringHelper(&variables, L"FontsFolder");
446 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::LocalApplicationData) + "\\", VariableGetStringHelper(&variables, L"LocalAppDataFolder"));
447 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::Personal) + "\\", VariableGetStringHelper(&variables, L"PersonalFolder"));
448 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::Programs) + "\\", VariableGetStringHelper(&variables, L"ProgramMenuFolder"));
449 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::SendTo) + "\\", VariableGetStringHelper(&variables, L"SendToFolder"));
450 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::StartMenu) + "\\", VariableGetStringHelper(&variables, L"StartMenuFolder"));
451 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::Startup) + "\\", VariableGetStringHelper(&variables, L"StartupFolder"));
452 VariableGetStringHelper(&variables, L"SystemFolder");
453 VariableGetStringHelper(&variables, L"WindowsFolder");
454 VariableGetStringHelper(&variables, L"WindowsVolume");
455
456 Assert::Equal(System::IO::Path::GetTempPath(), System::IO::Path::GetFullPath(VariableGetStringHelper(&variables, L"TempFolder")));
457
458 VariableGetStringHelper(&variables, L"AdminToolsFolder");
459 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::CommonProgramFiles) + "\\", VariableGetStringHelper(&variables, L"CommonFilesFolder"));
460 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::MyPictures) + "\\", VariableGetStringHelper(&variables, L"MyPicturesFolder"));
461 Assert::Equal(Environment::GetFolderPath(Environment::SpecialFolder::Templates) + "\\", VariableGetStringHelper(&variables, L"TemplateFolder"));
462
463 if (Environment::Is64BitOperatingSystem)
464 {
465 VariableGetStringHelper(&variables, L"ProgramFiles64Folder");
466 VariableGetStringHelper(&variables, L"CommonFiles64Folder");
467 VariableGetStringHelper(&variables, L"System64Folder");
468 }
469 }
470 finally
471 {
472 VariablesUninitialize(&variables);
473 }
474 }
475 };
476}
477}
478}
479}
480}