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