xref: /minix3/external/bsd/bind/dist/unit/atf-src/atf-c/detail/text_test.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: text_test.c,v 1.4 2014/12/10 04:38:03 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Automated Testing Framework (atf)
5*00b67f09SDavid van Moolenbroek  *
6*00b67f09SDavid van Moolenbroek  * Copyright (c) 2008 The NetBSD Foundation, Inc.
7*00b67f09SDavid van Moolenbroek  * All rights reserved.
8*00b67f09SDavid van Moolenbroek  *
9*00b67f09SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
10*00b67f09SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
11*00b67f09SDavid van Moolenbroek  * are met:
12*00b67f09SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
13*00b67f09SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
14*00b67f09SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
15*00b67f09SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
16*00b67f09SDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
17*00b67f09SDavid van Moolenbroek  *
18*00b67f09SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
19*00b67f09SDavid van Moolenbroek  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20*00b67f09SDavid van Moolenbroek  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21*00b67f09SDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22*00b67f09SDavid van Moolenbroek  * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
23*00b67f09SDavid van Moolenbroek  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*00b67f09SDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25*00b67f09SDavid van Moolenbroek  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*00b67f09SDavid van Moolenbroek  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
27*00b67f09SDavid van Moolenbroek  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28*00b67f09SDavid van Moolenbroek  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29*00b67f09SDavid van Moolenbroek  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*00b67f09SDavid van Moolenbroek  */
31*00b67f09SDavid van Moolenbroek 
32*00b67f09SDavid van Moolenbroek #include <stdio.h>
33*00b67f09SDavid van Moolenbroek #include <stdlib.h>
34*00b67f09SDavid van Moolenbroek #include <string.h>
35*00b67f09SDavid van Moolenbroek 
36*00b67f09SDavid van Moolenbroek #include <atf-c.h>
37*00b67f09SDavid van Moolenbroek 
38*00b67f09SDavid van Moolenbroek #include "sanity.h"
39*00b67f09SDavid van Moolenbroek #include "test_helpers.h"
40*00b67f09SDavid van Moolenbroek #include "text.h"
41*00b67f09SDavid van Moolenbroek 
42*00b67f09SDavid van Moolenbroek /* ---------------------------------------------------------------------
43*00b67f09SDavid van Moolenbroek  * Auxiliary functions.
44*00b67f09SDavid van Moolenbroek  * --------------------------------------------------------------------- */
45*00b67f09SDavid van Moolenbroek 
46*00b67f09SDavid van Moolenbroek #define REQUIRE_ERROR(exp) \
47*00b67f09SDavid van Moolenbroek     do { \
48*00b67f09SDavid van Moolenbroek         atf_error_t err = exp; \
49*00b67f09SDavid van Moolenbroek         ATF_REQUIRE(atf_is_error(err)); \
50*00b67f09SDavid van Moolenbroek         atf_error_free(err); \
51*00b67f09SDavid van Moolenbroek     } while (/*CONSTCOND*/0)
52*00b67f09SDavid van Moolenbroek 
53*00b67f09SDavid van Moolenbroek static
54*00b67f09SDavid van Moolenbroek size_t
array_size(const char * words[])55*00b67f09SDavid van Moolenbroek array_size(const char *words[])
56*00b67f09SDavid van Moolenbroek {
57*00b67f09SDavid van Moolenbroek     size_t count;
58*00b67f09SDavid van Moolenbroek     const char **word;
59*00b67f09SDavid van Moolenbroek 
60*00b67f09SDavid van Moolenbroek     count = 0;
61*00b67f09SDavid van Moolenbroek     for (word = words; *word != NULL; word++)
62*00b67f09SDavid van Moolenbroek         count++;
63*00b67f09SDavid van Moolenbroek 
64*00b67f09SDavid van Moolenbroek     return count;
65*00b67f09SDavid van Moolenbroek }
66*00b67f09SDavid van Moolenbroek 
67*00b67f09SDavid van Moolenbroek static
68*00b67f09SDavid van Moolenbroek void
check_split(const char * str,const char * delim,const char * words[])69*00b67f09SDavid van Moolenbroek check_split(const char *str, const char *delim, const char *words[])
70*00b67f09SDavid van Moolenbroek {
71*00b67f09SDavid van Moolenbroek     atf_list_t list;
72*00b67f09SDavid van Moolenbroek     const char **word;
73*00b67f09SDavid van Moolenbroek     size_t i;
74*00b67f09SDavid van Moolenbroek 
75*00b67f09SDavid van Moolenbroek     printf("Splitting '%s' with delimiter '%s'\n", str, delim);
76*00b67f09SDavid van Moolenbroek     CE(atf_text_split(str, delim, &list));
77*00b67f09SDavid van Moolenbroek 
78*00b67f09SDavid van Moolenbroek     printf("Expecting %zd words\n", array_size(words));
79*00b67f09SDavid van Moolenbroek     ATF_CHECK_EQ(atf_list_size(&list), array_size(words));
80*00b67f09SDavid van Moolenbroek 
81*00b67f09SDavid van Moolenbroek     for (word = words, i = 0; *word != NULL; word++, i++) {
82*00b67f09SDavid van Moolenbroek         printf("Word at position %zd should be '%s'\n", i, words[i]);
83*00b67f09SDavid van Moolenbroek         ATF_CHECK_STREQ((const char *)atf_list_index_c(&list, i), words[i]);
84*00b67f09SDavid van Moolenbroek     }
85*00b67f09SDavid van Moolenbroek 
86*00b67f09SDavid van Moolenbroek     atf_list_fini(&list);
87*00b67f09SDavid van Moolenbroek }
88*00b67f09SDavid van Moolenbroek 
89*00b67f09SDavid van Moolenbroek static
90*00b67f09SDavid van Moolenbroek atf_error_t
word_acum(const char * word,void * data)91*00b67f09SDavid van Moolenbroek word_acum(const char *word, void *data)
92*00b67f09SDavid van Moolenbroek {
93*00b67f09SDavid van Moolenbroek     char *acum = data;
94*00b67f09SDavid van Moolenbroek 
95*00b67f09SDavid van Moolenbroek     strcat(acum, word);
96*00b67f09SDavid van Moolenbroek 
97*00b67f09SDavid van Moolenbroek     return atf_no_error();
98*00b67f09SDavid van Moolenbroek }
99*00b67f09SDavid van Moolenbroek 
100*00b67f09SDavid van Moolenbroek static
101*00b67f09SDavid van Moolenbroek atf_error_t
word_count(const char * word ATF_DEFS_ATTRIBUTE_UNUSED,void * data)102*00b67f09SDavid van Moolenbroek word_count(const char *word ATF_DEFS_ATTRIBUTE_UNUSED, void *data)
103*00b67f09SDavid van Moolenbroek {
104*00b67f09SDavid van Moolenbroek     size_t *counter = data;
105*00b67f09SDavid van Moolenbroek 
106*00b67f09SDavid van Moolenbroek     (*counter)++;
107*00b67f09SDavid van Moolenbroek 
108*00b67f09SDavid van Moolenbroek     return atf_no_error();
109*00b67f09SDavid van Moolenbroek }
110*00b67f09SDavid van Moolenbroek 
111*00b67f09SDavid van Moolenbroek struct fail_at {
112*00b67f09SDavid van Moolenbroek     int failpos;
113*00b67f09SDavid van Moolenbroek     int curpos;
114*00b67f09SDavid van Moolenbroek };
115*00b67f09SDavid van Moolenbroek 
116*00b67f09SDavid van Moolenbroek static
117*00b67f09SDavid van Moolenbroek atf_error_t
word_fail_at(const char * word ATF_DEFS_ATTRIBUTE_UNUSED,void * data)118*00b67f09SDavid van Moolenbroek word_fail_at(const char *word ATF_DEFS_ATTRIBUTE_UNUSED, void *data)
119*00b67f09SDavid van Moolenbroek {
120*00b67f09SDavid van Moolenbroek     struct fail_at *fa = data;
121*00b67f09SDavid van Moolenbroek     atf_error_t err;
122*00b67f09SDavid van Moolenbroek 
123*00b67f09SDavid van Moolenbroek     if (fa->failpos == fa->curpos)
124*00b67f09SDavid van Moolenbroek         err = atf_no_memory_error(); /* Just a random error. */
125*00b67f09SDavid van Moolenbroek     else {
126*00b67f09SDavid van Moolenbroek         fa->curpos++;
127*00b67f09SDavid van Moolenbroek         err = atf_no_error();
128*00b67f09SDavid van Moolenbroek     }
129*00b67f09SDavid van Moolenbroek 
130*00b67f09SDavid van Moolenbroek     return err;
131*00b67f09SDavid van Moolenbroek }
132*00b67f09SDavid van Moolenbroek 
133*00b67f09SDavid van Moolenbroek /* ---------------------------------------------------------------------
134*00b67f09SDavid van Moolenbroek  * Test cases for the free functions.
135*00b67f09SDavid van Moolenbroek  * --------------------------------------------------------------------- */
136*00b67f09SDavid van Moolenbroek 
137*00b67f09SDavid van Moolenbroek ATF_TC(for_each_word);
ATF_TC_HEAD(for_each_word,tc)138*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(for_each_word, tc)
139*00b67f09SDavid van Moolenbroek {
140*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the atf_text_for_each_word"
141*00b67f09SDavid van Moolenbroek                       "function");
142*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(for_each_word,tc)143*00b67f09SDavid van Moolenbroek ATF_TC_BODY(for_each_word, tc)
144*00b67f09SDavid van Moolenbroek {
145*00b67f09SDavid van Moolenbroek     size_t cnt;
146*00b67f09SDavid van Moolenbroek     char acum[1024];
147*00b67f09SDavid van Moolenbroek 
148*00b67f09SDavid van Moolenbroek     cnt = 0;
149*00b67f09SDavid van Moolenbroek     strcpy(acum, "");
150*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3", " ", word_count, &cnt));
151*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3", " ", word_acum, acum));
152*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(cnt == 3);
153*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(acum, "123") == 0);
154*00b67f09SDavid van Moolenbroek 
155*00b67f09SDavid van Moolenbroek     cnt = 0;
156*00b67f09SDavid van Moolenbroek     strcpy(acum, "");
157*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3", ".", word_count, &cnt));
158*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3", ".", word_acum, acum));
159*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(cnt == 1);
160*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(acum, "1 2 3") == 0);
161*00b67f09SDavid van Moolenbroek 
162*00b67f09SDavid van Moolenbroek     cnt = 0;
163*00b67f09SDavid van Moolenbroek     strcpy(acum, "");
164*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3 4 5", " ", word_count, &cnt));
165*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2 3 4 5", " ", word_acum, acum));
166*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(cnt == 5);
167*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(acum, "12345") == 0);
168*00b67f09SDavid van Moolenbroek 
169*00b67f09SDavid van Moolenbroek     cnt = 0;
170*00b67f09SDavid van Moolenbroek     strcpy(acum, "");
171*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2.3.4 5", " .", word_count, &cnt));
172*00b67f09SDavid van Moolenbroek     RE(atf_text_for_each_word("1 2.3.4 5", " .", word_acum, acum));
173*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(cnt == 5);
174*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(acum, "12345") == 0);
175*00b67f09SDavid van Moolenbroek 
176*00b67f09SDavid van Moolenbroek     {
177*00b67f09SDavid van Moolenbroek         struct fail_at fa;
178*00b67f09SDavid van Moolenbroek         fa.failpos = 3;
179*00b67f09SDavid van Moolenbroek         fa.curpos = 0;
180*00b67f09SDavid van Moolenbroek         atf_error_t err = atf_text_for_each_word("a b c d e", " ",
181*00b67f09SDavid van Moolenbroek                                                  word_fail_at, &fa);
182*00b67f09SDavid van Moolenbroek         ATF_REQUIRE(atf_is_error(err));
183*00b67f09SDavid van Moolenbroek         ATF_REQUIRE(atf_error_is(err, "no_memory"));
184*00b67f09SDavid van Moolenbroek         ATF_REQUIRE(fa.curpos == 3);
185*00b67f09SDavid van Moolenbroek         atf_error_free(err);
186*00b67f09SDavid van Moolenbroek     }
187*00b67f09SDavid van Moolenbroek }
188*00b67f09SDavid van Moolenbroek 
189*00b67f09SDavid van Moolenbroek ATF_TC(format);
ATF_TC_HEAD(format,tc)190*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(format, tc)
191*00b67f09SDavid van Moolenbroek {
192*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the construction of free-form "
193*00b67f09SDavid van Moolenbroek                       "strings using a variable parameters list");
194*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(format,tc)195*00b67f09SDavid van Moolenbroek ATF_TC_BODY(format, tc)
196*00b67f09SDavid van Moolenbroek {
197*00b67f09SDavid van Moolenbroek     char *str;
198*00b67f09SDavid van Moolenbroek     atf_error_t err;
199*00b67f09SDavid van Moolenbroek 
200*00b67f09SDavid van Moolenbroek     err = atf_text_format(&str, "%s %s %d", "Test", "string", 1);
201*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!atf_is_error(err));
202*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(str, "Test string 1") == 0);
203*00b67f09SDavid van Moolenbroek     free(str);
204*00b67f09SDavid van Moolenbroek }
205*00b67f09SDavid van Moolenbroek 
206*00b67f09SDavid van Moolenbroek static
207*00b67f09SDavid van Moolenbroek void
format_ap(char ** dest,const char * fmt,...)208*00b67f09SDavid van Moolenbroek format_ap(char **dest, const char *fmt, ...)
209*00b67f09SDavid van Moolenbroek {
210*00b67f09SDavid van Moolenbroek     va_list ap;
211*00b67f09SDavid van Moolenbroek     atf_error_t err;
212*00b67f09SDavid van Moolenbroek 
213*00b67f09SDavid van Moolenbroek     va_start(ap, fmt);
214*00b67f09SDavid van Moolenbroek     err = atf_text_format_ap(dest, fmt, ap);
215*00b67f09SDavid van Moolenbroek     va_end(ap);
216*00b67f09SDavid van Moolenbroek 
217*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!atf_is_error(err));
218*00b67f09SDavid van Moolenbroek }
219*00b67f09SDavid van Moolenbroek 
220*00b67f09SDavid van Moolenbroek ATF_TC(format_ap);
ATF_TC_HEAD(format_ap,tc)221*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(format_ap, tc)
222*00b67f09SDavid van Moolenbroek {
223*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the construction of free-form "
224*00b67f09SDavid van Moolenbroek                       "strings using a va_list argument");
225*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(format_ap,tc)226*00b67f09SDavid van Moolenbroek ATF_TC_BODY(format_ap, tc)
227*00b67f09SDavid van Moolenbroek {
228*00b67f09SDavid van Moolenbroek     char *str;
229*00b67f09SDavid van Moolenbroek 
230*00b67f09SDavid van Moolenbroek     format_ap(&str, "%s %s %d", "Test", "string", 1);
231*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(strcmp(str, "Test string 1") == 0);
232*00b67f09SDavid van Moolenbroek     free(str);
233*00b67f09SDavid van Moolenbroek }
234*00b67f09SDavid van Moolenbroek 
235*00b67f09SDavid van Moolenbroek ATF_TC(split);
ATF_TC_HEAD(split,tc)236*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(split, tc)
237*00b67f09SDavid van Moolenbroek {
238*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the split function");
239*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(split,tc)240*00b67f09SDavid van Moolenbroek ATF_TC_BODY(split, tc)
241*00b67f09SDavid van Moolenbroek {
242*00b67f09SDavid van Moolenbroek     {
243*00b67f09SDavid van Moolenbroek         const char *words[] = { NULL };
244*00b67f09SDavid van Moolenbroek         check_split("", " ", words);
245*00b67f09SDavid van Moolenbroek     }
246*00b67f09SDavid van Moolenbroek 
247*00b67f09SDavid van Moolenbroek     {
248*00b67f09SDavid van Moolenbroek         const char *words[] = { NULL };
249*00b67f09SDavid van Moolenbroek         check_split(" ", " ", words);
250*00b67f09SDavid van Moolenbroek     }
251*00b67f09SDavid van Moolenbroek 
252*00b67f09SDavid van Moolenbroek     {
253*00b67f09SDavid van Moolenbroek         const char *words[] = { NULL };
254*00b67f09SDavid van Moolenbroek         check_split("    ", " ", words);
255*00b67f09SDavid van Moolenbroek     }
256*00b67f09SDavid van Moolenbroek 
257*00b67f09SDavid van Moolenbroek     {
258*00b67f09SDavid van Moolenbroek         const char *words[] = { "a", "b", NULL };
259*00b67f09SDavid van Moolenbroek         check_split("a b", " ", words);
260*00b67f09SDavid van Moolenbroek     }
261*00b67f09SDavid van Moolenbroek 
262*00b67f09SDavid van Moolenbroek     {
263*00b67f09SDavid van Moolenbroek         const char *words[] = { "a", "b", "c", "d", NULL };
264*00b67f09SDavid van Moolenbroek         check_split("a b c d", " ", words);
265*00b67f09SDavid van Moolenbroek     }
266*00b67f09SDavid van Moolenbroek 
267*00b67f09SDavid van Moolenbroek     {
268*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", NULL };
269*00b67f09SDavid van Moolenbroek         check_split("foo bar", " ", words);
270*00b67f09SDavid van Moolenbroek     }
271*00b67f09SDavid van Moolenbroek 
272*00b67f09SDavid van Moolenbroek     {
273*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", "baz", "foobar", NULL };
274*00b67f09SDavid van Moolenbroek         check_split("foo bar baz foobar", " ", words);
275*00b67f09SDavid van Moolenbroek     }
276*00b67f09SDavid van Moolenbroek 
277*00b67f09SDavid van Moolenbroek     {
278*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", NULL };
279*00b67f09SDavid van Moolenbroek         check_split(" foo bar", " ", words);
280*00b67f09SDavid van Moolenbroek     }
281*00b67f09SDavid van Moolenbroek 
282*00b67f09SDavid van Moolenbroek     {
283*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", NULL };
284*00b67f09SDavid van Moolenbroek         check_split("foo  bar", " ", words);
285*00b67f09SDavid van Moolenbroek     }
286*00b67f09SDavid van Moolenbroek 
287*00b67f09SDavid van Moolenbroek     {
288*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", NULL };
289*00b67f09SDavid van Moolenbroek         check_split("foo bar ", " ", words);
290*00b67f09SDavid van Moolenbroek     }
291*00b67f09SDavid van Moolenbroek 
292*00b67f09SDavid van Moolenbroek     {
293*00b67f09SDavid van Moolenbroek         const char *words[] = { "foo", "bar", NULL };
294*00b67f09SDavid van Moolenbroek         check_split("  foo  bar  ", " ", words);
295*00b67f09SDavid van Moolenbroek     }
296*00b67f09SDavid van Moolenbroek }
297*00b67f09SDavid van Moolenbroek 
298*00b67f09SDavid van Moolenbroek ATF_TC(split_delims);
ATF_TC_HEAD(split_delims,tc)299*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(split_delims, tc)
300*00b67f09SDavid van Moolenbroek {
301*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the split function using "
302*00b67f09SDavid van Moolenbroek                       "different delimiters");
303*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(split_delims,tc)304*00b67f09SDavid van Moolenbroek ATF_TC_BODY(split_delims, tc)
305*00b67f09SDavid van Moolenbroek {
306*00b67f09SDavid van Moolenbroek 
307*00b67f09SDavid van Moolenbroek     {
308*00b67f09SDavid van Moolenbroek         const char *words[] = { NULL };
309*00b67f09SDavid van Moolenbroek         check_split("", "/", words);
310*00b67f09SDavid van Moolenbroek     }
311*00b67f09SDavid van Moolenbroek 
312*00b67f09SDavid van Moolenbroek     {
313*00b67f09SDavid van Moolenbroek         const char *words[] = { " ", NULL };
314*00b67f09SDavid van Moolenbroek         check_split(" ", "/", words);
315*00b67f09SDavid van Moolenbroek     }
316*00b67f09SDavid van Moolenbroek 
317*00b67f09SDavid van Moolenbroek     {
318*00b67f09SDavid van Moolenbroek         const char *words[] = { "    ", NULL };
319*00b67f09SDavid van Moolenbroek         check_split("    ", "/", words);
320*00b67f09SDavid van Moolenbroek     }
321*00b67f09SDavid van Moolenbroek 
322*00b67f09SDavid van Moolenbroek     {
323*00b67f09SDavid van Moolenbroek         const char *words[] = { "a", "b", NULL };
324*00b67f09SDavid van Moolenbroek         check_split("a/b", "/", words);
325*00b67f09SDavid van Moolenbroek     }
326*00b67f09SDavid van Moolenbroek 
327*00b67f09SDavid van Moolenbroek     {
328*00b67f09SDavid van Moolenbroek         const char *words[] = { "a", "bcd", "ef", NULL };
329*00b67f09SDavid van Moolenbroek         check_split("aLONGDELIMbcdLONGDELIMef", "LONGDELIM", words);
330*00b67f09SDavid van Moolenbroek     }
331*00b67f09SDavid van Moolenbroek }
332*00b67f09SDavid van Moolenbroek 
333*00b67f09SDavid van Moolenbroek ATF_TC(to_bool);
ATF_TC_HEAD(to_bool,tc)334*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(to_bool, tc)
335*00b67f09SDavid van Moolenbroek {
336*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the atf_text_to_bool function");
337*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(to_bool,tc)338*00b67f09SDavid van Moolenbroek ATF_TC_BODY(to_bool, tc)
339*00b67f09SDavid van Moolenbroek {
340*00b67f09SDavid van Moolenbroek     bool b;
341*00b67f09SDavid van Moolenbroek 
342*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("true", &b)); ATF_REQUIRE(b);
343*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("TRUE", &b)); ATF_REQUIRE(b);
344*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("yes", &b)); ATF_REQUIRE(b);
345*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("YES", &b)); ATF_REQUIRE(b);
346*00b67f09SDavid van Moolenbroek 
347*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("false", &b)); ATF_REQUIRE(!b);
348*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("FALSE", &b)); ATF_REQUIRE(!b);
349*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("no", &b)); ATF_REQUIRE(!b);
350*00b67f09SDavid van Moolenbroek     RE(atf_text_to_bool("NO", &b)); ATF_REQUIRE(!b);
351*00b67f09SDavid van Moolenbroek 
352*00b67f09SDavid van Moolenbroek     b = false;
353*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("", &b));
354*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!b);
355*00b67f09SDavid van Moolenbroek     b = true;
356*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("", &b));
357*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(b);
358*00b67f09SDavid van Moolenbroek 
359*00b67f09SDavid van Moolenbroek     b = false;
360*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("tru", &b));
361*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!b);
362*00b67f09SDavid van Moolenbroek     b = true;
363*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("tru", &b));
364*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(b);
365*00b67f09SDavid van Moolenbroek 
366*00b67f09SDavid van Moolenbroek     b = false;
367*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("true2", &b));
368*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!b);
369*00b67f09SDavid van Moolenbroek     b = true;
370*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("true2", &b));
371*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(b);
372*00b67f09SDavid van Moolenbroek 
373*00b67f09SDavid van Moolenbroek     b = false;
374*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("fals", &b));
375*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!b);
376*00b67f09SDavid van Moolenbroek     b = true;
377*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("fals", &b));
378*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(b);
379*00b67f09SDavid van Moolenbroek 
380*00b67f09SDavid van Moolenbroek     b = false;
381*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("false2", &b));
382*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(!b);
383*00b67f09SDavid van Moolenbroek     b = true;
384*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_bool("false2", &b));
385*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(b);
386*00b67f09SDavid van Moolenbroek }
387*00b67f09SDavid van Moolenbroek 
388*00b67f09SDavid van Moolenbroek ATF_TC(to_long);
ATF_TC_HEAD(to_long,tc)389*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(to_long, tc)
390*00b67f09SDavid van Moolenbroek {
391*00b67f09SDavid van Moolenbroek     atf_tc_set_md_var(tc, "descr", "Checks the atf_text_to_long function");
392*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(to_long,tc)393*00b67f09SDavid van Moolenbroek ATF_TC_BODY(to_long, tc)
394*00b67f09SDavid van Moolenbroek {
395*00b67f09SDavid van Moolenbroek     long l;
396*00b67f09SDavid van Moolenbroek 
397*00b67f09SDavid van Moolenbroek     RE(atf_text_to_long("0", &l)); ATF_REQUIRE_EQ(l, 0);
398*00b67f09SDavid van Moolenbroek     RE(atf_text_to_long("-5", &l)); ATF_REQUIRE_EQ(l, -5);
399*00b67f09SDavid van Moolenbroek     RE(atf_text_to_long("5", &l)); ATF_REQUIRE_EQ(l, 5);
400*00b67f09SDavid van Moolenbroek     RE(atf_text_to_long("123456789", &l)); ATF_REQUIRE_EQ(l, 123456789);
401*00b67f09SDavid van Moolenbroek 
402*00b67f09SDavid van Moolenbroek     l = 1212;
403*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_long("", &l));
404*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(l, 1212);
405*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_long("foo", &l));
406*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(l, 1212);
407*00b67f09SDavid van Moolenbroek     REQUIRE_ERROR(atf_text_to_long("1234x", &l));
408*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(l, 1212);
409*00b67f09SDavid van Moolenbroek }
410*00b67f09SDavid van Moolenbroek 
411*00b67f09SDavid van Moolenbroek /* ---------------------------------------------------------------------
412*00b67f09SDavid van Moolenbroek  * Main.
413*00b67f09SDavid van Moolenbroek  * --------------------------------------------------------------------- */
414*00b67f09SDavid van Moolenbroek 
ATF_TP_ADD_TCS(tp)415*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp)
416*00b67f09SDavid van Moolenbroek {
417*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, for_each_word);
418*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, format);
419*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, format_ap);
420*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, split);
421*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, split_delims);
422*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, to_bool);
423*00b67f09SDavid van Moolenbroek     ATF_TP_ADD_TC(tp, to_long);
424*00b67f09SDavid van Moolenbroek 
425*00b67f09SDavid van Moolenbroek     return atf_no_error();
426*00b67f09SDavid van Moolenbroek }
427