xref: /netbsd-src/external/bsd/kyua-cli/dist/utils/text/operations_test.cpp (revision 6b3a42af15b5e090c339512c790dd68f3d11a9d8)
1*6b3a42afSjmmv // Copyright 2012 Google Inc.
2*6b3a42afSjmmv // All rights reserved.
3*6b3a42afSjmmv //
4*6b3a42afSjmmv // Redistribution and use in source and binary forms, with or without
5*6b3a42afSjmmv // modification, are permitted provided that the following conditions are
6*6b3a42afSjmmv // met:
7*6b3a42afSjmmv //
8*6b3a42afSjmmv // * Redistributions of source code must retain the above copyright
9*6b3a42afSjmmv //   notice, this list of conditions and the following disclaimer.
10*6b3a42afSjmmv // * Redistributions in binary form must reproduce the above copyright
11*6b3a42afSjmmv //   notice, this list of conditions and the following disclaimer in the
12*6b3a42afSjmmv //   documentation and/or other materials provided with the distribution.
13*6b3a42afSjmmv // * Neither the name of Google Inc. nor the names of its contributors
14*6b3a42afSjmmv //   may be used to endorse or promote products derived from this software
15*6b3a42afSjmmv //   without specific prior written permission.
16*6b3a42afSjmmv //
17*6b3a42afSjmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*6b3a42afSjmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*6b3a42afSjmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*6b3a42afSjmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*6b3a42afSjmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*6b3a42afSjmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*6b3a42afSjmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*6b3a42afSjmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*6b3a42afSjmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*6b3a42afSjmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*6b3a42afSjmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*6b3a42afSjmmv 
29*6b3a42afSjmmv #include "utils/text/operations.ipp"
30*6b3a42afSjmmv 
31*6b3a42afSjmmv #include <iostream>
32*6b3a42afSjmmv #include <set>
33*6b3a42afSjmmv #include <string>
34*6b3a42afSjmmv #include <vector>
35*6b3a42afSjmmv 
36*6b3a42afSjmmv #include <atf-c++.hpp>
37*6b3a42afSjmmv 
38*6b3a42afSjmmv #include "utils/text/exceptions.hpp"
39*6b3a42afSjmmv 
40*6b3a42afSjmmv namespace text = utils::text;
41*6b3a42afSjmmv 
42*6b3a42afSjmmv 
43*6b3a42afSjmmv namespace {
44*6b3a42afSjmmv 
45*6b3a42afSjmmv 
46*6b3a42afSjmmv /// Tests text::refill() on an input string with a range of widths.
47*6b3a42afSjmmv ///
48*6b3a42afSjmmv /// \param expected The expected refilled paragraph.
49*6b3a42afSjmmv /// \param input The input paragraph to be refilled.
50*6b3a42afSjmmv /// \param first_width The first width to validate.
51*6b3a42afSjmmv /// \param last_width The last width to validate (inclusive).
52*6b3a42afSjmmv static void
refill_test(const char * expected,const char * input,const std::size_t first_width,const std::size_t last_width)53*6b3a42afSjmmv refill_test(const char* expected, const char* input,
54*6b3a42afSjmmv             const std::size_t first_width, const std::size_t last_width)
55*6b3a42afSjmmv {
56*6b3a42afSjmmv     for (std::size_t width = first_width; width <= last_width; ++width) {
57*6b3a42afSjmmv         const std::vector< std::string > lines = text::split(expected, '\n');
58*6b3a42afSjmmv         std::cout << "Breaking at width " << width << '\n';
59*6b3a42afSjmmv         ATF_REQUIRE_EQ(expected, text::refill_as_string(input, width));
60*6b3a42afSjmmv         ATF_REQUIRE(lines == text::refill(input, width));
61*6b3a42afSjmmv     }
62*6b3a42afSjmmv }
63*6b3a42afSjmmv 
64*6b3a42afSjmmv 
65*6b3a42afSjmmv }  // anonymous namespace
66*6b3a42afSjmmv 
67*6b3a42afSjmmv 
68*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(quote__empty);
ATF_TEST_CASE_BODY(quote__empty)69*6b3a42afSjmmv ATF_TEST_CASE_BODY(quote__empty)
70*6b3a42afSjmmv {
71*6b3a42afSjmmv     ATF_REQUIRE_EQ("''", text::quote("", '\''));
72*6b3a42afSjmmv     ATF_REQUIRE_EQ("##", text::quote("", '#'));
73*6b3a42afSjmmv }
74*6b3a42afSjmmv 
75*6b3a42afSjmmv 
76*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(quote__no_escaping);
ATF_TEST_CASE_BODY(quote__no_escaping)77*6b3a42afSjmmv ATF_TEST_CASE_BODY(quote__no_escaping)
78*6b3a42afSjmmv {
79*6b3a42afSjmmv     ATF_REQUIRE_EQ("'Some text\"'", text::quote("Some text\"", '\''));
80*6b3a42afSjmmv     ATF_REQUIRE_EQ("#Another'string#", text::quote("Another'string", '#'));
81*6b3a42afSjmmv }
82*6b3a42afSjmmv 
83*6b3a42afSjmmv 
84*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(quote__some_escaping);
ATF_TEST_CASE_BODY(quote__some_escaping)85*6b3a42afSjmmv ATF_TEST_CASE_BODY(quote__some_escaping)
86*6b3a42afSjmmv {
87*6b3a42afSjmmv     ATF_REQUIRE_EQ("'Some\\'text'", text::quote("Some'text", '\''));
88*6b3a42afSjmmv     ATF_REQUIRE_EQ("#Some\\#text#", text::quote("Some#text", '#'));
89*6b3a42afSjmmv 
90*6b3a42afSjmmv     ATF_REQUIRE_EQ("'More than one\\' quote\\''",
91*6b3a42afSjmmv                    text::quote("More than one' quote'", '\''));
92*6b3a42afSjmmv     ATF_REQUIRE_EQ("'Multiple quotes \\'\\'\\' together'",
93*6b3a42afSjmmv                    text::quote("Multiple quotes ''' together", '\''));
94*6b3a42afSjmmv 
95*6b3a42afSjmmv     ATF_REQUIRE_EQ("'\\'escape at the beginning'",
96*6b3a42afSjmmv                    text::quote("'escape at the beginning", '\''));
97*6b3a42afSjmmv     ATF_REQUIRE_EQ("'escape at the end\\''",
98*6b3a42afSjmmv                    text::quote("escape at the end'", '\''));
99*6b3a42afSjmmv }
100*6b3a42afSjmmv 
101*6b3a42afSjmmv 
102*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__empty);
ATF_TEST_CASE_BODY(refill__empty)103*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__empty)
104*6b3a42afSjmmv {
105*6b3a42afSjmmv     ATF_REQUIRE_EQ(1, text::refill("", 0).size());
106*6b3a42afSjmmv     ATF_REQUIRE(text::refill("", 0)[0].empty());
107*6b3a42afSjmmv     ATF_REQUIRE_EQ("", text::refill_as_string("", 0));
108*6b3a42afSjmmv 
109*6b3a42afSjmmv     ATF_REQUIRE_EQ(1, text::refill("", 10).size());
110*6b3a42afSjmmv     ATF_REQUIRE(text::refill("", 10)[0].empty());
111*6b3a42afSjmmv     ATF_REQUIRE_EQ("", text::refill_as_string("", 10));
112*6b3a42afSjmmv }
113*6b3a42afSjmmv 
114*6b3a42afSjmmv 
115*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__no_changes);
ATF_TEST_CASE_BODY(refill__no_changes)116*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__no_changes)
117*6b3a42afSjmmv {
118*6b3a42afSjmmv     std::vector< std::string > exp_lines;
119*6b3a42afSjmmv     exp_lines.push_back("foo bar\nbaz");
120*6b3a42afSjmmv 
121*6b3a42afSjmmv     ATF_REQUIRE(exp_lines == text::refill("foo bar\nbaz", 12));
122*6b3a42afSjmmv     ATF_REQUIRE_EQ("foo bar\nbaz", text::refill_as_string("foo bar\nbaz", 12));
123*6b3a42afSjmmv 
124*6b3a42afSjmmv     ATF_REQUIRE(exp_lines == text::refill("foo bar\nbaz", 18));
125*6b3a42afSjmmv     ATF_REQUIRE_EQ("foo bar\nbaz", text::refill_as_string("foo bar\nbaz", 80));
126*6b3a42afSjmmv }
127*6b3a42afSjmmv 
128*6b3a42afSjmmv 
129*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__break_one);
ATF_TEST_CASE_BODY(refill__break_one)130*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__break_one)
131*6b3a42afSjmmv {
132*6b3a42afSjmmv     refill_test("only break the\nfirst line", "only break the first line",
133*6b3a42afSjmmv                 14, 19);
134*6b3a42afSjmmv }
135*6b3a42afSjmmv 
136*6b3a42afSjmmv 
137*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__break_one__not_first_word);
ATF_TEST_CASE_BODY(refill__break_one__not_first_word)138*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__break_one__not_first_word)
139*6b3a42afSjmmv {
140*6b3a42afSjmmv     refill_test("first-long-word\nother\nwords", "first-long-word other words",
141*6b3a42afSjmmv                 6, 10);
142*6b3a42afSjmmv     refill_test("first-long-word\nother words", "first-long-word other words",
143*6b3a42afSjmmv                 11, 20);
144*6b3a42afSjmmv     refill_test("first-long-word other\nwords", "first-long-word other words",
145*6b3a42afSjmmv                 21, 26);
146*6b3a42afSjmmv     refill_test("first-long-word other words", "first-long-word other words",
147*6b3a42afSjmmv                 27, 28);
148*6b3a42afSjmmv }
149*6b3a42afSjmmv 
150*6b3a42afSjmmv 
151*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__break_many);
ATF_TEST_CASE_BODY(refill__break_many)152*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__break_many)
153*6b3a42afSjmmv {
154*6b3a42afSjmmv     refill_test("this is a long\nparagraph to be\nsplit into\npieces",
155*6b3a42afSjmmv                 "this is a long paragraph to be split into pieces",
156*6b3a42afSjmmv                 15, 15);
157*6b3a42afSjmmv }
158*6b3a42afSjmmv 
159*6b3a42afSjmmv 
160*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__cannot_break);
ATF_TEST_CASE_BODY(refill__cannot_break)161*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__cannot_break)
162*6b3a42afSjmmv {
163*6b3a42afSjmmv     refill_test("this-is-a-long-string", "this-is-a-long-string", 5, 5);
164*6b3a42afSjmmv 
165*6b3a42afSjmmv     refill_test("this is\na-string-with-long-words",
166*6b3a42afSjmmv                 "this is a-string-with-long-words", 10, 10);
167*6b3a42afSjmmv }
168*6b3a42afSjmmv 
169*6b3a42afSjmmv 
170*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(refill__preserve_whitespace);
ATF_TEST_CASE_BODY(refill__preserve_whitespace)171*6b3a42afSjmmv ATF_TEST_CASE_BODY(refill__preserve_whitespace)
172*6b3a42afSjmmv {
173*6b3a42afSjmmv     refill_test("foo  bar baz  ", "foo  bar baz  ", 80, 80);
174*6b3a42afSjmmv     refill_test("foo  \n bar", "foo    bar", 5, 5);
175*6b3a42afSjmmv 
176*6b3a42afSjmmv     std::vector< std::string > exp_lines;
177*6b3a42afSjmmv     exp_lines.push_back("foo \n");
178*6b3a42afSjmmv     exp_lines.push_back(" bar");
179*6b3a42afSjmmv     ATF_REQUIRE(exp_lines == text::refill("foo \n  bar", 5));
180*6b3a42afSjmmv     ATF_REQUIRE_EQ("foo \n\n bar", text::refill_as_string("foo \n  bar", 5));
181*6b3a42afSjmmv }
182*6b3a42afSjmmv 
183*6b3a42afSjmmv 
184*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(join__empty);
ATF_TEST_CASE_BODY(join__empty)185*6b3a42afSjmmv ATF_TEST_CASE_BODY(join__empty)
186*6b3a42afSjmmv {
187*6b3a42afSjmmv     std::vector< std::string > lines;
188*6b3a42afSjmmv     ATF_REQUIRE_EQ("", text::join(lines, " "));
189*6b3a42afSjmmv }
190*6b3a42afSjmmv 
191*6b3a42afSjmmv 
192*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(join__one);
ATF_TEST_CASE_BODY(join__one)193*6b3a42afSjmmv ATF_TEST_CASE_BODY(join__one)
194*6b3a42afSjmmv {
195*6b3a42afSjmmv     std::vector< std::string > lines;
196*6b3a42afSjmmv     lines.push_back("first line");
197*6b3a42afSjmmv     ATF_REQUIRE_EQ("first line", text::join(lines, "*"));
198*6b3a42afSjmmv }
199*6b3a42afSjmmv 
200*6b3a42afSjmmv 
201*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(join__several);
ATF_TEST_CASE_BODY(join__several)202*6b3a42afSjmmv ATF_TEST_CASE_BODY(join__several)
203*6b3a42afSjmmv {
204*6b3a42afSjmmv     std::vector< std::string > lines;
205*6b3a42afSjmmv     lines.push_back("first abc");
206*6b3a42afSjmmv     lines.push_back("second");
207*6b3a42afSjmmv     lines.push_back("and last line");
208*6b3a42afSjmmv     ATF_REQUIRE_EQ("first abc second and last line", text::join(lines, " "));
209*6b3a42afSjmmv     ATF_REQUIRE_EQ("first abc***second***and last line",
210*6b3a42afSjmmv                    text::join(lines, "***"));
211*6b3a42afSjmmv }
212*6b3a42afSjmmv 
213*6b3a42afSjmmv 
214*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(join__unordered);
ATF_TEST_CASE_BODY(join__unordered)215*6b3a42afSjmmv ATF_TEST_CASE_BODY(join__unordered)
216*6b3a42afSjmmv {
217*6b3a42afSjmmv     std::set< std::string > lines;
218*6b3a42afSjmmv     lines.insert("first");
219*6b3a42afSjmmv     lines.insert("second");
220*6b3a42afSjmmv     const std::string joined = text::join(lines, " ");
221*6b3a42afSjmmv     ATF_REQUIRE(joined == "first second" || joined == "second first");
222*6b3a42afSjmmv }
223*6b3a42afSjmmv 
224*6b3a42afSjmmv 
225*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(split__empty);
ATF_TEST_CASE_BODY(split__empty)226*6b3a42afSjmmv ATF_TEST_CASE_BODY(split__empty)
227*6b3a42afSjmmv {
228*6b3a42afSjmmv     std::vector< std::string > words = text::split("", ' ');
229*6b3a42afSjmmv     std::vector< std::string > exp_words;
230*6b3a42afSjmmv     ATF_REQUIRE(exp_words == words);
231*6b3a42afSjmmv }
232*6b3a42afSjmmv 
233*6b3a42afSjmmv 
234*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(split__one);
ATF_TEST_CASE_BODY(split__one)235*6b3a42afSjmmv ATF_TEST_CASE_BODY(split__one)
236*6b3a42afSjmmv {
237*6b3a42afSjmmv     std::vector< std::string > words = text::split("foo", ' ');
238*6b3a42afSjmmv     std::vector< std::string > exp_words;
239*6b3a42afSjmmv     exp_words.push_back("foo");
240*6b3a42afSjmmv     ATF_REQUIRE(exp_words == words);
241*6b3a42afSjmmv }
242*6b3a42afSjmmv 
243*6b3a42afSjmmv 
244*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(split__several__simple);
ATF_TEST_CASE_BODY(split__several__simple)245*6b3a42afSjmmv ATF_TEST_CASE_BODY(split__several__simple)
246*6b3a42afSjmmv {
247*6b3a42afSjmmv     std::vector< std::string > words = text::split("foo bar baz", ' ');
248*6b3a42afSjmmv     std::vector< std::string > exp_words;
249*6b3a42afSjmmv     exp_words.push_back("foo");
250*6b3a42afSjmmv     exp_words.push_back("bar");
251*6b3a42afSjmmv     exp_words.push_back("baz");
252*6b3a42afSjmmv     ATF_REQUIRE(exp_words == words);
253*6b3a42afSjmmv }
254*6b3a42afSjmmv 
255*6b3a42afSjmmv 
256*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(split__several__delimiters);
ATF_TEST_CASE_BODY(split__several__delimiters)257*6b3a42afSjmmv ATF_TEST_CASE_BODY(split__several__delimiters)
258*6b3a42afSjmmv {
259*6b3a42afSjmmv     std::vector< std::string > words = text::split("XfooXXbarXXXbazXX", 'X');
260*6b3a42afSjmmv     std::vector< std::string > exp_words;
261*6b3a42afSjmmv     exp_words.push_back("");
262*6b3a42afSjmmv     exp_words.push_back("foo");
263*6b3a42afSjmmv     exp_words.push_back("");
264*6b3a42afSjmmv     exp_words.push_back("bar");
265*6b3a42afSjmmv     exp_words.push_back("");
266*6b3a42afSjmmv     exp_words.push_back("");
267*6b3a42afSjmmv     exp_words.push_back("baz");
268*6b3a42afSjmmv     exp_words.push_back("");
269*6b3a42afSjmmv     exp_words.push_back("");
270*6b3a42afSjmmv     ATF_REQUIRE(exp_words == words);
271*6b3a42afSjmmv }
272*6b3a42afSjmmv 
273*6b3a42afSjmmv 
274*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__ok__bool);
ATF_TEST_CASE_BODY(to_type__ok__bool)275*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__ok__bool)
276*6b3a42afSjmmv {
277*6b3a42afSjmmv     ATF_REQUIRE( text::to_type< bool >("true"));
278*6b3a42afSjmmv     ATF_REQUIRE(!text::to_type< bool >("false"));
279*6b3a42afSjmmv }
280*6b3a42afSjmmv 
281*6b3a42afSjmmv 
282*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__ok__numerical);
ATF_TEST_CASE_BODY(to_type__ok__numerical)283*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__ok__numerical)
284*6b3a42afSjmmv {
285*6b3a42afSjmmv     ATF_REQUIRE_EQ(12, text::to_type< int >("12"));
286*6b3a42afSjmmv     ATF_REQUIRE_EQ(18745, text::to_type< int >("18745"));
287*6b3a42afSjmmv     ATF_REQUIRE_EQ(-12345, text::to_type< int >("-12345"));
288*6b3a42afSjmmv 
289*6b3a42afSjmmv     ATF_REQUIRE_EQ(12.0, text::to_type< double >("12"));
290*6b3a42afSjmmv     ATF_REQUIRE_EQ(12.5, text::to_type< double >("12.5"));
291*6b3a42afSjmmv }
292*6b3a42afSjmmv 
293*6b3a42afSjmmv 
294*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__ok__string);
ATF_TEST_CASE_BODY(to_type__ok__string)295*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__ok__string)
296*6b3a42afSjmmv {
297*6b3a42afSjmmv     // While this seems redundant, having this particular specialization that
298*6b3a42afSjmmv     // does nothing allows callers to delegate work to to_type without worrying
299*6b3a42afSjmmv     // about the particular type being converted.
300*6b3a42afSjmmv     ATF_REQUIRE_EQ("", text::to_type< std::string >(""));
301*6b3a42afSjmmv     ATF_REQUIRE_EQ("  abcd  ", text::to_type< std::string >("  abcd  "));
302*6b3a42afSjmmv }
303*6b3a42afSjmmv 
304*6b3a42afSjmmv 
305*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__empty);
ATF_TEST_CASE_BODY(to_type__empty)306*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__empty)
307*6b3a42afSjmmv {
308*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< int >(""));
309*6b3a42afSjmmv }
310*6b3a42afSjmmv 
311*6b3a42afSjmmv 
312*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__invalid__bool);
ATF_TEST_CASE_BODY(to_type__invalid__bool)313*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__invalid__bool)
314*6b3a42afSjmmv {
315*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< bool >(""));
316*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< bool >("true "));
317*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< bool >("foo"));
318*6b3a42afSjmmv }
319*6b3a42afSjmmv 
320*6b3a42afSjmmv 
321*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(to_type__invalid__numerical);
ATF_TEST_CASE_BODY(to_type__invalid__numerical)322*6b3a42afSjmmv ATF_TEST_CASE_BODY(to_type__invalid__numerical)
323*6b3a42afSjmmv {
324*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< int >(" 3"));
325*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< int >("3 "));
326*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< int >("3a"));
327*6b3a42afSjmmv     ATF_REQUIRE_THROW(text::value_error, text::to_type< int >("a3"));
328*6b3a42afSjmmv }
329*6b3a42afSjmmv 
330*6b3a42afSjmmv 
ATF_INIT_TEST_CASES(tcs)331*6b3a42afSjmmv ATF_INIT_TEST_CASES(tcs)
332*6b3a42afSjmmv {
333*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, quote__empty);
334*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, quote__no_escaping);
335*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, quote__some_escaping);
336*6b3a42afSjmmv 
337*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__empty);
338*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__no_changes);
339*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__break_one);
340*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__break_one__not_first_word);
341*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__break_many);
342*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__cannot_break);
343*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, refill__preserve_whitespace);
344*6b3a42afSjmmv 
345*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, join__empty);
346*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, join__one);
347*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, join__several);
348*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, join__unordered);
349*6b3a42afSjmmv 
350*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, split__empty);
351*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, split__one);
352*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, split__several__simple);
353*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, split__several__delimiters);
354*6b3a42afSjmmv 
355*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__ok__bool);
356*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__ok__numerical);
357*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__ok__string);
358*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__empty);
359*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__invalid__bool);
360*6b3a42afSjmmv     ATF_ADD_TEST_CASE(tcs, to_type__invalid__numerical);
361*6b3a42afSjmmv }
362