Mercurial > irccd
annotate tests/util/main.cpp @ 114:8cbbce7b4327
Irccd: add util::toNumber function, #489
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 28 Apr 2016 19:39:51 +0200 |
parents | 1125d90b3b44 |
children | 2a63c8ec45cd |
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 | |
40 TEST(Format, keywordSimple) | |
41 { | |
42 util::Substitution params; | |
43 | |
44 params.keywords.insert({"target", "irccd"}); | |
45 | |
46 std::string expected = "hello irccd!"; | |
47 std::string result = util::format("hello #{target}!", params); | |
48 | |
49 ASSERT_EQ(expected, result); | |
50 } | |
51 | |
52 TEST(Format, keywordMultiple) | |
53 { | |
54 util::Substitution params; | |
55 | |
56 params.keywords.insert({"target", "irccd"}); | |
57 params.keywords.insert({"source", "nightmare"}); | |
58 | |
59 std::string expected = "hello irccd from nightmare!"; | |
60 std::string result = util::format("hello #{target} from #{source}!", params); | |
61 | |
62 ASSERT_EQ(expected, result); | |
63 } | |
64 | |
65 TEST(Format, keywordAdjTwice) | |
66 { | |
67 util::Substitution params; | |
68 | |
69 params.keywords.insert({"target", "irccd"}); | |
70 | |
71 std::string expected = "hello irccdirccd!"; | |
72 std::string result = util::format("hello #{target}#{target}!", params); | |
73 | |
74 ASSERT_EQ(expected, result); | |
75 } | |
76 | |
77 TEST(Format, keywordMissing) | |
78 { | |
79 std::string expected = "hello !"; | |
80 std::string result = util::format("hello #{target}!"); | |
81 | |
82 ASSERT_EQ(expected, result); | |
83 } | |
84 | |
85 TEST(Format, envSimple) | |
86 { | |
87 std::string home = sys::env("HOME"); | |
88 | |
89 if (!home.empty()) { | |
90 std::string expected = "my home is " + home; | |
91 std::string result = util::format("my home is ${HOME}"); | |
92 | |
93 ASSERT_EQ(expected, result); | |
94 } | |
95 } | |
96 | |
97 TEST(Format, envMissing) | |
98 { | |
99 std::string expected = "value is "; | |
100 std::string result = util::format("value is ${HOPE_THIS_VAR_NOT_EXIST}"); | |
101 | |
102 ASSERT_EQ(expected, result); | |
103 } | |
104 | |
105 /* -------------------------------------------------------- | |
106 * util::split function | |
107 * -------------------------------------------------------- */ | |
108 | |
109 using List = std::vector<std::string>; | |
110 | |
111 TEST(Split, simple) | |
112 { | |
113 List expected { "a", "b" }; | |
114 List result = util::split("a;b", ";"); | |
115 | |
116 ASSERT_EQ(expected, result); | |
117 } | |
118 | |
119 TEST(Split, cut) | |
120 { | |
121 List expected { "msg", "#staff", "foo bar baz" }; | |
122 List result = util::split("msg;#staff;foo bar baz", ";", 3); | |
123 | |
124 ASSERT_EQ(expected, result); | |
125 } | |
126 | |
127 /* -------------------------------------------------------- | |
128 * util::strip function | |
129 * -------------------------------------------------------- */ | |
130 | |
131 TEST(Strip, left) | |
132 { | |
133 std::string value = " 123"; | |
134 std::string result = util::strip(value); | |
135 | |
136 ASSERT_EQ("123", result); | |
137 } | |
138 | |
139 TEST(Strip, right) | |
140 { | |
141 std::string value = "123 "; | |
142 std::string result = util::strip(value); | |
143 | |
144 ASSERT_EQ("123", result); | |
145 } | |
146 | |
147 TEST(Strip, both) | |
148 { | |
149 std::string value = " 123 "; | |
150 std::string result = util::strip(value); | |
151 | |
152 ASSERT_EQ("123", result); | |
153 } | |
154 | |
155 TEST(Strip, none) | |
156 { | |
157 std::string value = "without"; | |
158 std::string result = util::strip(value); | |
159 | |
160 ASSERT_EQ("without", result); | |
161 } | |
162 | |
163 TEST(Strip, betweenEmpty) | |
164 { | |
165 std::string value = "one list"; | |
166 std::string result = util::strip(value); | |
167 | |
168 ASSERT_EQ("one list", result); | |
169 } | |
170 | |
171 TEST(Strip, betweenLeft) | |
172 { | |
173 std::string value = " space at left"; | |
174 std::string result = util::strip(value); | |
175 | |
176 ASSERT_EQ("space at left", result); | |
177 } | |
178 | |
179 TEST(Strip, betweenRight) | |
180 { | |
181 std::string value = "space at right "; | |
182 std::string result = util::strip(value); | |
183 | |
184 ASSERT_EQ("space at right", result); | |
185 } | |
186 | |
187 TEST(Strip, betweenBoth) | |
188 { | |
189 std::string value = " space at both "; | |
190 std::string result = util::strip(value); | |
191 | |
192 ASSERT_EQ("space at both", result); | |
193 } | |
194 | |
195 TEST(Strip, empty) | |
196 { | |
197 std::string value = " "; | |
198 std::string result = util::strip(value); | |
199 | |
200 ASSERT_EQ("", result); | |
201 } | |
202 | |
203 /* -------------------------------------------------------- | |
204 * util::join function | |
205 * -------------------------------------------------------- */ | |
206 | |
207 TEST(Join, empty) | |
208 { | |
209 std::string expected = ""; | |
210 std::string result = util::join<int>({}); | |
211 | |
212 ASSERT_EQ(expected, result); | |
213 } | |
214 | |
215 TEST(Join, one) | |
216 { | |
217 std::string expected = "1"; | |
218 std::string result = util::join({1}); | |
219 | |
220 ASSERT_EQ(expected, result); | |
221 } | |
222 | |
223 TEST(Join, two) | |
224 { | |
225 std::string expected = "1:2"; | |
226 std::string result = util::join({1, 2}); | |
227 | |
228 ASSERT_EQ(expected, result); | |
229 } | |
230 | |
231 TEST(Join, delimiterString) | |
232 { | |
233 std::string expected = "1;;2;;3"; | |
234 std::string result = util::join({1, 2, 3}, ";;"); | |
235 | |
236 ASSERT_EQ(expected, result); | |
237 } | |
238 | |
239 TEST(Join, delimiterChar) | |
240 { | |
241 std::string expected = "1@2@3@4"; | |
242 std::string result = util::join({1, 2, 3, 4}, '@'); | |
243 | |
244 ASSERT_EQ(expected, result); | |
245 } | |
246 | |
247 /* -------------------------------------------------------- | |
248 * util::isIdentifierValid function | |
249 * -------------------------------------------------------- */ | |
250 | |
251 TEST(IsIdentifierValid, correct) | |
252 { | |
253 ASSERT_TRUE(util::isIdentifierValid("localhost")); | |
254 ASSERT_TRUE(util::isIdentifierValid("localhost2")); | |
255 ASSERT_TRUE(util::isIdentifierValid("localhost2-4_")); | |
256 } | |
257 | |
258 TEST(IsIdentifierValid, incorrect) | |
259 { | |
260 ASSERT_FALSE(util::isIdentifierValid("")); | |
261 ASSERT_FALSE(util::isIdentifierValid("localhost with spaces")); | |
262 ASSERT_FALSE(util::isIdentifierValid("localhost*")); | |
263 ASSERT_FALSE(util::isIdentifierValid("&&")); | |
264 ASSERT_FALSE(util::isIdentifierValid("@'")); | |
265 ASSERT_FALSE(util::isIdentifierValid("##")); | |
266 ASSERT_FALSE(util::isIdentifierValid("===++")); | |
267 } | |
268 | |
269 /* -------------------------------------------------------- | |
270 * util::isBoolean function | |
271 * -------------------------------------------------------- */ | |
272 | |
273 TEST(IsBoolean, correct) | |
274 { | |
275 // true | |
276 ASSERT_TRUE(util::isBoolean("true")); | |
277 ASSERT_TRUE(util::isBoolean("True")); | |
278 ASSERT_TRUE(util::isBoolean("TRUE")); | |
279 ASSERT_TRUE(util::isBoolean("TruE")); | |
280 | |
281 // yes | |
282 ASSERT_TRUE(util::isBoolean("yes")); | |
283 ASSERT_TRUE(util::isBoolean("Yes")); | |
284 ASSERT_TRUE(util::isBoolean("YES")); | |
285 ASSERT_TRUE(util::isBoolean("YeS")); | |
286 | |
287 // on | |
288 ASSERT_TRUE(util::isBoolean("on")); | |
289 ASSERT_TRUE(util::isBoolean("On")); | |
290 ASSERT_TRUE(util::isBoolean("oN")); | |
291 ASSERT_TRUE(util::isBoolean("ON")); | |
292 | |
293 // 1 | |
294 ASSERT_TRUE(util::isBoolean("1")); | |
295 } | |
296 | |
297 TEST(IsBoolean, incorrect) | |
298 { | |
299 ASSERT_FALSE(util::isBoolean("false")); | |
300 ASSERT_FALSE(util::isBoolean("lol")); | |
301 ASSERT_FALSE(util::isBoolean("")); | |
302 ASSERT_FALSE(util::isBoolean("0")); | |
303 } | |
304 | |
305 /* -------------------------------------------------------- | |
306 * util::isNumber function | |
307 * -------------------------------------------------------- */ | |
308 | |
309 TEST(IsNumber, correct) | |
310 { | |
311 ASSERT_TRUE(util::isNumber("123")); | |
312 ASSERT_TRUE(util::isNumber("-123")); | |
313 ASSERT_TRUE(util::isNumber("123.67")); | |
314 } | |
315 | |
316 TEST(IsNumber, incorrect) | |
317 { | |
318 ASSERT_FALSE(util::isNumber("lol")); | |
319 ASSERT_FALSE(util::isNumber("this is not a number")); | |
320 } | |
321 | |
114
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
322 /* |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
323 * util::toNumber function |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
324 * ------------------------------------------------------------------ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
325 */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
326 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
327 TEST(ToNumber, correct) |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
328 { |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
329 /* unsigned */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 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
|
334 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
335 /* signed */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 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
|
340 } |
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 TEST(ToNumber, incorrect) |
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 /* unsigned */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
345 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
|
346 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
|
347 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
|
348 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
|
349 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
350 /* signed */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
351 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
|
352 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
|
353 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
|
354 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
|
355 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
356 /* not numbers */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
357 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
|
358 |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
359 /* custom ranges */ |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
360 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
|
361 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
|
362 } |
8cbbce7b4327
Irccd: add util::toNumber function, #489
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
363 |
0 | 364 } // !irccd |
365 | |
366 int main(int argc, char **argv) | |
367 { | |
368 testing::InitGoogleTest(&argc, argv); | |
369 | |
370 return RUN_ALL_TESTS(); | |
371 } |