LCOV - code coverage report
Current view: top level - src/plugins/yajl - testmod_yajl.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 222 228 97.4 %
Date: 2019-09-12 12:28:41 Functions: 15 17 88.2 %

          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             : }

Generated by: LCOV version 1.13