Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : */
8 :
9 : #include "iterator.h"
10 : #include "name.h"
11 : #include "yajl.h"
12 :
13 : #ifdef HAVE_KDBCONFIG_H
14 : #include "kdbconfig.h"
15 : #endif
16 :
17 : #include <stdio.h>
18 : #include <stdlib.h>
19 : #include <string.h>
20 :
21 : #include <tests_internal.h>
22 :
23 : // clang-format off
24 0 : KeySet *getEmptyKeys(void)
25 : {
26 0 : return ksNew(1,
27 : keyNew("user/tests/yajl",
28 : KEY_END),
29 : KS_END
30 : );
31 : }
32 :
33 6 : KeySet *getNullKeys(void)
34 : {
35 : Key *k1, *k2;
36 6 : KeySet *ks = ksNew(10,
37 : k1 = keyNew("user/tests/yajl/nullkey",
38 : KEY_VALUE, "will be removed",
39 : KEY_END),
40 : k2 = keyNew("user/tests/yajl/second_nullkey",
41 : KEY_VALUE, "will be removed too",
42 : KEY_END),
43 : KS_END
44 : );
45 6 : keySetBinary(k1, NULL, 0);
46 6 : keySetBinary(k2, NULL, 0);
47 :
48 6 : ksRewind(ks); // shouldn't that be default?
49 6 : return ks;
50 : }
51 :
52 4 : KeySet *getBelowKeys(void)
53 : {
54 4 : KeySet *ks = ksNew(10,
55 : keyNew("user/tests/yajl/fancy/path/below/x/y/z",
56 : KEY_VALUE, "val1",
57 : KEY_END),
58 : keyNew("user/tests/yajl/fancy/path/below/v/y/z",
59 : KEY_VALUE, "val2",
60 : KEY_END),
61 : KS_END
62 : );
63 :
64 4 : ksRewind(ks); // shouldn't that be default?
65 4 : return ks;
66 : }
67 :
68 : /*
69 : KeySet *getBelowKeys(void)
70 : {
71 : KeySet *ks = ksNew(10,
72 : keyNew("user/tests/yajl",
73 : KEY_END),
74 : keyNew("user/tests/yajl/x",
75 : KEY_END),
76 : keyNew("user/tests/yajl/x/y",
77 : KEY_END),
78 : keyNew("user/tests/yajl/x/y/z",
79 : KEY_VALUE, "val1",
80 : KEY_END),
81 : keyNew("user/tests/yajl/v",
82 : KEY_END),
83 : keyNew("user/tests/yajl/v/y",
84 : KEY_END),
85 : keyNew("user/tests/yajl/v/y/z",
86 : KEY_VALUE, "val2",
87 : KEY_END),
88 : KS_END
89 : );
90 :
91 : ksRewind(ks); // shouldn't that be default?
92 : return ks;
93 : }
94 : */
95 :
96 4 : KeySet *getBooleanKeys(void)
97 : {
98 4 : KeySet *ks = ksNew(10,
99 : keyNew("user/tests/yajl/boolean_key",
100 : KEY_VALUE, "true",
101 : KEY_META, "type", "boolean",
102 : KEY_END),
103 : keyNew("user/tests/yajl/second_boolean_key",
104 : KEY_VALUE, "false",
105 : KEY_META, "type", "boolean",
106 : KEY_END),
107 : KS_END
108 : );
109 :
110 4 : ksRewind(ks);
111 4 : return ks;
112 : }
113 :
114 2 : KeySet *getNumberKeys(void)
115 : {
116 2 : KeySet *ks = ksNew(10,
117 : keyNew("user/tests/yajl/number_key",
118 : KEY_VALUE, "25",
119 : KEY_META, "type", "double",
120 : KEY_END),
121 : keyNew("user/tests/yajl/second_number_key",
122 : KEY_VALUE, "23002390202",
123 : KEY_META, "type", "double",
124 : KEY_END),
125 : keyNew("user/tests/yajl/third_number_key",
126 : KEY_VALUE, "230020202.233",
127 : KEY_META, "type", "double",
128 : KEY_END),
129 : KS_END
130 : );
131 :
132 2 : return ks;
133 : }
134 :
135 2 : KeySet *getStringKeys(void)
136 : {
137 2 : KeySet *ks = ksNew(10,
138 : keyNew("user/tests/yajl/string_key",
139 : KEY_VALUE, "25",
140 : KEY_END),
141 : keyNew("user/tests/yajl/second_string_key",
142 : KEY_VALUE, "some string",
143 : KEY_END),
144 : keyNew("user/tests/yajl/third_string_key",
145 : KEY_VALUE, "escape {}; \" \\ problem",
146 : KEY_END),
147 : KS_END
148 : );
149 :
150 2 : return ks;
151 : }
152 :
153 4 : KeySet *getMapKeys (void)
154 : {
155 4 : KeySet *ks = ksNew(10,
156 : keyNew("user/tests/yajl/map/string_key",
157 : KEY_VALUE, "25",
158 : KEY_END),
159 : keyNew("user/tests/yajl/map/second_string_key",
160 : KEY_VALUE, "some string",
161 : KEY_END),
162 : keyNew("user/tests/yajl/map/nested_map/string_key",
163 : KEY_VALUE, "25",
164 : KEY_END),
165 : keyNew("user/tests/yajl/map/nested_map/second_string_key",
166 : KEY_VALUE, "some string",
167 : KEY_END),
168 : keyNew("user/tests/yajl/second_map/string_key",
169 : KEY_VALUE, "25",
170 : KEY_END),
171 : keyNew("user/tests/yajl/second_map/second_string_key",
172 : KEY_VALUE, "some string",
173 : KEY_END),
174 : keyNew("user/tests/yajl/string_key",
175 : KEY_VALUE, "25",
176 : KEY_END),
177 : keyNew("user/tests/yajl/second_string_key",
178 : KEY_VALUE, "some string",
179 : KEY_END),
180 : KS_END
181 : );
182 :
183 4 : return ks;
184 : }
185 :
186 2 : KeySet *getArrayKeys(void)
187 : {
188 2 : KeySet *ks = ksNew(30,
189 : keyNew("user/tests/yajl/array",
190 : KEY_META, "array", "#_12",
191 : KEY_META, "binary", "",
192 : KEY_END),
193 : keyNew("user/tests/yajl/array/#0",
194 : KEY_VALUE, "true",
195 : KEY_META, "type", "boolean",
196 : KEY_END),
197 : keyNew("user/tests/yajl/array/#1",
198 : KEY_VALUE, "25",
199 : KEY_META, "type", "double",
200 : KEY_END),
201 : keyNew("user/tests/yajl/array/#2",
202 : KEY_VALUE, "some string",
203 : KEY_END),
204 : keyNew("user/tests/yajl/array/#3",
205 : KEY_VALUE, "0",
206 : KEY_META, "type", "double",
207 : KEY_END),
208 : keyNew("user/tests/yajl/array/#4",
209 : KEY_VALUE, "1",
210 : KEY_META, "type", "double",
211 : KEY_END),
212 : keyNew("user/tests/yajl/array/#5",
213 : KEY_VALUE, "2",
214 : KEY_META, "type", "double",
215 : KEY_END),
216 : keyNew("user/tests/yajl/array/#6",
217 : KEY_VALUE, "3",
218 : KEY_META, "type", "double",
219 : KEY_END),
220 : keyNew("user/tests/yajl/array/#7",
221 : KEY_VALUE, "more \\ a",
222 : KEY_END),
223 : keyNew("user/tests/yajl/array/#8",
224 : KEY_VALUE, "string \"",
225 : KEY_END),
226 : keyNew("user/tests/yajl/array/#9",
227 : KEY_VALUE, "string abc",
228 : KEY_END),
229 : keyNew("user/tests/yajl/array/#_10", // hack for keeping sort order
230 : KEY_VALUE, "def abc",
231 : KEY_END),
232 : keyNew("user/tests/yajl/array/#_11",
233 : KEY_VALUE, "false",
234 : KEY_META, "type", "boolean",
235 : KEY_END),
236 : keyNew("user/tests/yajl/array/#_12",
237 : KEY_VALUE, "42",
238 : KEY_META, "type", "double",
239 : KEY_END),
240 : /*
241 : keyNew("user/tests/yajl/array/#___333",
242 : KEY_END),
243 : keyNew("user/tests/yajl/array/#_#__#333",
244 : KEY_VALUE, "42",
245 : KEY_META, "type", "number",
246 : KEY_END),
247 : keyNew("user/tests/yajl/array/#______4444", // number of _ not intuitive
248 : KEY_END),
249 : keyNew("user/tests/yajl/array/#_#__#___#4444", // gets quite long... (but works!)
250 : KEY_END),
251 : */
252 : KS_END
253 : );
254 :
255 2 : return ks;
256 : }
257 :
258 2 : KeySet *getOpenICCKeys(void)
259 : {
260 2 : KeySet *ks = ksNew(60,
261 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera",
262 : KEY_META, "array", "#1",
263 : KEY_META, "binary", "",
264 : KEY_END),
265 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/prefix",
266 : KEY_VALUE, "EXIF_",
267 : KEY_END),
268 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/EXIF_model",
269 : KEY_VALUE, "ShinyGlass", KEY_END),
270 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/EXIF_serial",
271 : KEY_VALUE, "1200000", KEY_END),
272 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/EXIF_mnft",
273 : KEY_VALUE, "GLAS", KEY_END),
274 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/EXIF_manufacturer",
275 : KEY_VALUE, "Glasshuette", KEY_END),
276 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/icc_profile",
277 : KEY_VALUE, "profile_name.icc",
278 : KEY_END),
279 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/creation_date",
280 : KEY_VALUE, "05/08/11 11:59:50",
281 : KEY_END),
282 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/expire_date",
283 : KEY_VALUE, "08/08/11 11:59:50",
284 : KEY_END),
285 : //Typo in example:
286 : //keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/automatic_assignment",
287 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/automatic_assigment",
288 : KEY_VALUE, "1", KEY_END),
289 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#0/comment",
290 : KEY_VALUE, "nonsense example", KEY_END),
291 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/prefix",
292 : KEY_VALUE, "EXIF_", KEY_END),
293 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/EXIF_model",
294 : KEY_VALUE, "Knips", KEY_END),
295 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/EXIF_serial",
296 : KEY_VALUE, "3400000", KEY_END),
297 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/EXIF_mnft",
298 : KEY_VALUE, "CON", KEY_END),
299 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/EXIF_manufacturer",
300 : KEY_VALUE, "ConquerLight",
301 : KEY_END),
302 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/icc_profile",
303 : KEY_VALUE, "profile_name2.icc",
304 : KEY_END),
305 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/creation_date",
306 : KEY_VALUE, "05/08/11 11:59:50",
307 : KEY_END),
308 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/expire_date",
309 : KEY_VALUE, "08/08/11 11:59:50",
310 : KEY_END),
311 : // keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/automatic_assignment",
312 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/camera/#1/automatic_assigment",
313 : KEY_VALUE, "1", KEY_END),
314 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor",
315 : KEY_META, "array", "#1",
316 : KEY_META, "binary", "",
317 : KEY_END),
318 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/prefix",
319 : KEY_VALUE, "EDID_", KEY_END),
320 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_mnft_id",
321 : KEY_VALUE, "12", KEY_END),
322 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_model_id",
323 : KEY_VALUE, "123", KEY_END),
324 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_model",
325 : KEY_VALUE, "LCD1", KEY_END),
326 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_serial",
327 : KEY_VALUE, "ABCD", KEY_END),
328 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_red_x",
329 : KEY_VALUE, "0.599609", KEY_END),
330 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_red_y",
331 : KEY_VALUE, "0.34375", KEY_END),
332 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_green_x",
333 : KEY_VALUE, "0.320312", KEY_END),
334 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_green_y",
335 : KEY_VALUE, "0.554688", KEY_END),
336 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_blue_x",
337 : KEY_VALUE, "0.150391", KEY_END),
338 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_blue_y",
339 : KEY_VALUE, "0.120117", KEY_END),
340 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_white_x",
341 : KEY_VALUE, "0.313477", KEY_END),
342 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_white_y",
343 : KEY_VALUE, "0.329102", KEY_END),
344 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_gamma",
345 : KEY_VALUE, "2.2", KEY_END),
346 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_mnft",
347 : KEY_VALUE, "VEN", KEY_END),
348 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_manufacturer",
349 : KEY_VALUE, "Vendor1", KEY_END),
350 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#0/EDID_date",
351 : KEY_VALUE, "2007-T16", KEY_END),
352 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/prefix",
353 : KEY_VALUE, "EDID_", KEY_END),
354 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_mnft_id",
355 : KEY_VALUE, "34", KEY_END),
356 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_model_id",
357 : KEY_VALUE, "456", KEY_END),
358 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_model",
359 : KEY_VALUE, "other monitor", KEY_END),
360 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_serial",
361 : KEY_VALUE, "other serial", KEY_END),
362 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_red_x",
363 : KEY_VALUE, "0.599609", KEY_END),
364 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_red_y",
365 : KEY_VALUE, "0.34375", KEY_END),
366 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_green_x",
367 : KEY_VALUE, "0.320312", KEY_END),
368 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_green_y",
369 : KEY_VALUE, "0.554688", KEY_END),
370 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_blue_x",
371 : KEY_VALUE, "0.150391", KEY_END),
372 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_blue_y",
373 : KEY_VALUE, "0.120117", KEY_END),
374 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_white_x",
375 : KEY_VALUE, "0.313477", KEY_END),
376 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_white_y",
377 : KEY_VALUE, "0.329102", KEY_END),
378 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_gamma",
379 : KEY_VALUE, "2.2", KEY_END),
380 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_mnft",
381 : KEY_VALUE, "NEC", KEY_END),
382 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_manufacturer",
383 : KEY_VALUE, "NEC", KEY_END),
384 : keyNew("user/tests/yajl/org/freedesktop/openicc/device/monitor/#1/EDID_date",
385 : KEY_VALUE, "2001-T12", KEY_END),
386 :
387 :
388 : KS_END
389 : );
390 :
391 2 : return ks;
392 : }
393 :
394 0 : KeySet *getSomeBelowKeys(void)
395 : {
396 0 : return ksNew(10,
397 : keyNew("user/some/path/below",
398 : KEY_END),
399 : keyNew("user/some/path/below/tests",
400 : KEY_END),
401 : keyNew("user/some/path/below/tests/yajl",
402 : KEY_END),
403 : keyNew("user/some/path/below/tests/yajl/boolean_key",
404 : KEY_VALUE, "true",
405 : KEY_META, "type", "boolean",
406 : KEY_END),
407 : keyNew("user/some/path/below/tests/yajl/second_boolean_key",
408 : KEY_VALUE, "false",
409 : KEY_META, "type", "boolean",
410 : KEY_END),
411 : KS_END);
412 : }
413 :
414 : // clang-format on
415 :
416 : KeySet * modules;
417 :
418 16 : void test_json (const char * fileName, KeySet * compareKeySet, KeySet * conf)
419 : {
420 16 : printf ("Test json with %s\n", srcdir_file (fileName));
421 :
422 16 : Plugin * plugin = elektraPluginOpen ("yajl", modules, conf, 0);
423 16 : exit_if_fail (plugin != 0, "could not open plugin");
424 : // printf ("Test with %s\n", srcdir_file(fileName));
425 :
426 16 : Key * parentKey = keyNew ("user/tests/yajl", KEY_VALUE, srcdir_file (fileName), KEY_END);
427 16 : KeySet * keys = ksNew (0, KS_END);
428 16 : succeed_if (plugin->kdbGet (plugin, keys, parentKey) == 1, "kdbGet was not successful");
429 16 : succeed_if (output_error (parentKey), "error in kdbGet");
430 16 : succeed_if (output_warnings (parentKey), "warnings in kdbGet");
431 :
432 : /*
433 : output_keyset(keys);
434 : output_keyset(compareKeySet);
435 : */
436 16 : compare_keyset (keys, compareKeySet);
437 :
438 16 : keySetString (parentKey, elektraFilename ());
439 : // printf("File name is: %s\n", keyString(parentKey));
440 :
441 16 : succeed_if (plugin->kdbSet (plugin, keys, parentKey) == 1, "kdbSet was not successful");
442 16 : succeed_if (output_error (parentKey), "error in kdbSet");
443 16 : succeed_if (output_warnings (parentKey), "warnings in kdbSet");
444 :
445 16 : succeed_if (compare_line_files (srcdir_file (fileName), keyString (parentKey)), "files do not match as expected");
446 16 : elektraUnlink (keyString (parentKey));
447 :
448 : /*
449 : printf ("The keys we read out are:\n");
450 : output_keyset(keys);
451 : printf ("The keys we compared it with:\n");
452 : output_keyset(compareKeySet);
453 : */
454 :
455 16 : keyDel (parentKey);
456 16 : ksDel (keys);
457 16 : ksDel (compareKeySet);
458 :
459 16 : elektraPluginClose (plugin, 0);
460 16 : }
461 :
462 44 : void test_readWrite (const char * fileName, KeySet * conf)
463 : {
464 44 : printf ("Test read write with %s\n", srcdir_file (fileName));
465 :
466 44 : Plugin * plugin = elektraPluginOpen ("yajl", modules, conf, 0);
467 44 : exit_if_fail (plugin != 0, "could not open plugin");
468 : // printf ("Test with %s\n", srcdir_file(fileName));
469 :
470 44 : Key * parentKey = keyNew ("user/tests/yajl", KEY_VALUE, srcdir_file (fileName), KEY_END);
471 44 : KeySet * keys = ksNew (0, KS_END);
472 44 : succeed_if (plugin->kdbGet (plugin, keys, parentKey) == 1, "kdbGet was not successful");
473 44 : succeed_if (output_error (parentKey), "error in kdbGet");
474 44 : succeed_if (output_warnings (parentKey), "warnings in kdbGet");
475 :
476 : // output_keyset(keys);
477 :
478 44 : keySetString (parentKey, elektraFilename ());
479 : // keySetString(parentKey, "/proc/self/fd/1");
480 : // printf("File name is: %s\n", keyString(parentKey));
481 :
482 44 : succeed_if (plugin->kdbSet (plugin, keys, parentKey) == 1, "kdbSet was not successful");
483 44 : succeed_if (output_error (parentKey), "error in kdbSet");
484 44 : succeed_if (output_warnings (parentKey), "warnings in kdbSet");
485 :
486 44 : succeed_if (compare_line_files (srcdir_file (fileName), keyString (parentKey)), "files do not match as expected");
487 44 : elektraUnlink (keyString (parentKey));
488 :
489 44 : keyDel (parentKey);
490 44 : ksDel (keys);
491 :
492 44 : elektraPluginClose (plugin, 0);
493 44 : }
494 :
495 : // TODO: make nicer and put to test framework
496 : #define succeed_if_equal(x, y) succeed_if (!strcmp (x, y), x)
497 :
498 2 : void test_nextNotBelow (void)
499 : {
500 2 : printf ("Test next not below\n");
501 :
502 2 : KeySet * ks = getNullKeys ();
503 2 : ksRewind (ks);
504 2 : Key * k = elektraNextNotBelow (ks);
505 2 : succeed_if_equal (keyName (k), "user/tests/yajl/nullkey");
506 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/nullkey");
507 2 : k = elektraNextNotBelow (ks);
508 2 : succeed_if_equal (keyName (k), "user/tests/yajl/second_nullkey");
509 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/second_nullkey");
510 2 : k = elektraNextNotBelow (ks);
511 2 : succeed_if (k == 0, "not at end of keyset");
512 2 : succeed_if (ksCurrent (ks) == 0, "not at end of keyset");
513 2 : ksDel (ks);
514 :
515 2 : ks = getBooleanKeys ();
516 2 : ksRewind (ks);
517 2 : k = elektraNextNotBelow (ks);
518 2 : succeed_if_equal (keyName (k), "user/tests/yajl/boolean_key");
519 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/boolean_key");
520 2 : k = elektraNextNotBelow (ks);
521 2 : succeed_if_equal (keyName (k), "user/tests/yajl/second_boolean_key");
522 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/second_boolean_key");
523 2 : k = elektraNextNotBelow (ks);
524 2 : succeed_if (k == 0, "not at end of keyset");
525 2 : succeed_if (ksCurrent (ks) == 0, "not at end of keyset");
526 2 : ksDel (ks);
527 :
528 2 : ks = getBelowKeys ();
529 2 : ksRewind (ks);
530 2 : k = elektraNextNotBelow (ks);
531 2 : succeed_if_equal (keyName (k), "user/tests/yajl/fancy/path/below/v/y/z");
532 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/fancy/path/below/v/y/z");
533 2 : k = elektraNextNotBelow (ks);
534 2 : succeed_if_equal (keyName (k), "user/tests/yajl/fancy/path/below/x/y/z");
535 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/fancy/path/below/x/y/z");
536 2 : k = elektraNextNotBelow (ks);
537 2 : succeed_if (k == 0, "not at end of keyset");
538 2 : succeed_if (ksCurrent (ks) == 0, "not at end of keyset");
539 2 : ksDel (ks);
540 :
541 2 : ks = getMapKeys ();
542 2 : ksRewind (ks);
543 2 : k = elektraNextNotBelow (ks);
544 2 : succeed_if_equal (keyName (k), "user/tests/yajl/map/nested_map/second_string_key");
545 2 : succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/map/nested_map/second_string_key");
546 2 : ksDel (ks);
547 2 : }
548 :
549 2 : void test_reverseLevel (void)
550 : {
551 2 : Key * k = keyNew ("user/abc/defghi/jkl", KEY_END);
552 2 : int level = 0;
553 : char buffer[20];
554 :
555 2 : printf ("Test reverse level\n");
556 :
557 2 : keyNameReverseIterator it = elektraKeyNameGetReverseIterator (k);
558 12 : while (elektraKeyNameReverseNext (&it))
559 : {
560 8 : level++;
561 :
562 8 : strncpy (buffer, it.current, it.size);
563 8 : buffer[it.size] = 0;
564 :
565 : // printf("Level %d name: \"%s\"\n",level,buffer);
566 8 : switch (level)
567 : {
568 : case 4:
569 2 : succeed_if (strcmp (buffer, "user") == 0, "keyNameGetOneLevel not correct");
570 : break;
571 : case 3:
572 2 : succeed_if (strcmp (buffer, "abc") == 0, "keyNameGetOneLevel not correct");
573 : break;
574 : case 2:
575 2 : succeed_if (strcmp (buffer, "defghi") == 0, "keyNameGetOneLevel not correct");
576 : break;
577 : case 1:
578 2 : succeed_if (strcmp (buffer, "jkl") == 0, "keyNameGetOneLevel not correct");
579 : break;
580 : default:
581 0 : succeed_if (0, "should not reach case statement");
582 : }
583 : }
584 :
585 2 : keySetName (k, "user////\\/abc/\\/def\\/ghi////jkl\\/\\/");
586 :
587 2 : level = 0;
588 2 : it = elektraKeyNameGetReverseIterator (k);
589 12 : while (elektraKeyNameReverseNext (&it))
590 : {
591 8 : level++;
592 :
593 8 : strncpy (buffer, it.current, it.size);
594 8 : buffer[it.size] = 0;
595 :
596 : // printf("Level %d name: \"%s\"\n",level,buffer);
597 8 : switch (level)
598 : {
599 : case 4:
600 2 : succeed_if (strcmp (buffer, "user") == 0, "keyNameGetOneLevel not correct");
601 : break;
602 : case 3:
603 2 : succeed_if (strcmp (buffer, "\\/abc") == 0, "keyNameGetOneLevel not correct");
604 : break;
605 : case 2:
606 2 : succeed_if (strcmp (buffer, "\\/def\\/ghi") == 0, "keyNameGetOneLevel not correct");
607 : break;
608 : case 1:
609 2 : succeed_if (strcmp (buffer, "jkl\\/\\/") == 0, "keyNameGetOneLevel not correct");
610 : break;
611 : default:
612 0 : succeed_if (0, "should not reach case statement");
613 : }
614 : }
615 :
616 2 : keyDel (k);
617 2 : }
618 :
619 2 : void test_countLevel (void)
620 : {
621 2 : Key * k = keyNew ("user///", KEY_END);
622 2 : succeed_if (elektraKeyCountLevel (k) == 1, "count level wrong");
623 2 : keySetName (k, "user/x");
624 2 : succeed_if (elektraKeyCountLevel (k) == 2, "count level wrong");
625 2 : keySetName (k, "user/x/z/f");
626 2 : succeed_if (elektraKeyCountLevel (k) == 4, "count level wrong");
627 2 : keySetName (k, "user/x/z\\/f");
628 2 : succeed_if (elektraKeyCountLevel (k) == 3, "count level wrong");
629 :
630 2 : Key * k2 = keyNew ("user/x/z", KEY_END);
631 2 : succeed_if (elektraKeyCountEqualLevel (k, k2) == 2, "equal level wrong");
632 :
633 2 : keySetName (k, "user/x/z\\/f");
634 2 : keySetName (k2, "user/x/z\\/f");
635 2 : succeed_if (elektraKeyCountEqualLevel (k, k2) == 3, "equal level wrong");
636 :
637 2 : keySetName (k, "user/x/v/ffkkk");
638 2 : keySetName (k2, "user/x/v/ff");
639 2 : succeed_if (elektraKeyCountEqualLevel (k, k2) == 3, "equal level wrong");
640 :
641 2 : keySetName (k, "user/x/v/ff");
642 2 : keySetName (k2, "user/x/v/ff");
643 2 : succeed_if (elektraKeyCountEqualLevel (k, k2) == 4, "equal level wrong");
644 :
645 2 : keySetName (k, "user/x\\abc/v/ff");
646 2 : keySetName (k2, "user/x\\abc/v/ff");
647 2 : succeed_if (elektraKeyCountEqualLevel (k, k2) == 4, "equal level wrong");
648 :
649 2 : keyDel (k);
650 2 : keyDel (k2);
651 2 : }
652 :
653 2 : void test_writing (void)
654 : {
655 2 : KeySet * conf = ksNew (0, KS_END);
656 2 : Key * parentKey = keyNew ("user/tests/yajl", KEY_VALUE, "/proc/self/fd/1", KEY_END);
657 :
658 2 : Plugin * plugin = elektraPluginOpen ("yajl", modules, conf, 0);
659 2 : exit_if_fail (plugin != 0, "could not open plugin");
660 :
661 2 : KeySet * ks = getNullKeys ();
662 : /*
663 : output_keyset(ks);
664 :
665 : succeed_if(plugin->kdbSet(plugin, ks, parentKey) == 1, "kdbSet was not successful");
666 : succeed_if(plugin->kdbSet(plugin, getBooleanKeys(), parentKey) == 1, "kdbSet was not successful");
667 : succeed_if(plugin->kdbSet(plugin, getNumberKeys(), parentKey) == 1, "kdbSet was not successful");
668 : succeed_if(plugin->kdbSet(plugin, getStringKeys(), parentKey) == 1, "kdbSet was not successful");
669 : succeed_if(plugin->kdbSet(plugin, getMapKeys(), parentKey) == 1, "kdbSet was not successful");
670 : succeed_if(plugin->kdbSet(plugin, getArrayKeys(), parentKey) == 1, "kdbSet was not successful");
671 : ksDel(ks); ks = getOpenICCKeys();
672 : succeed_if(plugin->kdbSet(plugin, ks, parentKey) == 1, "kdbSet was not successful");
673 : */
674 :
675 2 : ksDel (ks);
676 2 : keyDel (parentKey);
677 :
678 2 : elektraPluginClose (plugin, 0);
679 2 : }
680 :
681 2 : int main (int argc, char ** argv)
682 : {
683 2 : printf ("YAJL TESTS\n");
684 2 : printf ("==================\n\n");
685 :
686 2 : modules = ksNew (0, KS_END);
687 2 : elektraModulesInit (modules, 0);
688 :
689 2 : init (argc, argv);
690 :
691 2 : test_nextNotBelow ();
692 2 : test_reverseLevel ();
693 2 : test_countLevel ();
694 2 : test_writing ();
695 :
696 2 : test_json ("yajl/testdata_null.json", getNullKeys (), ksNew (0, KS_END));
697 2 : test_json ("yajl/testdata_boolean.json", getBooleanKeys (), ksNew (0, KS_END));
698 2 : test_json ("yajl/testdata_number.json", getNumberKeys (), ksNew (0, KS_END));
699 2 : test_json ("yajl/testdata_string.json", getStringKeys (), ksNew (0, KS_END));
700 2 : test_json ("yajl/testdata_maps.json", getMapKeys (), ksNew (0, KS_END));
701 2 : test_json ("yajl/testdata_array.json", getArrayKeys (), ksNew (0, KS_END));
702 2 : test_json ("yajl/testdata_below.json", getBelowKeys (), ksNew (0, KS_END));
703 2 : test_json ("yajl/OpenICC_device_config_DB.json", getOpenICCKeys (), ksNew (0, KS_END));
704 :
705 : // TODO currently do not have a KeySet, wait for C-plugin to make
706 : // it easy to generate it..
707 2 : test_readWrite ("yajl/empty_object.json", ksNew (0, KS_END));
708 2 : test_readWrite ("yajl/empty_array.json", ksNew (0, KS_END));
709 2 : test_readWrite ("yajl/top_level_string.json", ksNew (0, KS_END));
710 2 : test_readWrite ("yajl/top_level_integer.json", ksNew (0, KS_END));
711 2 : test_readWrite ("yajl/rfc_object.json", ksNew (0, KS_END));
712 2 : test_readWrite ("yajl/rfc_array.json", ksNew (0, KS_END));
713 2 : test_readWrite ("yajl/testdata_array_mixed.json", ksNew (0, KS_END));
714 2 : test_readWrite ("yajl/testdata_array_in_array.json", ksNew (0, KS_END));
715 2 : test_readWrite ("yajl/testdata_array_in_array_anon_map.json", ksNew (0, KS_END));
716 2 : test_readWrite ("yajl/testdata_array_nested.json", ksNew (0, KS_END));
717 2 : test_readWrite ("yajl/testdata_array_broken.json", ksNew (0, KS_END));
718 2 : test_readWrite ("yajl/testdata_array_special_ending.json", ksNew (0, KS_END));
719 2 : test_readWrite ("yajl/testdata_array_outside.json", ksNew (0, KS_END));
720 2 : test_readWrite ("yajl/keyframes_complex.json", ksNew (0, KS_END));
721 2 : test_readWrite ("yajl/testdata_array_mixed2.json", ksNew (0, KS_END));
722 2 : test_readWrite ("yajl/testdata_array_special_start.json", ksNew (0, KS_END));
723 2 : test_readWrite ("yajl/testdata_array_mixed3.json", ksNew (0, KS_END));
724 2 : test_readWrite ("yajl/testdata_empty_in_array.json", ksNew (0, KS_END));
725 2 : test_readWrite ("yajl/testdata_empty_in_map.json", ksNew (0, KS_END));
726 2 : test_readWrite ("yajl/testdata_empty_in_array1.json", ksNew (0, KS_END));
727 2 : test_readWrite ("yajl/testdata_empty_in_map2.json", ksNew (0, KS_END));
728 2 : test_readWrite ("yajl/testdata_empty_in_map1.json", ksNew (0, KS_END));
729 :
730 2 : elektraModulesClose (modules, 0);
731 2 : ksDel (modules);
732 :
733 2 : print_result ("test_yajl");
734 :
735 2 : return nbError;
736 : }
|