Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Tests for conditionals plugin
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #include <stdlib.h>
11 : #include <string.h>
12 :
13 : #include <kdbconfig.h>
14 :
15 : #include <tests_plugin.h>
16 :
17 2 : static void test_ifthenelseint (void)
18 : {
19 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
20 2 : KeySet * ks = ksNew (5,
21 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
22 : "(../totest== '153') ? (../bla/val1 == '100') : (../bla/val2 == '100')", KEY_END),
23 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
24 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
25 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
26 2 : KeySet * conf = ksNew (0, KS_END);
27 2 : PLUGIN_OPEN ("conditionals");
28 2 : ksRewind (ks);
29 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
30 2 : ksDel (ks);
31 2 : keyDel (parentKey);
32 2 : PLUGIN_CLOSE ();
33 2 : }
34 2 : static void test_ifthenint (void)
35 : {
36 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
37 2 : KeySet * ks = ksNew (5,
38 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
39 : "( ../totest != '15' ) ? (../bla/val1 == '100')", KEY_END),
40 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
41 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
42 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
43 2 : KeySet * conf = ksNew (0, KS_END);
44 2 : PLUGIN_OPEN ("conditionals");
45 2 : ksRewind (ks);
46 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
47 2 : ksDel (ks);
48 2 : keyDel (parentKey);
49 2 : PLUGIN_CLOSE ();
50 2 : }
51 2 : static void test_ifthenltint (void)
52 : {
53 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
54 2 : KeySet * ks = ksNew (5,
55 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
56 : "( ./ < '153' ) ? (../bla/val1 == '100')", KEY_END),
57 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
58 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
59 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
60 2 : KeySet * conf = ksNew (0, KS_END);
61 2 : PLUGIN_OPEN ("conditionals");
62 2 : ksRewind (ks);
63 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
64 2 : ksDel (ks);
65 2 : keyDel (parentKey);
66 2 : PLUGIN_CLOSE ();
67 2 : }
68 2 : static void test_ifthengtint (void)
69 : {
70 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
71 2 : KeySet * ks = ksNew (5,
72 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
73 : "(./>'153') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
74 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
75 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
76 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
77 2 : KeySet * conf = ksNew (0, KS_END);
78 2 : PLUGIN_OPEN ("conditionals");
79 2 : ksRewind (ks);
80 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
81 2 : ksDel (ks);
82 2 : keyDel (parentKey);
83 2 : PLUGIN_CLOSE ();
84 2 : }
85 :
86 2 : static void test_ifthenkey (void)
87 : {
88 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
89 2 : KeySet * ks = ksNew (5,
90 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
91 : "(../totest>@/bla/val3) ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
92 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
93 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
94 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
95 2 : KeySet * conf = ksNew (0, KS_END);
96 2 : PLUGIN_OPEN ("conditionals");
97 2 : ksRewind (ks);
98 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
99 2 : ksDel (ks);
100 2 : keyDel (parentKey);
101 2 : PLUGIN_CLOSE ();
102 2 : }
103 :
104 :
105 2 : static void test_emptyisempty (void)
106 : {
107 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
108 2 : KeySet * ks = ksNew (5,
109 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
110 : "(../totest=='') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
111 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
112 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
113 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
114 2 : KeySet * conf = ksNew (0, KS_END);
115 2 : PLUGIN_OPEN ("conditionals");
116 2 : ksRewind (ks);
117 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
118 2 : ksDel (ks);
119 2 : keyDel (parentKey);
120 2 : PLUGIN_CLOSE ();
121 2 : }
122 :
123 :
124 2 : static void test_notempty (void)
125 : {
126 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
127 2 : KeySet * ks = ksNew (5,
128 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
129 : "(../totest!='') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
130 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
131 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
132 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
133 2 : KeySet * conf = ksNew (0, KS_END);
134 2 : PLUGIN_OPEN ("conditionals");
135 2 : ksRewind (ks);
136 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
137 2 : ksDel (ks);
138 2 : keyDel (parentKey);
139 2 : PLUGIN_CLOSE ();
140 2 : }
141 :
142 2 : static void test_ifsetthenval (void)
143 : {
144 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
145 2 : KeySet * ks = ksNew (5,
146 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
147 : "(../totest=='') ? (../totest := 'BLA')", KEY_END),
148 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
149 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
150 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
151 2 : KeySet * conf = ksNew (0, KS_END);
152 2 : PLUGIN_OPEN ("conditionals");
153 2 : ksRewind (ks);
154 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
155 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
156 2 : succeed_if (strcmp (keyString (key), "BLA") == 0, "error setting then value");
157 2 : ksDel (ks);
158 2 : keyDel (parentKey);
159 2 : PLUGIN_CLOSE ();
160 2 : }
161 2 : static void test_ifsetthenkey (void)
162 : {
163 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
164 2 : KeySet * ks = ksNew (5,
165 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
166 : "(./=='') ? (./ := ../bla/val1)", KEY_END),
167 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
168 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
169 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
170 2 : KeySet * conf = ksNew (0, KS_END);
171 2 : PLUGIN_OPEN ("conditionals");
172 2 : ksRewind (ks);
173 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
174 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
175 2 : succeed_if (strcmp (keyString (key), "100") == 0, "error setting then value");
176 2 : ksDel (ks);
177 2 : keyDel (parentKey);
178 2 : PLUGIN_CLOSE ();
179 2 : }
180 2 : static void test_assignThen (void)
181 : {
182 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
183 2 : KeySet * ks = ksNew (5,
184 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
185 : "(../totest=='Hello') ? ('World')", KEY_END),
186 : KS_END);
187 2 : KeySet * conf = ksNew (0, KS_END);
188 2 : PLUGIN_OPEN ("conditionals");
189 2 : ksRewind (ks);
190 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
191 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
192 2 : succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
193 2 : ksDel (ks);
194 2 : keyDel (parentKey);
195 2 : PLUGIN_CLOSE ();
196 2 : }
197 2 : static void test_assignThen2 (void)
198 : {
199 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
200 2 : KeySet * ks = ksNew (5,
201 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
202 : "(../totest=='Hello') ? ('World') : ('Fail')", KEY_END),
203 : KS_END);
204 2 : KeySet * conf = ksNew (0, KS_END);
205 2 : PLUGIN_OPEN ("conditionals");
206 2 : ksRewind (ks);
207 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
208 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
209 2 : succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
210 2 : ksDel (ks);
211 2 : keyDel (parentKey);
212 2 : PLUGIN_CLOSE ();
213 2 : }
214 2 : static void test_assignElse (void)
215 : {
216 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
217 2 : KeySet * ks = ksNew (5,
218 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
219 : "(../totest=='Hell') ? ('World') : ('Fail')", KEY_END),
220 : KS_END);
221 2 : KeySet * conf = ksNew (0, KS_END);
222 2 : PLUGIN_OPEN ("conditionals");
223 2 : ksRewind (ks);
224 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
225 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
226 2 : succeed_if (strcmp (keyString (key), "Fail") == 0, "error setting then value");
227 2 : ksDel (ks);
228 2 : keyDel (parentKey);
229 2 : PLUGIN_CLOSE ();
230 2 : }
231 :
232 2 : static void test_assignKeyThen (void)
233 : {
234 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
235 2 : KeySet * ks = ksNew (5,
236 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
237 : "(../totest=='Hello') ? (../then/key)", KEY_END),
238 : keyNew ("user/tests/conditionals/then/key", KEY_VALUE, "World", KEY_END),
239 : keyNew ("user/tests/conditionals/elseVal", KEY_VALUE, "Fail", KEY_END), KS_END);
240 2 : KeySet * conf = ksNew (0, KS_END);
241 2 : PLUGIN_OPEN ("conditionals");
242 2 : ksRewind (ks);
243 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
244 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
245 2 : succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
246 2 : ksDel (ks);
247 2 : keyDel (parentKey);
248 2 : PLUGIN_CLOSE ();
249 2 : }
250 :
251 2 : static void test_assignKeyElse (void)
252 : {
253 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
254 2 : KeySet * ks = ksNew (5,
255 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
256 : "(../totest=='Hell') ? (../then/key) : (../elseVal)", KEY_END),
257 : keyNew ("user/tests/conditionals/then/key", KEY_VALUE, "World", KEY_END),
258 : keyNew ("user/tests/conditionals/elseVal", KEY_VALUE, "Fail", KEY_END), KS_END);
259 2 : KeySet * conf = ksNew (0, KS_END);
260 2 : PLUGIN_OPEN ("conditionals");
261 2 : ksRewind (ks);
262 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
263 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
264 2 : succeed_if (strcmp (keyString (key), "Fail") == 0, "error setting then value");
265 2 : ksDel (ks);
266 2 : keyDel (parentKey);
267 2 : PLUGIN_CLOSE ();
268 2 : }
269 :
270 2 : static void test_doesntExistSuccess (void)
271 : {
272 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
273 2 : KeySet * ks = ksNew (5,
274 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
275 : "(../totest<../bla/val1) ? (! ../bla/val4)", KEY_END),
276 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
277 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
278 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
279 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
280 :
281 2 : KeySet * conf = ksNew (0, KS_END);
282 2 : PLUGIN_OPEN ("conditionals");
283 2 : ksRewind (ks);
284 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
285 2 : ksDel (ks);
286 2 : keyDel (parentKey);
287 2 : PLUGIN_CLOSE ();
288 2 : }
289 :
290 2 : static void test_doesntExistFail (void)
291 : {
292 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
293 2 : KeySet * ks = ksNew (5,
294 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
295 : "(../totest<../bla/val1) ? (! ../bla/val1)", KEY_END),
296 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
297 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
298 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
299 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
300 :
301 2 : KeySet * conf = ksNew (0, KS_END);
302 2 : PLUGIN_OPEN ("conditionals");
303 2 : ksRewind (ks);
304 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
305 2 : ksDel (ks);
306 2 : keyDel (parentKey);
307 2 : PLUGIN_CLOSE ();
308 2 : }
309 :
310 2 : static void test_nested1Success (void)
311 : {
312 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
313 2 : KeySet * ks = ksNew (5,
314 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
315 : "(../totest<../bla/val1) ? ((../bla/result == 'result1') || (../bla/result == 'result3'))", KEY_END),
316 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
317 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
318 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
319 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
320 :
321 2 : KeySet * conf = ksNew (0, KS_END);
322 2 : PLUGIN_OPEN ("conditionals");
323 2 : ksRewind (ks);
324 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
325 2 : ksDel (ks);
326 2 : keyDel (parentKey);
327 2 : PLUGIN_CLOSE ();
328 2 : }
329 :
330 2 : static void test_nested1Fail (void)
331 : {
332 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
333 2 : KeySet * ks = ksNew (5,
334 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
335 : "(../totest<../bla/val1) ? ((../bla/result == 'result1') || (../bla/result == 'result2'))", KEY_END),
336 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
337 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
338 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
339 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
340 2 : KeySet * conf = ksNew (0, KS_END);
341 2 : PLUGIN_OPEN ("conditionals");
342 2 : ksRewind (ks);
343 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
344 2 : ksDel (ks);
345 2 : keyDel (parentKey);
346 2 : PLUGIN_CLOSE ();
347 2 : }
348 :
349 :
350 2 : static void test_nested2Success (void)
351 : {
352 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
353 2 : KeySet * ks = ksNew (5,
354 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
355 : "(../totest<../bla/val1) ? ((../bla/val1 == '100') && ((../bla/result == 'result1') || "
356 : "(../bla/result == 'result3')))",
357 : KEY_END),
358 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
359 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
360 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
361 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
362 :
363 2 : KeySet * conf = ksNew (0, KS_END);
364 2 : PLUGIN_OPEN ("conditionals");
365 2 : ksRewind (ks);
366 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
367 2 : ksDel (ks);
368 2 : keyDel (parentKey);
369 2 : PLUGIN_CLOSE ();
370 2 : }
371 :
372 2 : static void test_nested2Fail (void)
373 : {
374 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
375 2 : KeySet * ks = ksNew (5,
376 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
377 : "(../totest<../bla/val1) ? ((../bla/val1 == '100') && ((../bla/result == 'result1') || "
378 : "(../bla/result == 'result2')))",
379 : KEY_END),
380 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
381 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
382 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
383 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
384 2 : KeySet * conf = ksNew (0, KS_END);
385 2 : PLUGIN_OPEN ("conditionals");
386 2 : ksRewind (ks);
387 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
388 2 : ksDel (ks);
389 2 : keyDel (parentKey);
390 2 : PLUGIN_CLOSE ();
391 2 : }
392 :
393 2 : static void test_suffix (void)
394 : {
395 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
396 2 : KeySet * ks = ksNew (5,
397 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2%", KEY_META, "check/condition",
398 : "(../totest >= '10%') ? (../bla/val1 == '50%') : (../bla/val3 == '3%')", KEY_META,
399 : "condition/validsuffix", "'%', '$'", KEY_END),
400 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100%", KEY_END),
401 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50%", KEY_END),
402 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3%", KEY_END), KS_END);
403 2 : KeySet * conf = ksNew (0, KS_END);
404 2 : PLUGIN_OPEN ("conditionals");
405 2 : ksRewind (ks);
406 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
407 2 : ksDel (ks);
408 2 : keyDel (parentKey);
409 2 : PLUGIN_CLOSE ();
410 2 : }
411 :
412 2 : static void test_elseWhitespace (void)
413 : {
414 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
415 2 : KeySet * ks = ksNew (5,
416 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
417 : "(../totest >= '10') ? (../bla/val1 == '50'): (../bla/val3 == '3')", KEY_END),
418 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
419 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
420 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
421 2 : KeySet * conf = ksNew (0, KS_END);
422 2 : PLUGIN_OPEN ("conditionals");
423 2 : ksRewind (ks);
424 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
425 2 : ksDel (ks);
426 2 : keyDel (parentKey);
427 2 : PLUGIN_CLOSE ();
428 2 : }
429 :
430 2 : static void test_elseWhitespace2 (void)
431 : {
432 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
433 2 : KeySet * ks = ksNew (5,
434 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
435 : "(../totest >= '10') ? (../bla/val1 == '50') :(../bla/val3 == '3')", KEY_END),
436 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
437 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
438 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
439 2 : KeySet * conf = ksNew (0, KS_END);
440 2 : PLUGIN_OPEN ("conditionals");
441 2 : ksRewind (ks);
442 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
443 2 : ksDel (ks);
444 2 : keyDel (parentKey);
445 2 : PLUGIN_CLOSE ();
446 2 : }
447 :
448 2 : static void test_elseWhitespace3 (void)
449 : {
450 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
451 2 : KeySet * ks = ksNew (5,
452 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
453 : "(../totest >= '10') ? (../bla/val1 == '50'):(../bla/val3 == '3')", KEY_END),
454 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
455 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
456 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
457 2 : KeySet * conf = ksNew (0, KS_END);
458 2 : PLUGIN_OPEN ("conditionals");
459 2 : ksRewind (ks);
460 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
461 2 : ksDel (ks);
462 2 : keyDel (parentKey);
463 2 : PLUGIN_CLOSE ();
464 2 : }
465 :
466 2 : static void test_doubleUp (void)
467 : {
468 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
469 2 : KeySet * ks =
470 2 : ksNew (5,
471 : keyNew ("user/tests/conditionals/bla/totest", KEY_VALUE, "5", KEY_META, "check/condition",
472 : "(../../bla/totest<../../bla/val1) ? ((../../bla/val1 == '100') && ((../../bla/result == 'result1') || "
473 : "(../../bla/result == 'result2')))",
474 : KEY_END),
475 : keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
476 : keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
477 : keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
478 : keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
479 2 : KeySet * conf = ksNew (0, KS_END);
480 2 : PLUGIN_OPEN ("conditionals");
481 2 : ksRewind (ks);
482 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
483 2 : ksDel (ks);
484 2 : keyDel (parentKey);
485 2 : PLUGIN_CLOSE ();
486 2 : }
487 :
488 :
489 2 : static void test_multiCondAny (void)
490 : {
491 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
492 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
493 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/any", "#1", KEY_META,
494 : "check/condition/any/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
495 : "check/condition/any/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
496 : KS_END);
497 :
498 2 : KeySet * conf = ksNew (0, KS_END);
499 2 : PLUGIN_OPEN ("conditionals");
500 2 : ksRewind (ks);
501 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
502 2 : ksDel (ks);
503 2 : keyDel (parentKey);
504 2 : PLUGIN_CLOSE ();
505 2 : }
506 :
507 2 : static void test_multiCond2Any (void)
508 : {
509 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
510 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
511 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/any", "#1", KEY_META,
512 : "check/condition/any/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
513 : "check/condition/any/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
514 : KS_END);
515 :
516 2 : KeySet * conf = ksNew (0, KS_END);
517 2 : PLUGIN_OPEN ("conditionals");
518 2 : ksRewind (ks);
519 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
520 2 : ksDel (ks);
521 2 : keyDel (parentKey);
522 2 : PLUGIN_CLOSE ();
523 2 : }
524 :
525 2 : static void test_multiCondAll (void)
526 : {
527 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
528 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
529 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/all", "#1", KEY_META,
530 : "check/condition/all/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
531 : "check/condition/all/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
532 : KS_END);
533 :
534 2 : KeySet * conf = ksNew (0, KS_END);
535 2 : PLUGIN_OPEN ("conditionals");
536 2 : ksRewind (ks);
537 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == -1, "error");
538 2 : ksDel (ks);
539 2 : keyDel (parentKey);
540 2 : PLUGIN_CLOSE ();
541 2 : }
542 :
543 2 : static void test_multiCond2All (void)
544 : {
545 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
546 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
547 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/all", "#1", KEY_META,
548 : "check/condition/all/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
549 : "check/condition/all/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
550 : KS_END);
551 :
552 2 : KeySet * conf = ksNew (0, KS_END);
553 2 : PLUGIN_OPEN ("conditionals");
554 2 : ksRewind (ks);
555 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == -1, "error");
556 2 : ksDel (ks);
557 2 : keyDel (parentKey);
558 2 : PLUGIN_CLOSE ();
559 2 : }
560 :
561 2 : static void test_multiCondNoFail (void)
562 : {
563 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
564 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
565 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/none", "#1", KEY_META,
566 : "check/condition/none/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
567 : "check/condition/none/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
568 : KS_END);
569 :
570 2 : KeySet * conf = ksNew (0, KS_END);
571 2 : PLUGIN_OPEN ("conditionals");
572 2 : ksRewind (ks);
573 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
574 2 : ksDel (ks);
575 2 : keyDel (parentKey);
576 2 : PLUGIN_CLOSE ();
577 2 : }
578 :
579 2 : static void test_multiCond2NoFail (void)
580 : {
581 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
582 2 : KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
583 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/none", "#1", KEY_META,
584 : "check/condition/none/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
585 : "check/condition/none/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
586 : KS_END);
587 :
588 2 : KeySet * conf = ksNew (0, KS_END);
589 2 : PLUGIN_OPEN ("conditionals");
590 2 : ksRewind (ks);
591 2 : succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
592 2 : ksDel (ks);
593 2 : keyDel (parentKey);
594 2 : PLUGIN_CLOSE ();
595 2 : }
596 2 : static void test_multiAssign (void)
597 : {
598 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
599 2 : KeySet * ks = ksNew (5,
600 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition", "#1", KEY_META,
601 : "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
602 : "(../totest=='Hello') ? ('Sun') ", KEY_END),
603 : KS_END);
604 :
605 2 : KeySet * conf = ksNew (0, KS_END);
606 2 : PLUGIN_OPEN ("conditionals");
607 2 : ksRewind (ks);
608 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
609 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
610 2 : succeed_if (strcmp (keyString (key), "Sun") == 0, "error setting then value");
611 2 : ksDel (ks);
612 2 : keyDel (parentKey);
613 2 : PLUGIN_CLOSE ();
614 2 : }
615 :
616 2 : static void test_multiAssign2 (void)
617 : {
618 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
619 2 : KeySet * ks = ksNew (5,
620 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "assign/condition", "#1", KEY_META,
621 : "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
622 : "(../totest=='Hello') ? ('Sun') ", KEY_END),
623 : KS_END);
624 :
625 2 : KeySet * conf = ksNew (0, KS_END);
626 2 : PLUGIN_OPEN ("conditionals");
627 2 : ksRewind (ks);
628 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
629 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
630 2 : succeed_if (strcmp (keyString (key), "Moon") == 0, "error setting then value");
631 2 : ksDel (ks);
632 2 : keyDel (parentKey);
633 2 : PLUGIN_CLOSE ();
634 2 : }
635 :
636 2 : static void test_multiAssign3 (void)
637 : {
638 2 : Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
639 2 : KeySet * ks = ksNew (5,
640 : keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "assign/condition", "#1", KEY_META,
641 : "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
642 : "(../totest=='Bye') ? ('FAIL') ", KEY_END),
643 : KS_END);
644 :
645 2 : KeySet * conf = ksNew (0, KS_END);
646 2 : PLUGIN_OPEN ("conditionals");
647 2 : ksRewind (ks);
648 2 : succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
649 2 : Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
650 2 : succeed_if (strcmp (keyString (key), "Moon") == 0, "error setting then value");
651 2 : ksDel (ks);
652 2 : keyDel (parentKey);
653 2 : PLUGIN_CLOSE ();
654 2 : }
655 :
656 2 : int main (int argc, char ** argv)
657 : {
658 2 : printf ("CONDITIONALS TESTS\n");
659 2 : printf ("==================\n\n");
660 :
661 2 : init (argc, argv);
662 :
663 2 : test_ifthenelseint ();
664 2 : test_ifthenint ();
665 2 : test_ifthenltint ();
666 2 : test_ifthengtint ();
667 2 : test_ifthenkey ();
668 2 : test_emptyisempty ();
669 2 : test_notempty ();
670 2 : test_ifsetthenval ();
671 2 : test_ifsetthenkey ();
672 2 : test_assignThen ();
673 2 : test_assignThen2 ();
674 2 : test_assignElse ();
675 2 : test_assignKeyThen ();
676 2 : test_assignKeyElse ();
677 2 : test_nested1Success ();
678 2 : test_nested1Fail ();
679 2 : test_nested2Success ();
680 2 : test_nested2Fail ();
681 2 : test_doesntExistSuccess ();
682 2 : test_doesntExistFail ();
683 2 : test_suffix ();
684 2 : test_elseWhitespace ();
685 2 : test_elseWhitespace2 ();
686 2 : test_elseWhitespace3 ();
687 2 : test_doubleUp ();
688 2 : test_multiCondAny ();
689 2 : test_multiCondAll ();
690 2 : test_multiCondNoFail ();
691 2 : test_multiAssign ();
692 2 : test_multiCond2Any ();
693 2 : test_multiCond2All ();
694 2 : test_multiCond2NoFail ();
695 2 : test_multiAssign2 ();
696 2 : test_multiAssign3 ();
697 2 : print_result ("testmod_conditionals");
698 :
699 2 : return nbError;
700 : }
|