LCOV - code coverage report
Current view: top level - src/libs/tools/tests - testtool_pluginspec.cpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 100 121 82.6 %
Date: 2019-09-12 12:28:41 Functions: 12 17 70.6 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for the pluginspec class
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #define ELEKTRA_PLUGINSPEC_WITH_COMPARE
      11             : 
      12             : 
      13             : #include <pluginspec.hpp>
      14             : 
      15             : #include <toolexcept.hpp>
      16             : 
      17             : #include <gtest/gtest.h>
      18             : 
      19             : 
      20          20 : TEST (PluginSpec, construct)
      21             : {
      22             :         using namespace kdb;
      23             :         using namespace kdb::tools;
      24          16 :         EXPECT_EQ (PluginSpec ("c").getName (), "c");
      25          16 :         EXPECT_EQ (PluginSpec ("c").getFullName (), "c#c");
      26             : 
      27          16 :         EXPECT_EQ (PluginSpec ("c_c").getName (), "c_c");
      28          16 :         EXPECT_EQ (PluginSpec ("c_c").getFullName (), "c_c#c_c");
      29             : 
      30          16 :         EXPECT_EQ (PluginSpec ("a_").getName (), "a_");
      31          16 :         EXPECT_EQ (PluginSpec ("a_").getFullName (), "a_#a_");
      32             : 
      33          16 :         EXPECT_EQ (PluginSpec ("python2").getName (), "python2");
      34          16 :         EXPECT_EQ (PluginSpec ("python2").getFullName (), "python2#python2");
      35          14 :         EXPECT_FALSE (PluginSpec ("python2").isRefNumber ());
      36             : 
      37          22 :         EXPECT_EQ (PluginSpec ("c", "b").getName (), "c");
      38          22 :         EXPECT_EQ (PluginSpec ("c", "b").getRefName (), "b");
      39          22 :         EXPECT_EQ (PluginSpec ("c", "b").getFullName (), "c#b");
      40             : 
      41          12 :         PluginSpec s1 ("c#b");
      42           8 :         EXPECT_EQ (s1.getName (), "c");
      43           8 :         EXPECT_EQ (s1.getRefName (), "b");
      44           6 :         EXPECT_FALSE (s1.isRefNumber ());
      45           8 :         EXPECT_EQ (s1.getFullName (), "c#b");
      46             : 
      47           2 :         s1.setRefNumber (20);
      48           8 :         EXPECT_EQ (s1.getName (), "c");
      49           8 :         EXPECT_EQ (s1.getRefName (), "20");
      50           6 :         EXPECT_TRUE (s1.isRefNumber ());
      51           8 :         EXPECT_EQ (s1.getFullName (), "c#20");
      52             : 
      53           8 :         s1.setFullName ("c#b");
      54           8 :         EXPECT_EQ (s1.getName (), "c");
      55           8 :         EXPECT_EQ (s1.getRefName (), "b");
      56           6 :         EXPECT_FALSE (s1.isRefNumber ());
      57           8 :         EXPECT_EQ (s1.getFullName (), "c#b");
      58             : 
      59           6 :         EXPECT_THROW (s1.setRefName ("20"), BadPluginName);
      60           6 :         EXPECT_THROW (s1.setFullName ("a#20"), BadPluginName);
      61           6 :         EXPECT_THROW (s1.setName ("a#20"), BadPluginName);
      62           6 :         EXPECT_THROW (s1.setName ("0"), BadPluginName);
      63           2 : }
      64             : 
      65             : 
      66          20 : TEST (PluginSpec, appendConfig)
      67             : {
      68             :         using namespace kdb;
      69             :         using namespace kdb::tools;
      70          12 :         PluginSpec s1 ("c#b");
      71          14 :         EXPECT_EQ (s1, PluginSpec ("c#b"));
      72           8 :         s1.appendConfig (KeySet (5, *Key ("user/a", KEY_END), KS_END));
      73          18 :         EXPECT_EQ (s1, PluginSpec ("c#b", KeySet (5, *Key ("user/a", KEY_END), KS_END)));
      74           8 :         s1.appendConfig (KeySet (5, *Key ("user/b", KEY_END), KS_END));
      75          22 :         EXPECT_EQ (s1, PluginSpec ("c#b", KeySet (5, *Key ("user/a", KEY_END), *Key ("user/b", KEY_END), KS_END)));
      76          20 :         EXPECT_EQ (s1.getConfig ().lookup ("user/b").getString (), "");
      77           8 :         s1.appendConfig (KeySet (5, *Key ("user/b", KEY_VALUE, "abc", KEY_END), KS_END));
      78          22 :         EXPECT_EQ (s1, PluginSpec ("c#b", KeySet (5, *Key ("user/a", KEY_END), *Key ("user/b", KEY_END), KS_END)));
      79          20 :         EXPECT_EQ (s1.getConfig ().lookup ("user/b").getString (), "abc");
      80           2 : }
      81             : 
      82          20 : TEST (PluginSpec, wrongNames)
      83             : {
      84             :         using namespace kdb;
      85             :         using namespace kdb::tools;
      86          12 :         EXPECT_THROW (PluginSpec ("c#"), BadPluginName);
      87          12 :         EXPECT_THROW (PluginSpec ("#"), BadPluginName);
      88          12 :         EXPECT_THROW (PluginSpec ("#a"), BadPluginName);
      89          12 :         EXPECT_THROW (PluginSpec ("a##a"), BadPluginName);
      90          12 :         EXPECT_THROW (PluginSpec ("a#a#"), BadPluginName);
      91          12 :         EXPECT_THROW (PluginSpec ("0#a"), BadPluginName);
      92          12 :         EXPECT_THROW (PluginSpec ("a#0"), BadPluginName);
      93          12 :         EXPECT_THROW (PluginSpec ("a#?"), BadPluginName);
      94          12 :         EXPECT_THROW (PluginSpec ("a#$"), BadPluginName);
      95          12 :         EXPECT_THROW (PluginSpec ("a#a!"), BadPluginName);
      96          12 :         EXPECT_THROW (PluginSpec ("a#(a"), BadPluginName);
      97          12 :         EXPECT_THROW (PluginSpec ("a#a)"), BadPluginName);
      98          12 :         EXPECT_THROW (PluginSpec ("(a#a"), BadPluginName);
      99          12 :         EXPECT_THROW (PluginSpec ("[a#a"), BadPluginName);
     100          12 :         EXPECT_THROW (PluginSpec ("K#a"), BadPluginName);
     101          12 :         EXPECT_THROW (PluginSpec ("y#Y"), BadPluginName);
     102          12 :         EXPECT_THROW (PluginSpec ("1a"), BadPluginName);
     103          12 :         EXPECT_THROW (PluginSpec ("1"), BadPluginName);
     104          12 :         EXPECT_THROW (PluginSpec ("_"), BadPluginName);
     105          12 :         EXPECT_THROW (PluginSpec ("_1"), BadPluginName);
     106          12 :         EXPECT_THROW (PluginSpec ("_a"), BadPluginName);
     107           2 : }
     108             : 
     109             : 
     110          20 : TEST (PluginSpec, compare)
     111             : {
     112             :         using namespace kdb;
     113             :         using namespace kdb::tools;
     114             : 
     115             :         // by default we compare by value
     116          24 :         EXPECT_EQ (PluginSpec ("c"), PluginSpec ("c"));
     117          30 :         EXPECT_EQ (PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     118           0 :                    PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     119          42 :         EXPECT_EQ (PluginSpec ("c", "abc", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     120           0 :                    PluginSpec ("c", "abc", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     121          30 :         EXPECT_EQ (PluginSpec ("c", 5, KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     122           0 :                    PluginSpec ("c", 5, KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     123             : 
     124          22 :         EXPECT_NE (PluginSpec ("c"), PluginSpec ("d"));
     125          28 :         EXPECT_NE (PluginSpec ("c", KeySet (2, *Key ("user/abe", KEY_END), KS_END)),
     126           0 :                    PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     127          40 :         EXPECT_NE (PluginSpec ("c", "ab", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     128           0 :                    PluginSpec ("c", "abc", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     129          28 :         EXPECT_NE (PluginSpec ("c", 6, KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     130           0 :                    PluginSpec ("c", 5, KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     131             : 
     132          28 :         EXPECT_NE (PluginSpec ("c", "b"), PluginSpec ("c"));
     133          30 :         EXPECT_NE (PluginSpec ("c", "b", KeySet (2, *Key ("user/abc", KEY_END), KS_END)), PluginSpec ("c"));
     134          32 :         EXPECT_NE (PluginSpec ("c", "b"), PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     135          34 :         EXPECT_NE (PluginSpec ("c", "b", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     136           0 :                    PluginSpec ("c", KeySet (2, *Key ("user/def", KEY_END), KS_END)));
     137          34 :         EXPECT_NE (PluginSpec ("c", "b", KeySet (2, *Key ("user/a", KEY_END), KS_END)),
     138           0 :                    PluginSpec ("c", KeySet (2, *Key ("user/aa", KEY_END), KS_END)));
     139          28 :         EXPECT_NE (PluginSpec ("c", "b", KeySet (2, *Key ("user/a", KEY_END), KS_END)),
     140           0 :                    PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END)));
     141             : 
     142             :         // compare by full name (config does not matter)
     143          26 :         EXPECT_PRED2 (PluginSpecFullName (), PluginSpec ("c"), PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     144          28 :         EXPECT_PRED2 (PluginSpecFullName (), PluginSpec ("c", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     145           0 :                       PluginSpec ("c", KeySet (2, *Key ("user/def", KEY_END), KS_END)));
     146          28 :         EXPECT_PRED2 (PluginSpecFullName (), PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END)),
     147           0 :                       PluginSpec ("c", KeySet (2, *Key ("user/aa", KEY_END), KS_END)));
     148          28 :         EXPECT_PRED2 (PluginSpecFullName (), PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END)),
     149           0 :                       PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END)));
     150             : 
     151             :         // compare by ref name (name+config does not matter)
     152          38 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("d", "e"), PluginSpec ("c", "e", KeySet (2, *Key ("user/abc", KEY_END), KS_END)));
     153          40 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("e", "e", KeySet (2, *Key ("user/abc", KEY_END), KS_END)),
     154           0 :                       PluginSpec ("c", "e", KeySet (2, *Key ("user/def", KEY_END), KS_END)));
     155          40 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("e", "e", KeySet (2, *Key ("user/c", KEY_END), KS_END)),
     156           0 :                       PluginSpec ("c", "e", KeySet (2, *Key ("user/aa", KEY_END), KS_END)));
     157          40 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("c", "e", KeySet (2, *Key ("user/c", KEY_END), KS_END)),
     158           0 :                       PluginSpec ("c", "e", KeySet (2, *Key ("user/a", KEY_END), KS_END)));
     159          40 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("c", "abc", KeySet (2, *Key ("user/c", KEY_END), KS_END)),
     160           0 :                       PluginSpec ("c", "abc", KeySet (2, *Key ("user/a", KEY_END), KS_END)));
     161          28 :         EXPECT_PRED2 (PluginSpecRefName (), PluginSpec ("c", 5, KeySet (2, *Key ("user/c", KEY_END), KS_END)),
     162           0 :                       PluginSpec ("c", 5, KeySet (2, *Key ("user/a", KEY_END), KS_END)));
     163           2 : }
     164             : 
     165             : 
     166          20 : TEST (PluginSpec, hash)
     167             : {
     168             :         using namespace kdb;
     169             :         using namespace kdb::tools;
     170             :         PluginSpecHash hashFun;
     171          30 :         EXPECT_EQ (hashFun (PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END))),
     172           0 :                    hashFun (PluginSpec ("c", KeySet (2, *Key ("user/x", KEY_END), KS_END))));
     173          42 :         EXPECT_EQ (hashFun (PluginSpec ("c", "b", KeySet (2, *Key ("user/a", KEY_END), KS_END))),
     174           0 :                    hashFun (PluginSpec ("c", "b", KeySet (2, *Key ("user/x", KEY_END), KS_END))));
     175          42 :         EXPECT_EQ (hashFun (PluginSpec ("c", "b", KeySet (2, *Key ("user/a", KEY_END), KS_END))),
     176           0 :                    hashFun (PluginSpec ("c", "d", KeySet (2, *Key ("user/x", KEY_END), KS_END))));
     177          28 :         EXPECT_NE (hashFun (PluginSpec ("c", KeySet (2, *Key ("user/a", KEY_END), KS_END))),
     178           0 :                    hashFun (PluginSpec ("d", KeySet (2, *Key ("user/x", KEY_END), KS_END))));
     179           8 : }

Generated by: LCOV version 1.13