Line data Source code
1 : // Copyright (c) 2018-2022 Made to Order Software Corp. All Rights Reserved
2 : //
3 : // https://snapwebsites.org/project/snapdev
4 : // contact@m2osw.com
5 : //
6 : // This program is free software; you can redistribute it and/or modify
7 : // it under the terms of the GNU General Public License as published by
8 : // the Free Software Foundation; either version 2 of the License, or
9 : // (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License along
17 : // with this program; if not, write to the Free Software Foundation, Inc.,
18 : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 :
20 : /** \file
21 : * \brief Verify that the tokenize_string() function works.
22 : *
23 : * This file implements tests for the tokenize_string() function.
24 : */
25 :
26 : // self
27 : //
28 : #include <snapdev/tokenize_string.h>
29 :
30 : #include "catch_main.h"
31 :
32 :
33 : // last include
34 : //
35 : #include <snapdev/poison.h>
36 :
37 :
38 : namespace
39 : {
40 :
41 :
42 :
43 :
44 :
45 : }
46 : // no name namespace
47 :
48 :
49 :
50 8 : CATCH_TEST_CASE("tokenize_string", "[string]")
51 : {
52 12 : CATCH_START_SECTION("generate tokens: keep empty entries")
53 : {
54 2 : std::vector<std::string> tokens;
55 1 : CATCH_REQUIRE(snapdev::tokenize_string(
56 : tokens
57 : , " foo catch bar "
58 : , " ") == 13);
59 1 : CATCH_REQUIRE(tokens.size() == 13);
60 1 : CATCH_REQUIRE(tokens[ 0] == "");
61 1 : CATCH_REQUIRE(tokens[ 1] == "");
62 1 : CATCH_REQUIRE(tokens[ 2] == "");
63 1 : CATCH_REQUIRE(tokens[ 3] == "foo");
64 1 : CATCH_REQUIRE(tokens[ 4] == "");
65 1 : CATCH_REQUIRE(tokens[ 5] == "");
66 1 : CATCH_REQUIRE(tokens[ 6] == "");
67 1 : CATCH_REQUIRE(tokens[ 7] == "catch");
68 1 : CATCH_REQUIRE(tokens[ 8] == "");
69 1 : CATCH_REQUIRE(tokens[ 9] == "bar");
70 1 : CATCH_REQUIRE(tokens[10] == "");
71 1 : CATCH_REQUIRE(tokens[11] == "");
72 1 : CATCH_REQUIRE(tokens[12] == "");
73 : }
74 : CATCH_END_SECTION()
75 :
76 12 : CATCH_START_SECTION("generate tokens: remove empty entries")
77 : {
78 2 : std::vector<std::string> tokens;
79 1 : CATCH_REQUIRE(snapdev::tokenize_string(
80 : tokens
81 : , " foo catch bar "
82 : , " "
83 : , true) == 3);
84 1 : CATCH_REQUIRE(tokens.size() == 3);
85 1 : CATCH_REQUIRE(tokens[0] == "foo");
86 1 : CATCH_REQUIRE(tokens[1] == "catch");
87 1 : CATCH_REQUIRE(tokens[2] == "bar");
88 : }
89 : CATCH_END_SECTION()
90 :
91 12 : CATCH_START_SECTION("generate tokens: comma separated")
92 : {
93 2 : std::vector<std::string> tokens;
94 1 : CATCH_REQUIRE(snapdev::tokenize_string(
95 : tokens
96 : , ",,,foo,,,,catch,,bar,,,"
97 : , ",") == 13);
98 1 : CATCH_REQUIRE(tokens.size() == 13);
99 1 : CATCH_REQUIRE(tokens[ 0] == "");
100 1 : CATCH_REQUIRE(tokens[ 1] == "");
101 1 : CATCH_REQUIRE(tokens[ 2] == "");
102 1 : CATCH_REQUIRE(tokens[ 3] == "foo");
103 1 : CATCH_REQUIRE(tokens[ 4] == "");
104 1 : CATCH_REQUIRE(tokens[ 5] == "");
105 1 : CATCH_REQUIRE(tokens[ 6] == "");
106 1 : CATCH_REQUIRE(tokens[ 7] == "catch");
107 1 : CATCH_REQUIRE(tokens[ 8] == "");
108 1 : CATCH_REQUIRE(tokens[ 9] == "bar");
109 1 : CATCH_REQUIRE(tokens[10] == "");
110 1 : CATCH_REQUIRE(tokens[11] == "");
111 1 : CATCH_REQUIRE(tokens[12] == "");
112 : }
113 : CATCH_END_SECTION()
114 :
115 12 : CATCH_START_SECTION("generate tokens: comma separated, remove empty")
116 : {
117 2 : std::vector<std::string> tokens;
118 1 : CATCH_REQUIRE(snapdev::tokenize_string(
119 : tokens
120 : , ",,, foo ,,,,catch ,,bar ,,,"
121 : , ","
122 : , true) == 3);
123 1 : CATCH_REQUIRE(tokens.size() == 3);
124 1 : CATCH_REQUIRE(tokens[0] == " foo ");
125 1 : CATCH_REQUIRE(tokens[1] == "catch ");
126 1 : CATCH_REQUIRE(tokens[2] == "bar ");
127 : }
128 : CATCH_END_SECTION()
129 :
130 12 : CATCH_START_SECTION("generate tokens: comma separated, remove empty and trim")
131 : {
132 2 : std::vector<std::string> tokens;
133 1 : CATCH_REQUIRE(snapdev::tokenize_string(
134 : tokens
135 : , ", ,, foo ,, ,,catch ,,bar ,,, "
136 : , ","
137 : , true
138 : , " ") == 3);
139 1 : CATCH_REQUIRE(tokens.size() == 3);
140 1 : CATCH_REQUIRE(tokens[0] == "foo");
141 1 : CATCH_REQUIRE(tokens[1] == "catch");
142 1 : CATCH_REQUIRE(tokens[2] == "bar");
143 : }
144 : CATCH_END_SECTION()
145 :
146 12 : CATCH_START_SECTION("generate tokens: arrow (string) separated, remove empty and trim")
147 : {
148 2 : std::vector<std::string> tokens;
149 1 : CATCH_REQUIRE(snapdev::tokenize_string(
150 : tokens
151 : , "a => b => c => d"
152 : , "=>"
153 : , true
154 : , " "
155 : , snapdev::string_predicate<decltype(tokens)>) == 4);
156 1 : CATCH_REQUIRE(tokens.size() == 4);
157 1 : CATCH_REQUIRE(tokens[0] == "a");
158 1 : CATCH_REQUIRE(tokens[1] == "b");
159 1 : CATCH_REQUIRE(tokens[2] == "c");
160 1 : CATCH_REQUIRE(tokens[3] == "d");
161 : }
162 : CATCH_END_SECTION()
163 12 : }
164 :
165 : //template<class ContainerT, typename PredicateT = decltype(character_predicate<ContainerT>)>
166 : //size_t tokenize_string(ContainerT & tokens
167 : // , typename ContainerT::value_type const & str
168 : // , typename ContainerT::value_type const & delimiters
169 : // , bool const trim_empty = false
170 : // , typename ContainerT::value_type const & trim_string = typename ContainerT::value_type()
171 : // , PredicateT compare_function = &character_predicate<ContainerT>)
172 :
173 :
174 :
175 : // vim: ts=4 sw=4 et
|