1 // Copyright (C) 2009-2020 Codership Oy <info@codership.com>
2
3 #include "gu_string_utils.hpp"
4 #include "gu_string_utils_test.hpp"
5
6 using std::string;
7 using std::vector;
8
START_TEST(test_strsplit)9 START_TEST(test_strsplit)
10 {
11 string str = "foo bar baz";
12 vector<string> vec = gu::strsplit(str, ' ');
13 ck_assert(vec.size() == 3);
14 ck_assert(vec[0] == "foo");
15 ck_assert(vec[1] == "bar");
16 ck_assert(vec[2] == "baz");
17 }
18 END_TEST
19
START_TEST(test_tokenize)20 START_TEST(test_tokenize)
21 {
22 vector<string> vec = gu::tokenize("", 'a', 'b', false);
23 ck_assert(vec.size() == 0);
24
25 vec = gu::tokenize("", 'a', 'b', true);
26 ck_assert(vec.size() == 1);
27 ck_assert(vec[0] == "");
28
29 vec = gu::tokenize("a", 'a', 'b', false);
30 ck_assert(vec.size() == 0);
31
32 vec = gu::tokenize("a", 'a', 'b', true);
33 ck_assert(vec.size() == 2);
34 ck_assert(vec[0] == "");
35 ck_assert(vec[1] == "");
36
37 vec = gu::tokenize("foo bar baz");
38 ck_assert(vec.size() == 3);
39 ck_assert(vec[0] == "foo");
40 ck_assert(vec[1] == "bar");
41 ck_assert(vec[2] == "baz");
42
43 vec = gu::tokenize("foo\\ bar baz");
44 ck_assert(vec.size() == 2);
45 ck_assert_msg(vec[0] == "foo bar", "expected 'foo bar', found '%s'",
46 vec[0].c_str());
47 ck_assert(vec[1] == "baz");
48
49 vec = gu::tokenize("foo\\;;bar;;baz;", ';', '\\', false);
50 ck_assert(vec.size() == 3);
51 ck_assert(vec[0] == "foo;");
52 ck_assert(vec[1] == "bar");
53 ck_assert(vec[2] == "baz");
54
55 vec = gu::tokenize("foo\\;;bar;;baz;", ';', '\\', true);
56 ck_assert_msg(vec.size() == 5, "vetor length %zu, expected 5", vec.size());
57 ck_assert(vec[0] == "foo;");
58 ck_assert(vec[1] == "bar");
59 ck_assert(vec[2] == "");
60 ck_assert(vec[3] == "baz");
61 ck_assert(vec[4] == "");
62 }
63 END_TEST
64
START_TEST(test_trim)65 START_TEST(test_trim)
66 {
67 string full1 = ".,wklerf joweji";
68 string full2 = full1;
69
70 gu::trim (full2);
71 ck_assert(full1 == full2);
72
73 string part = " part ";
74
75 gu::trim (part);
76 ck_assert(part.length() == 4);
77 ck_assert(0 == part.compare("part"));
78
79 string empty;
80
81 gu::trim (empty);
82 ck_assert(empty.empty());
83
84 empty += ' ';
85 empty += '\t';
86 empty += '\n';
87 empty += '\f';
88 ck_assert(!empty.empty());
89
90 gu::trim (empty);
91
92 ck_assert_msg(empty.empty(), "string contents: '%s', expected empty",
93 empty.c_str());
94 }
95 END_TEST
96
gu_string_utils_suite(void)97 Suite* gu_string_utils_suite(void)
98 {
99 Suite* s = suite_create("String Utils");
100 TCase* tc;
101
102 tc = tcase_create("strsplit");
103 tcase_add_test(tc, test_strsplit);
104 suite_add_tcase(s, tc);
105
106 tc = tcase_create("tokenize");
107 tcase_add_test(tc, test_tokenize);
108 suite_add_tcase(s, tc);
109
110 tc = tcase_create("trim");
111 tcase_add_test(tc, test_trim);
112 suite_add_tcase(s, tc);
113
114 return s;
115 }
116