Mercurial > irccd
annotate tests/util/main.cpp @ 118:2a63c8ec45cd
Irccd: fix some errors in util::format, #408
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 29 Apr 2016 14:19:30 +0200 |
parents | 8cbbce7b4327 |
children | b39573fc066e |
rev | line source |
---|---|
0 | 1 /* |
2 * main.cpp -- test util functions | |
3 * | |
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
114
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
19 #include <cstdint> |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
20 |
0 | 21 #include <gtest/gtest.h> |
22 | |
95
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
23 #include <irccd/util.hpp> |
1125d90b3b44
Misc: switch to .hpp, #477
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
24 #include <irccd/system.hpp> |
0 | 25 |
26 namespace irccd { | |
27 | |
28 /* -------------------------------------------------------- | |
29 * util::format function | |
30 * -------------------------------------------------------- */ | |
31 | |
32 TEST(Format, nothing) | |
33 { | |
34 std::string expected = "hello world!"; | |
35 std::string result = util::format("hello world!"); | |
36 | |
37 ASSERT_EQ(expected, result); | |
38 } | |
39 | |
118
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
40 TEST(Format, escape) |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
41 { |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
42 util::Substitution params; |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
43 |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
44 params.keywords.emplace("target", "hello"); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
45 |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
46 ASSERT_EQ("$@#", util::format("$@#")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
47 ASSERT_EQ(" $ @ # ", util::format(" $ @ # ")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
48 ASSERT_EQ("#", util::format("#")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
49 ASSERT_EQ(" # ", util::format(" # ")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
50 ASSERT_EQ("#@", util::format("#@")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
51 ASSERT_EQ("##", util::format("##")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
52 ASSERT_EQ("#!", util::format("#!")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
53 ASSERT_EQ("#{target}", util::format("##{target}")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
54 ASSERT_EQ("@hello", util::format("@#{target}", params)); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
55 ASSERT_EQ("hello#", util::format("#{target}#", params)); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
56 ASSERT_ANY_THROW(util::format("#{failure")); |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
57 } |
2a63c8ec45cd
Irccd: fix some errors in util::format, #408
David Demelier <markand@malikania.fr>
parents:
114
diff
changeset
|
58 |
0 | 59 TEST(Format, keywordSimple) |
60 { | |
61 util::Substitution params; | |
62 | |
63 params.keywords.insert({"target", "irccd"}); | |
64 | |
65 std::string expected = "hello irccd!"; | |
66 std::string result = util::format("hello #{target}!", params); | |
67 | |
68 ASSERT_EQ(expected, result); | |
69 } | |
70 | |
71 TEST(Format, keywordMultiple) | |
72 { | |
73 util::Substitution params; | |
74 | |
75 params.keywords.insert({"target", "irccd"}); | |
76 params.keywords.insert({"source", "nightmare"}); | |
77 | |
78 std::string expected = "hello irccd from nightmare!"; | |
79 std::string result = util::format("hello #{target} from #{source}!", params); | |
80 | |
81 ASSERT_EQ(expected, result); | |
82 } | |
83 | |
84 TEST(Format, keywordAdjTwice) | |
85 { | |
86 util::Substitution params; | |
87 | |
88 params.keywords.insert({"target", "irccd"}); | |
89 | |
90 std::string expected = "hello irccdirccd!"; | |
91 std::string result = util::format("hello #{target}#{target}!", params); | |
92 | |
93 ASSERT_EQ(expected, result); | |
94 } | |
95 | |
96 TEST(Format, keywordMissing) | |
97 { | |
98 std::string expected = "hello !"; | |
99 std::string result = util::format("hello #{target}!"); | |
100 | |
101 ASSERT_EQ(expected, result); | |
102 } | |
103 | |
104 TEST(Format, envSimple) | |
105 { | |
106 std::string home = sys::env("HOME"); | |
107 | |
108 if (!home.empty()) { | |
109 std::string expected = "my home is " + home; | |
110 std::string result = util::format("my home is ${HOME}"); | |
111 | |
112 ASSERT_EQ(expected, result); | |
113 } | |
114 } | |
115 | |
116 TEST(Format, envMissing) | |
117 { | |
118 std::string expected = "value is "; | |
119 std::string result = util::format("value is ${HOPE_THIS_VAR_NOT_EXIST}"); | |
120 | |
121 ASSERT_EQ(expected, result); | |
122 } | |
123 | |
124 /* -------------------------------------------------------- | |
125 * util::split function | |
126 * -------------------------------------------------------- */ | |
127 | |
128 using List = std::vector<std::string>; | |
129 | |
130 TEST(Split, simple) | |
131 { | |
132 List expected { "a", "b" }; | |
133 List result = util::split("a;b", ";"); | |
134 | |
135 ASSERT_EQ(expected, result); | |
136 } | |
137 | |
138 TEST(Split, cut) | |
139 { | |
140 List expected { "msg", "#staff", "foo bar baz" }; | |
141 List result = util::split("msg;#staff;foo bar baz", ";", 3); | |
142 | |
143 ASSERT_EQ(expected, result); | |
144 } | |
145 | |
146 /* -------------------------------------------------------- | |
147 * util::strip function | |
148 * -------------------------------------------------------- */ | |
149 | |
150 TEST(Strip, left) | |
151 { | |
152 std::string value = " 123"; | |
153 std::string result = util::strip(value); | |
154 | |
155 ASSERT_EQ("123", result); | |
156 } | |
157 | |
158 TEST(Strip, right) | |
159 { | |
160 std::string value = "123 "; | |
161 std::string result = util::strip(value); | |
162 | |
163 ASSERT_EQ("123", result); | |
164 } | |
165 | |
166 TEST(Strip, both) | |
167 { | |
168 std::string value = " 123 "; | |
169 std::string result = util::strip(value); | |
170 | |
171 ASSERT_EQ("123", result); | |
172 } | |
173 | |
174 TEST(Strip, none) | |
175 { | |
176 std::string value = "without"; | |
177 std::string result = util::strip(value); | |
178 | |
179 ASSERT_EQ("without", result); | |
180 } | |
181 | |
182 TEST(Strip, betweenEmpty) | |
183 { | |
184 std::string value = "one list"; | |
185 std::string result = util::strip(value); | |
186 | |
187 ASSERT_EQ("one list", result); | |
188 } | |
189 | |
190 TEST(Strip, betweenLeft) | |
191 { | |
192 std::string value = " space at left"; | |
193 std::string result = util::strip(value); | |
194 | |
195 ASSERT_EQ("space at left", result); | |
196 } | |
197 | |
198 TEST(Strip, betweenRight) | |
199 { | |
200 std::string value = "space at right "; | |
201 std::string result = util::strip(value); | |
202 | |
203 ASSERT_EQ("space at right", result); | |
204 } | |
205 | |
206 TEST(Strip, betweenBoth) | |
207 { | |
208 std::string value = " space at both "; | |
209 std::string result = util::strip(value); | |
210 | |
211 ASSERT_EQ("space at both", result); | |
212 } | |
213 | |
214 TEST(Strip, empty) | |
215 { | |
216 std::string value = " "; | |
217 std::string result = util::strip(value); | |
218 | |
219 ASSERT_EQ("", result); | |
220 } | |
221 | |
222 /* -------------------------------------------------------- | |
223 * util::join function | |
224 * -------------------------------------------------------- */ | |
225 | |
226 TEST(Join, empty) | |
227 { | |
228 std::string expected = ""; | |
229 std::string result = util::join<int>({}); | |
230 | |
231 ASSERT_EQ(expected, result); | |
232 } | |
233 | |
234 TEST(Join, one) | |
235 { | |
236 std::string expected = "1"; | |
237 std::string result = util::join({1}); | |
238 | |
239 ASSERT_EQ(expected, result); | |
240 } | |
241 | |
242 TEST(Join, two) | |
243 { | |
244 std::string expected = "1:2"; | |
245 std::string result = util::join({1, 2}); | |
246 | |
247 ASSERT_EQ(expected, result); | |
248 } | |
249 | |
250 TEST(Join, delimiterString) | |
251 { | |
252 std::string expected = "1;;2;;3"; | |
253 std::string result = util::join({1, 2, 3}, ";;"); | |
254 | |
255 ASSERT_EQ(expected, result); | |
256 } | |
257 | |
258 TEST(Join, delimiterChar) | |
259 { | |
260 std::string expected = "1@2@3@4"; | |
261 std::string result = util::join({1, 2, 3, 4}, '@'); | |
262 | |
263 ASSERT_EQ(expected, result); | |
264 } | |
265 | |
266 /* -------------------------------------------------------- | |
267 * util::isIdentifierValid function | |
268 * -------------------------------------------------------- */ | |
269 | |
270 TEST(IsIdentifierValid, correct) | |
271 { | |
272 ASSERT_TRUE(util::isIdentifierValid("localhost")); | |
273 ASSERT_TRUE(util::isIdentifierValid("localhost2")); | |
274 ASSERT_TRUE(util::isIdentifierValid("localhost2-4_")); | |
275 } | |
276 | |
277 TEST(IsIdentifierValid, incorrect) | |
278 { | |
279 ASSERT_FALSE(util::isIdentifierValid("")); | |
280 ASSERT_FALSE(util::isIdentifierValid("localhost with spaces")); | |
281 ASSERT_FALSE(util::isIdentifierValid("localhost*")); | |
282 ASSERT_FALSE(util::isIdentifierValid("&&")); | |
283 ASSERT_FALSE(util::isIdentifierValid("@'")); | |
284 ASSERT_FALSE(util::isIdentifierValid("##")); | |
285 ASSERT_FALSE(util::isIdentifierValid("===++")); | |
286 } | |
287 | |
288 /* -------------------------------------------------------- | |
289 * util::isBoolean function | |
290 * -------------------------------------------------------- */ | |
291 | |
292 TEST(IsBoolean, correct) | |
293 { | |
294 // true | |
295 ASSERT_TRUE(util::isBoolean("true")); | |
296 ASSERT_TRUE(util::isBoolean("True")); | |
297 ASSERT_TRUE(util::isBoolean("TRUE")); | |
298 ASSERT_TRUE(util::isBoolean("TruE")); | |
299 | |
300 // yes | |
301 ASSERT_TRUE(util::isBoolean("yes")); | |
302 ASSERT_TRUE(util::isBoolean("Yes")); | |
303 ASSERT_TRUE(util::isBoolean("YES")); | |
304 ASSERT_TRUE(util::isBoolean("YeS")); | |
305 | |
306 // on | |
307 ASSERT_TRUE(util::isBoolean("on")); | |
308 ASSERT_TRUE(util::isBoolean("On")); | |
309 ASSERT_TRUE(util::isBoolean("oN")); | |
310 ASSERT_TRUE(util::isBoolean("ON")); | |
311 | |
312 // 1 | |
313 ASSERT_TRUE(util::isBoolean("1")); | |
314 } | |
315 | |
316 TEST(IsBoolean, incorrect) | |
317 { | |
318 ASSERT_FALSE(util::isBoolean("false")); | |
319 ASSERT_FALSE(util::isBoolean("lol")); | |
320 ASSERT_FALSE(util::isBoolean("")); | |
321 ASSERT_FALSE(util::isBoolean("0")); | |
322 } | |
323 | |
324 /* -------------------------------------------------------- | |
325 * util::isNumber function | |
326 * -------------------------------------------------------- */ | |
327 | |
328 TEST(IsNumber, correct) | |
329 { | |
330 ASSERT_TRUE(util::isNumber("123")); | |
331 ASSERT_TRUE(util::isNumber("-123")); | |
332 ASSERT_TRUE(util::isNumber("123.67")); | |
333 } | |
334 | |
335 TEST(IsNumber, incorrect) | |
336 { | |
337 ASSERT_FALSE(util::isNumber("lol")); | |
338 ASSERT_FALSE(util::isNumber("this is not a number")); | |
339 } | |
340 | |
114
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
341 /* |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
342 * util::toNumber function |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
343 * ------------------------------------------------------------------ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
344 */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
345 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
346 TEST(ToNumber, correct) |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
347 { |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
348 /* unsigned */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
349 ASSERT_EQ(50u, util::toNumber<std::uint8_t>("50")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
350 ASSERT_EQ(5000u, util::toNumber<std::uint16_t>("5000")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
351 ASSERT_EQ(50000u, util::toNumber<std::uint32_t>("50000")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
352 ASSERT_EQ(500000u, util::toNumber<std::uint64_t>("500000")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
353 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
354 /* signed */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
355 ASSERT_EQ(-50, util::toNumber<std::int8_t>("-50")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
356 ASSERT_EQ(-500, util::toNumber<std::int16_t>("-500")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
357 ASSERT_EQ(-5000, util::toNumber<std::int32_t>("-5000")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
358 ASSERT_EQ(-50000, util::toNumber<std::int64_t>("-50000")); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
359 } |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
360 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
361 TEST(ToNumber, incorrect) |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
362 { |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
363 /* unsigned */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
364 ASSERT_THROW(util::toNumber<std::uint8_t>("300"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
365 ASSERT_THROW(util::toNumber<std::uint16_t>("80000"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
366 ASSERT_THROW(util::toNumber<std::uint8_t>("-125"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
367 ASSERT_THROW(util::toNumber<std::uint16_t>("-25000"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
368 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
369 /* signed */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
370 ASSERT_THROW(util::toNumber<std::int8_t>("300"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
371 ASSERT_THROW(util::toNumber<std::int16_t>("80000"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
372 ASSERT_THROW(util::toNumber<std::int8_t>("-300"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
373 ASSERT_THROW(util::toNumber<std::int16_t>("-80000"), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
374 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
375 /* not numbers */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
376 ASSERT_THROW(util::toNumber<std::uint8_t>("nonono"), std::invalid_argument); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
377 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
378 /* custom ranges */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
379 ASSERT_THROW(util::toNumber<std::uint8_t>("50", 0, 10), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
380 ASSERT_THROW(util::toNumber<std::int8_t>("-50", -10, 10), std::out_of_range); |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
381 } |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
382 |
0 | 383 } // !irccd |
384 | |
385 int main(int argc, char **argv) | |
386 { | |
387 testing::InitGoogleTest(&argc, argv); | |
388 | |
389 return RUN_ALL_TESTS(); | |
390 } |