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