diff options
Diffstat (limited to 'src/test/BurnUnitTest/VariableTest.cpp')
-rw-r--r-- | src/test/BurnUnitTest/VariableTest.cpp | 480 |
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 | |||
7 | namespace Microsoft | ||
8 | { | ||
9 | namespace Tools | ||
10 | { | ||
11 | namespace WindowsInstallerXml | ||
12 | { | ||
13 | namespace Test | ||
14 | { | ||
15 | namespace 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 | } | ||