LCOV - code coverage report
Current view: top level - src/bindings/glib/tests - testglib_keyset.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 93 93 100.0 %
Date: 2022-05-21 16:19:22 Functions: 5 5 100.0 %

          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 "gelektra-keyset.h"
      10             : #include <glib-object.h>
      11             : #include <tests.h>
      12             : 
      13           2 : static void test_ctor (void)
      14             : {
      15           2 :         GElektraKeySet * ks;
      16             : 
      17           2 :         ks = gelektra_keyset_new (0);
      18           2 :         succeed_if (ks != NULL, "unable to create keyset");
      19           2 :         g_object_unref (ks);
      20             : 
      21           2 :         GElektraKey * key = gelektra_key_new ("user:/foo", GELEKTRA_KEY_END);
      22           2 :         ks = gelektra_keyset_new (10, key, GELEKTRA_KEYSET_END);
      23           2 :         succeed_if (ks != NULL, "unable to create keyset");
      24           2 :         g_object_unref (ks);
      25             : 
      26           2 :         KeySet * cks = ksNew (0, KS_END);
      27           2 :         ks = gelektra_keyset_make (cks);
      28           2 :         succeed_if (ks->keyset == cks, "new keyset not wrapped");
      29           2 :         g_object_unref (ks);
      30           2 : }
      31             : 
      32           2 : static void test_basic (void)
      33             : {
      34           2 :         GElektraKeySet *ks1, *ks2;
      35           2 :         GElektraKey * key;
      36             : 
      37           2 :         ks1 = gelektra_keyset_new (0);
      38           2 :         succeed_if (gelektra_keyset_len (ks1) == 0, "len must be 0");
      39             : 
      40           2 :         gelektra_keyset_append (ks1, gelektra_key_new ("user:/foo", GELEKTRA_KEY_END));
      41           2 :         succeed_if (gelektra_keyset_len (ks1) == 1, "len must be 1");
      42             : 
      43           2 :         ks2 = gelektra_keyset_dup (ks1);
      44           2 :         succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1");
      45             : 
      46           2 :         gelektra_keyset_clear (ks2);
      47           2 :         succeed_if (gelektra_keyset_len (ks2) == 0, "len must be 0");
      48             : 
      49           2 :         gelektra_keyset_copy (ks1, ks2);
      50           2 :         succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1 again");
      51             : 
      52           2 :         gelektra_keyset_clear (ks2);
      53           2 :         gelektra_keyset_append (ks2, gelektra_key_new ("user:/bar", GELEKTRA_KEY_END));
      54           2 :         gelektra_keyset_append_keyset (ks1, ks2);
      55           2 :         succeed_if (gelektra_keyset_len (ks1) == 2, "len must be 2");
      56             : 
      57           2 :         key = gelektra_keyset_pop (ks1);
      58           2 :         succeed_if (gelektra_keyset_len (ks1) == 1, "len must be 1 again");
      59           2 :         g_object_unref (key);
      60             : 
      61           2 :         key = gelektra_key_new ("user:/", GELEKTRA_KEY_END);
      62           2 :         ks2 = gelektra_keyset_cut (ks1, key);
      63           2 :         succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1");
      64           2 :         g_object_unref (key);
      65           2 :         g_object_unref (ks2);
      66             : 
      67           2 :         g_object_unref (ks1);
      68           2 : }
      69             : 
      70           2 : static void test_searching (void)
      71             : {
      72           2 :         GElektraKeySet * ks;
      73           2 :         GElektraKey *key1, *key2;
      74           2 :         const char * name = "user:/bar";
      75             : 
      76           2 :         key1 = gelektra_key_new (name, GELEKTRA_KEY_END);
      77           2 :         g_object_ref (key1);
      78           2 :         ks = gelektra_keyset_new (3, gelektra_key_new ("user:/foo", GELEKTRA_KEY_END), key1,
      79             :                                   gelektra_key_new ("user:/foobar", GELEKTRA_KEY_END), GELEKTRA_KEYSET_END);
      80             : 
      81           2 :         key2 = gelektra_keyset_lookup (ks, key1, GELEKTRA_KDB_O_NONE);
      82           2 :         succeed_if (gelektra_key_cmp (key1, key2) == 0, "lookup returned different key");
      83           2 :         g_object_unref (key2);
      84             : 
      85           2 :         key2 = gelektra_keyset_lookup_byname (ks, name, GELEKTRA_KDB_O_NONE);
      86           2 :         succeed_if (gelektra_key_cmp (key1, key2) == 0, "lookup returned different key");
      87           2 :         g_object_unref (key2);
      88             : 
      89           2 :         g_object_unref (key1);
      90           2 :         g_object_unref (ks);
      91           2 : }
      92             : 
      93           2 : static void test_iterating (void)
      94             : {
      95           2 :         GElektraKeySet * ks;
      96           2 :         GElektraKey *key1, *key2, *tmpkey;
      97             : 
      98           2 :         key1 = gelektra_key_new ("user:/a", GELEKTRA_KEY_END);
      99           2 :         g_object_ref (key1);
     100           2 :         key2 = gelektra_key_new ("user:/c", GELEKTRA_KEY_END);
     101           2 :         g_object_ref (key2);
     102           2 :         ks = gelektra_keyset_new (3, key1, gelektra_key_new ("user:/b", GELEKTRA_KEY_END), key2, GELEKTRA_KEYSET_END);
     103             : 
     104           2 :         gssize pos = 0;
     105           8 :         while ((tmpkey = gelektra_keyset_at (ks, pos)) != NULL)
     106             :         {
     107           6 :                 ++pos;
     108           6 :                 g_object_unref (tmpkey);
     109             :         }
     110           2 :         succeed_if (pos == 3, "some keys are missing");
     111             : 
     112           2 :         tmpkey = gelektra_keyset_head (ks);
     113           2 :         succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_head returned unexpected key");
     114           2 :         g_object_unref (tmpkey);
     115             : 
     116           2 :         tmpkey = gelektra_keyset_tail (ks);
     117           2 :         succeed_if (gelektra_key_cmp (tmpkey, key2) == 0, "keyset_tail returned unexpected key");
     118           2 :         g_object_unref (tmpkey);
     119             : 
     120           2 :         tmpkey = gelektra_keyset_at (ks, 0);
     121           2 :         succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_atcursor returned unexpected key");
     122           2 :         g_object_unref (tmpkey);
     123             : 
     124           2 :         g_object_unref (key1);
     125           2 :         g_object_unref (key2);
     126           2 :         g_object_unref (ks);
     127           2 : }
     128             : 
     129           2 : int main (int argc, char ** argv)
     130             : {
     131           2 :         printf ("KEYSET TESTS\n");
     132           2 :         printf ("===============\n\n");
     133             : 
     134           2 :         init (argc, argv);
     135             : 
     136           2 :         test_ctor ();
     137           2 :         test_basic ();
     138           2 :         test_searching ();
     139           2 :         test_iterating ();
     140             : 
     141           2 :         printf ("\n%s RESULTS: %d test(s) done. %d error(s).\n", argv[0], nbTest, nbError);
     142           2 :         return nbError;
     143             : }

Generated by: LCOV version 1.13