LCOV - code coverage report
Current view: top level - src/plugins/typechecker - testmod_typechecker.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 45 45 100.0 %
Date: 2019-09-12 12:28:41 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for the typechecker 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             : #define LONG_REGEX                                                                                                                         \
      18             :         "-[1-9]|-214748364[0-8]|-?[1-9][0-9]|-?[1-9][0-9][0-9]|-?[1-9][0-9][0-9][0-9]|-?[1-9][0-9][0-9][0-9][0-9]|-?[1-9][0-9][0-9][0-9][" \
      19             :         "0-9][0-9]|-?[1-9][0-9][0-9][0-9][0-9][0-9][0-9]|-?[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-?[1-9][0-9][0-9][0-9][0-9][0-9][0-9]" \
      20             :         "[0-9][0-9]|-?1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-?20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-?21[0-3][0-9][0-9][0-"  \
      21             :         "9][0-9][0-9][0-9][0-9]|-?214[0-6][0-9][0-9][0-9][0-9][0-9][0-9]|-?2147[0-3][0-9][0-9][0-9][0-9][0-9]|-?21474[0-7][0-9][0-9][0-9]" \
      22             :         "[0-9]|-?214748[0-2][0-9][0-9][0-9]|-?2147483[0-5][0-9][0-9]|-?21474836[0-3][0-9]|[0-9]|214748364[0-7]"
      23             : #define PARENT_KEY_NAME "user/tests/typechecker"
      24             : #define KEY1_NAME PARENT_KEY_NAME "/key1"
      25             : #define KEY2_NAME PARENT_KEY_NAME "/key2"
      26             : #define KEY3_NAME PARENT_KEY_NAME "/key3"
      27             : #define KEY4_NAME PARENT_KEY_NAME "/key4"
      28             : 
      29           2 : static KeySet * keysetWithStandardFunctions (void)
      30             : {
      31           2 :         KeySet * ks = ksNew (0, KS_END);
      32             : 
      33           2 :         ksAppendKey (ks, keyNew (PARENT_KEY_NAME "/elektra/spec/fallback/#", KEY_META, "elektra/spec/order", "10", KEY_META,
      34             :                                  "elektra/spec/impl", "fallback a b = link a b", KEY_END));
      35             : 
      36           2 :         ksAppendKey (ks, keyNew (PARENT_KEY_NAME "/elektra/spec/override/#", KEY_META, "elektra/spec/order", "10", KEY_META,
      37             :                                  "elektra/spec/impl", "override a b = link a b", KEY_END));
      38             : 
      39           2 :         ksAppendKey (ks, keyNew (PARENT_KEY_NAME "/elektra/spec/check/validation", KEY_META, "elektra/spec/impl",
      40             :                                  "checkvalidation a b = intersect a b", KEY_END));
      41             : 
      42           2 :         ksAppendKey (ks, keyNew (PARENT_KEY_NAME "/elektra/spec/check/long", KEY_META, "elektra/spec/impl",
      43             :                                  "checklong a = intersect a (Key :: Regex \"" LONG_REGEX "\")", KEY_END));
      44             : 
      45           2 :         return ks;
      46             : }
      47             : 
      48           1 : static void test_basics (void)
      49             : {
      50           1 :         printf ("test basics\n");
      51             : 
      52           1 :         Key * parentKey = keyNew (PARENT_KEY_NAME, KEY_END);
      53           1 :         KeySet * conf = ksNew (0, KS_END);
      54           1 :         PLUGIN_OPEN ("typechecker");
      55             : 
      56           1 :         KeySet * ks = keysetWithStandardFunctions ();
      57             : 
      58           1 :         ksAppendKey (ks, keyNew (KEY1_NAME, KEY_VALUE, "2500", KEY_META, "check/validation",
      59             :                                  "[0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-4][0-9][0-9][0-9]|5000", KEY_END));
      60             : 
      61           1 :         ksAppendKey (ks,
      62             :                      keyNew (KEY2_NAME, KEY_VALUE, "500", KEY_META, "fallback/#1", KEY1_NAME, KEY_META, "check/validation",
      63             :                              "-[1-9]|-1[0-9][0-9]|-2[0-4][0-9]|-250|-?[1-9][0-9]|[0-9]|[1-9][0-9][0-9]|[1-6][0-9][0-9][0-9]|7[0-4][0-9][0-"
      64             :                              "9]|7500",
      65             :                              KEY_END));
      66             : 
      67           1 :         ksAppendKey (ks, keyNew (KEY3_NAME, KEY_META, "fallback/#1", KEY1_NAME, KEY_META, "fallback/#2", KEY2_NAME, KEY_END));
      68             : 
      69             : 
      70           1 :         ksAppendKey (ks, keyNew (KEY4_NAME, KEY_META, "fallback/#1", KEY1_NAME, KEY_META, "override/#1", KEY2_NAME, KEY_META, "check/long",
      71             :                                  "", KEY_END));
      72             : 
      73           1 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == ELEKTRA_PLUGIN_STATUS_NO_UPDATE, "call to kdbSet was not successful");
      74           1 :         succeed_if (output_error (parentKey), "error(s) found but none expected");
      75             : 
      76           1 :         keyDel (parentKey);
      77           1 :         ksDel (ks);
      78           1 :         PLUGIN_CLOSE ();
      79           1 : }
      80             : 
      81           1 : static void test_invalid_ranges_override (void)
      82             : {
      83           1 :         printf ("test invalid ranges fallback\n");
      84             : 
      85           1 :         Key * parentKey = keyNew (PARENT_KEY_NAME, KEY_END);
      86           1 :         KeySet * conf = ksNew (0, KS_END);
      87           1 :         PLUGIN_OPEN ("typechecker");
      88             : 
      89           1 :         KeySet * ks = keysetWithStandardFunctions ();
      90             : 
      91           1 :         ksAppendKey (ks, keyNew (KEY1_NAME, KEY_VALUE, "2500", KEY_META, "check/validation",
      92             :                                  "[0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-4][0-9][0-9][0-9]|5000", KEY_END));
      93             : 
      94           1 :         ksAppendKey (ks, keyNew (KEY2_NAME, KEY_VALUE, "500", KEY_META, "override/#1", KEY1_NAME, KEY_META, "check/validation",
      95             :                                  "[7-9][2-9][0-9][0-9]|10000", KEY_END));
      96             : 
      97           1 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == ELEKTRA_PLUGIN_STATUS_ERROR, "call to kdbSet was not successful");
      98           1 :         succeed_if (!output_error (parentKey), "no errors found but one is expected");
      99             : 
     100           1 :         keyDel (parentKey);
     101           1 :         ksDel (ks);
     102           1 :         PLUGIN_CLOSE ();
     103           1 : }
     104             : 
     105           1 : int main (int argc, char ** argv)
     106             : {
     107           1 :         printf ("TYPECHECKER  TESTS\n");
     108           1 :         printf ("==================\n\n");
     109             : 
     110           1 :         init (argc, argv);
     111             : 
     112           1 :         test_basics ();
     113           1 :         test_invalid_ranges_override ();
     114             : 
     115           1 :         print_result ("testmod_typechecker");
     116             : 
     117           1 :         return nbError;
     118             : }

Generated by: LCOV version 1.13