xref: /minix3/external/bsd/bind/dist/unit/atf-src/atf-run/atffile_test.cpp (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek //
2*00b67f09SDavid van Moolenbroek // Automated Testing Framework (atf)
3*00b67f09SDavid van Moolenbroek //
4*00b67f09SDavid van Moolenbroek // Copyright (c) 2009 The NetBSD Foundation, Inc.
5*00b67f09SDavid van Moolenbroek // All rights reserved.
6*00b67f09SDavid van Moolenbroek //
7*00b67f09SDavid van Moolenbroek // Redistribution and use in source and binary forms, with or without
8*00b67f09SDavid van Moolenbroek // modification, are permitted provided that the following conditions
9*00b67f09SDavid van Moolenbroek // are met:
10*00b67f09SDavid van Moolenbroek // 1. Redistributions of source code must retain the above copyright
11*00b67f09SDavid van Moolenbroek //    notice, this list of conditions and the following disclaimer.
12*00b67f09SDavid van Moolenbroek // 2. Redistributions in binary form must reproduce the above copyright
13*00b67f09SDavid van Moolenbroek //    notice, this list of conditions and the following disclaimer in the
14*00b67f09SDavid van Moolenbroek //    documentation and/or other materials provided with the distribution.
15*00b67f09SDavid van Moolenbroek //
16*00b67f09SDavid van Moolenbroek // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17*00b67f09SDavid van Moolenbroek // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18*00b67f09SDavid van Moolenbroek // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*00b67f09SDavid van Moolenbroek // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*00b67f09SDavid van Moolenbroek // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21*00b67f09SDavid van Moolenbroek // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*00b67f09SDavid van Moolenbroek // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*00b67f09SDavid van Moolenbroek // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*00b67f09SDavid van Moolenbroek // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25*00b67f09SDavid van Moolenbroek // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26*00b67f09SDavid van Moolenbroek // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*00b67f09SDavid van Moolenbroek // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*00b67f09SDavid van Moolenbroek //
29*00b67f09SDavid van Moolenbroek 
30*00b67f09SDavid van Moolenbroek extern "C" {
31*00b67f09SDavid van Moolenbroek #include <sys/types.h>
32*00b67f09SDavid van Moolenbroek #include <sys/stat.h>
33*00b67f09SDavid van Moolenbroek }
34*00b67f09SDavid van Moolenbroek 
35*00b67f09SDavid van Moolenbroek #include <algorithm>
36*00b67f09SDavid van Moolenbroek #include <fstream>
37*00b67f09SDavid van Moolenbroek #include <memory>
38*00b67f09SDavid van Moolenbroek 
39*00b67f09SDavid van Moolenbroek #include "atf-c++/macros.hpp"
40*00b67f09SDavid van Moolenbroek 
41*00b67f09SDavid van Moolenbroek #include "atf-c++/detail/exceptions.hpp"
42*00b67f09SDavid van Moolenbroek #include "atf-c++/detail/test_helpers.hpp"
43*00b67f09SDavid van Moolenbroek 
44*00b67f09SDavid van Moolenbroek #include "atffile.hpp"
45*00b67f09SDavid van Moolenbroek 
46*00b67f09SDavid van Moolenbroek namespace detail = atf::atf_run::detail;
47*00b67f09SDavid van Moolenbroek 
48*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
49*00b67f09SDavid van Moolenbroek // Auxiliary functions.
50*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
51*00b67f09SDavid van Moolenbroek 
52*00b67f09SDavid van Moolenbroek namespace {
53*00b67f09SDavid van Moolenbroek 
54*00b67f09SDavid van Moolenbroek static
55*00b67f09SDavid van Moolenbroek std::auto_ptr< std::ofstream >
new_atffile(void)56*00b67f09SDavid van Moolenbroek new_atffile(void)
57*00b67f09SDavid van Moolenbroek {
58*00b67f09SDavid van Moolenbroek     std::auto_ptr< std::ofstream > os(new std::ofstream("Atffile"));
59*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(*os);
60*00b67f09SDavid van Moolenbroek 
61*00b67f09SDavid van Moolenbroek     (*os) << "Content-Type: application/X-atf-atffile; version=\"1\"\n\n";
62*00b67f09SDavid van Moolenbroek     return os;
63*00b67f09SDavid van Moolenbroek }
64*00b67f09SDavid van Moolenbroek 
65*00b67f09SDavid van Moolenbroek static
66*00b67f09SDavid van Moolenbroek void
touch_exec(const char * name)67*00b67f09SDavid van Moolenbroek touch_exec(const char* name)
68*00b67f09SDavid van Moolenbroek {
69*00b67f09SDavid van Moolenbroek     std::ofstream os(name);
70*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(os);
71*00b67f09SDavid van Moolenbroek     os.close();
72*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(::chmod(name, S_IRWXU) != -1);
73*00b67f09SDavid van Moolenbroek }
74*00b67f09SDavid van Moolenbroek 
75*00b67f09SDavid van Moolenbroek static inline
76*00b67f09SDavid van Moolenbroek bool
is_in(const std::string & value,const std::vector<std::string> & v)77*00b67f09SDavid van Moolenbroek is_in(const std::string& value, const std::vector< std::string >& v)
78*00b67f09SDavid van Moolenbroek {
79*00b67f09SDavid van Moolenbroek     return std::find(v.begin(), v.end(), value) != v.end();
80*00b67f09SDavid van Moolenbroek }
81*00b67f09SDavid van Moolenbroek 
82*00b67f09SDavid van Moolenbroek } // anonymous namespace
83*00b67f09SDavid van Moolenbroek 
84*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
85*00b67f09SDavid van Moolenbroek // Tests cases for the "atffile" parser.
86*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
87*00b67f09SDavid van Moolenbroek 
88*00b67f09SDavid van Moolenbroek class atffile_reader : protected detail::atf_atffile_reader {
89*00b67f09SDavid van Moolenbroek     void
got_conf(const std::string & name,const std::string & val)90*00b67f09SDavid van Moolenbroek     got_conf(const std::string& name, const std::string& val)
91*00b67f09SDavid van Moolenbroek     {
92*00b67f09SDavid van Moolenbroek         m_calls.push_back("got_conf(" + name + ", " + val + ")");
93*00b67f09SDavid van Moolenbroek     }
94*00b67f09SDavid van Moolenbroek 
95*00b67f09SDavid van Moolenbroek     void
got_prop(const std::string & name,const std::string & val)96*00b67f09SDavid van Moolenbroek     got_prop(const std::string& name, const std::string& val)
97*00b67f09SDavid van Moolenbroek     {
98*00b67f09SDavid van Moolenbroek         m_calls.push_back("got_prop(" + name + ", " + val + ")");
99*00b67f09SDavid van Moolenbroek     }
100*00b67f09SDavid van Moolenbroek 
101*00b67f09SDavid van Moolenbroek     void
got_tp(const std::string & name,bool isglob)102*00b67f09SDavid van Moolenbroek     got_tp(const std::string& name, bool isglob)
103*00b67f09SDavid van Moolenbroek     {
104*00b67f09SDavid van Moolenbroek         m_calls.push_back("got_tp(" + name + ", " + (isglob ? "true" : "false")
105*00b67f09SDavid van Moolenbroek                   + ")");
106*00b67f09SDavid van Moolenbroek     }
107*00b67f09SDavid van Moolenbroek 
108*00b67f09SDavid van Moolenbroek     void
got_eof(void)109*00b67f09SDavid van Moolenbroek     got_eof(void)
110*00b67f09SDavid van Moolenbroek     {
111*00b67f09SDavid van Moolenbroek         m_calls.push_back("got_eof()");
112*00b67f09SDavid van Moolenbroek     }
113*00b67f09SDavid van Moolenbroek 
114*00b67f09SDavid van Moolenbroek public:
atffile_reader(std::istream & is)115*00b67f09SDavid van Moolenbroek     atffile_reader(std::istream& is) :
116*00b67f09SDavid van Moolenbroek         detail::atf_atffile_reader(is)
117*00b67f09SDavid van Moolenbroek     {
118*00b67f09SDavid van Moolenbroek     }
119*00b67f09SDavid van Moolenbroek 
120*00b67f09SDavid van Moolenbroek     void
read(void)121*00b67f09SDavid van Moolenbroek     read(void)
122*00b67f09SDavid van Moolenbroek     {
123*00b67f09SDavid van Moolenbroek         atf_atffile_reader::read();
124*00b67f09SDavid van Moolenbroek     }
125*00b67f09SDavid van Moolenbroek 
126*00b67f09SDavid van Moolenbroek     std::vector< std::string > m_calls;
127*00b67f09SDavid van Moolenbroek };
128*00b67f09SDavid van Moolenbroek 
129*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_1);
ATF_TEST_CASE_BODY(atffile_1)130*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_1)
131*00b67f09SDavid van Moolenbroek {
132*00b67f09SDavid van Moolenbroek     const char* input =
133*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
134*00b67f09SDavid van Moolenbroek         "\n"
135*00b67f09SDavid van Moolenbroek     ;
136*00b67f09SDavid van Moolenbroek 
137*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
138*00b67f09SDavid van Moolenbroek         "got_eof()",
139*00b67f09SDavid van Moolenbroek         NULL
140*00b67f09SDavid van Moolenbroek     };
141*00b67f09SDavid van Moolenbroek 
142*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
143*00b67f09SDavid van Moolenbroek         NULL
144*00b67f09SDavid van Moolenbroek     };
145*00b67f09SDavid van Moolenbroek 
146*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
147*00b67f09SDavid van Moolenbroek }
148*00b67f09SDavid van Moolenbroek 
149*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_2);
ATF_TEST_CASE_BODY(atffile_2)150*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_2)
151*00b67f09SDavid van Moolenbroek {
152*00b67f09SDavid van Moolenbroek     const char* input =
153*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
154*00b67f09SDavid van Moolenbroek         "\n"
155*00b67f09SDavid van Moolenbroek         "# This is a comment on a line of its own.\n"
156*00b67f09SDavid van Moolenbroek         "# And this is another one.\n"
157*00b67f09SDavid van Moolenbroek         "\n"
158*00b67f09SDavid van Moolenbroek         "	    # Another after some whitespace.\n"
159*00b67f09SDavid van Moolenbroek         "\n"
160*00b67f09SDavid van Moolenbroek         "# The last one after an empty line.\n"
161*00b67f09SDavid van Moolenbroek     ;
162*00b67f09SDavid van Moolenbroek 
163*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
164*00b67f09SDavid van Moolenbroek         "got_eof()",
165*00b67f09SDavid van Moolenbroek         NULL
166*00b67f09SDavid van Moolenbroek     };
167*00b67f09SDavid van Moolenbroek 
168*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
169*00b67f09SDavid van Moolenbroek         NULL
170*00b67f09SDavid van Moolenbroek     };
171*00b67f09SDavid van Moolenbroek 
172*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
173*00b67f09SDavid van Moolenbroek }
174*00b67f09SDavid van Moolenbroek 
175*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_3);
ATF_TEST_CASE_BODY(atffile_3)176*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_3)
177*00b67f09SDavid van Moolenbroek {
178*00b67f09SDavid van Moolenbroek     const char* input =
179*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
180*00b67f09SDavid van Moolenbroek         "\n"
181*00b67f09SDavid van Moolenbroek         "conf: var1=value1\n"
182*00b67f09SDavid van Moolenbroek         "conf: var2 = value2\n"
183*00b67f09SDavid van Moolenbroek         "conf: var3	=	value3\n"
184*00b67f09SDavid van Moolenbroek         "conf: var4	    =	    value4\n"
185*00b67f09SDavid van Moolenbroek         "\n"
186*00b67f09SDavid van Moolenbroek         "conf:var5=value5\n"
187*00b67f09SDavid van Moolenbroek         "    conf:var6=value6\n"
188*00b67f09SDavid van Moolenbroek         "\n"
189*00b67f09SDavid van Moolenbroek         "conf: var7 = \"This is a long value.\"\n"
190*00b67f09SDavid van Moolenbroek         "conf: var8 = \"Single-word\"\n"
191*00b67f09SDavid van Moolenbroek         "conf: var9 = \"    Single-word	\"\n"
192*00b67f09SDavid van Moolenbroek         "conf: var10 = Single-word\n"
193*00b67f09SDavid van Moolenbroek     ;
194*00b67f09SDavid van Moolenbroek 
195*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
196*00b67f09SDavid van Moolenbroek         "got_conf(var1, value1)",
197*00b67f09SDavid van Moolenbroek         "got_conf(var2, value2)",
198*00b67f09SDavid van Moolenbroek         "got_conf(var3, value3)",
199*00b67f09SDavid van Moolenbroek         "got_conf(var4, value4)",
200*00b67f09SDavid van Moolenbroek         "got_conf(var5, value5)",
201*00b67f09SDavid van Moolenbroek         "got_conf(var6, value6)",
202*00b67f09SDavid van Moolenbroek         "got_conf(var7, This is a long value.)",
203*00b67f09SDavid van Moolenbroek         "got_conf(var8, Single-word)",
204*00b67f09SDavid van Moolenbroek         "got_conf(var9,     Single-word	)",
205*00b67f09SDavid van Moolenbroek         "got_conf(var10, Single-word)",
206*00b67f09SDavid van Moolenbroek         "got_eof()",
207*00b67f09SDavid van Moolenbroek         NULL
208*00b67f09SDavid van Moolenbroek     };
209*00b67f09SDavid van Moolenbroek 
210*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
211*00b67f09SDavid van Moolenbroek         NULL
212*00b67f09SDavid van Moolenbroek     };
213*00b67f09SDavid van Moolenbroek 
214*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
215*00b67f09SDavid van Moolenbroek }
216*00b67f09SDavid van Moolenbroek 
217*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_4);
ATF_TEST_CASE_BODY(atffile_4)218*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_4)
219*00b67f09SDavid van Moolenbroek {
220*00b67f09SDavid van Moolenbroek     const char* input =
221*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
222*00b67f09SDavid van Moolenbroek         "\n"
223*00b67f09SDavid van Moolenbroek         "prop: var1=value1\n"
224*00b67f09SDavid van Moolenbroek         "prop: var2 = value2\n"
225*00b67f09SDavid van Moolenbroek         "prop: var3	=	value3\n"
226*00b67f09SDavid van Moolenbroek         "prop: var4	    =	    value4\n"
227*00b67f09SDavid van Moolenbroek         "\n"
228*00b67f09SDavid van Moolenbroek         "prop:var5=value5\n"
229*00b67f09SDavid van Moolenbroek         "    prop:var6=value6\n"
230*00b67f09SDavid van Moolenbroek         "\n"
231*00b67f09SDavid van Moolenbroek         "prop: var7 = \"This is a long value.\"\n"
232*00b67f09SDavid van Moolenbroek         "prop: var8 = \"Single-word\"\n"
233*00b67f09SDavid van Moolenbroek         "prop: var9 = \"    Single-word	\"\n"
234*00b67f09SDavid van Moolenbroek         "prop: var10 = Single-word\n"
235*00b67f09SDavid van Moolenbroek     ;
236*00b67f09SDavid van Moolenbroek 
237*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
238*00b67f09SDavid van Moolenbroek         "got_prop(var1, value1)",
239*00b67f09SDavid van Moolenbroek         "got_prop(var2, value2)",
240*00b67f09SDavid van Moolenbroek         "got_prop(var3, value3)",
241*00b67f09SDavid van Moolenbroek         "got_prop(var4, value4)",
242*00b67f09SDavid van Moolenbroek         "got_prop(var5, value5)",
243*00b67f09SDavid van Moolenbroek         "got_prop(var6, value6)",
244*00b67f09SDavid van Moolenbroek         "got_prop(var7, This is a long value.)",
245*00b67f09SDavid van Moolenbroek         "got_prop(var8, Single-word)",
246*00b67f09SDavid van Moolenbroek         "got_prop(var9,     Single-word	)",
247*00b67f09SDavid van Moolenbroek         "got_prop(var10, Single-word)",
248*00b67f09SDavid van Moolenbroek         "got_eof()",
249*00b67f09SDavid van Moolenbroek         NULL
250*00b67f09SDavid van Moolenbroek     };
251*00b67f09SDavid van Moolenbroek 
252*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
253*00b67f09SDavid van Moolenbroek         NULL
254*00b67f09SDavid van Moolenbroek     };
255*00b67f09SDavid van Moolenbroek 
256*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
257*00b67f09SDavid van Moolenbroek }
258*00b67f09SDavid van Moolenbroek 
259*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_5);
ATF_TEST_CASE_BODY(atffile_5)260*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_5)
261*00b67f09SDavid van Moolenbroek {
262*00b67f09SDavid van Moolenbroek     const char* input =
263*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
264*00b67f09SDavid van Moolenbroek         "\n"
265*00b67f09SDavid van Moolenbroek         "tp:foo\n"
266*00b67f09SDavid van Moolenbroek         "tp: foo\n"
267*00b67f09SDavid van Moolenbroek         "tp:  foo\n"
268*00b67f09SDavid van Moolenbroek         "tp:	foo\n"
269*00b67f09SDavid van Moolenbroek         "tp:	    foo\n"
270*00b67f09SDavid van Moolenbroek         "tp: \"name with spaces\"\n"
271*00b67f09SDavid van Moolenbroek         "tp: \"single-word\"\n"
272*00b67f09SDavid van Moolenbroek         "tp: single-word\n"
273*00b67f09SDavid van Moolenbroek         "\n"
274*00b67f09SDavid van Moolenbroek         "tp-glob:foo*?bar\n"
275*00b67f09SDavid van Moolenbroek         "tp-glob: foo*?bar\n"
276*00b67f09SDavid van Moolenbroek         "tp-glob:  foo*?bar\n"
277*00b67f09SDavid van Moolenbroek         "tp-glob:	foo*?bar\n"
278*00b67f09SDavid van Moolenbroek         "tp-glob:	    foo*?bar\n"
279*00b67f09SDavid van Moolenbroek         "tp-glob: \"glob * with ? spaces\"\n"
280*00b67f09SDavid van Moolenbroek         "tp-glob: \"single-*-word\"\n"
281*00b67f09SDavid van Moolenbroek         "tp-glob: single-*-word\n"
282*00b67f09SDavid van Moolenbroek     ;
283*00b67f09SDavid van Moolenbroek 
284*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
285*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
286*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
287*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
288*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
289*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
290*00b67f09SDavid van Moolenbroek         "got_tp(name with spaces, false)",
291*00b67f09SDavid van Moolenbroek         "got_tp(single-word, false)",
292*00b67f09SDavid van Moolenbroek         "got_tp(single-word, false)",
293*00b67f09SDavid van Moolenbroek         "got_tp(foo*?bar, true)",
294*00b67f09SDavid van Moolenbroek         "got_tp(foo*?bar, true)",
295*00b67f09SDavid van Moolenbroek         "got_tp(foo*?bar, true)",
296*00b67f09SDavid van Moolenbroek         "got_tp(foo*?bar, true)",
297*00b67f09SDavid van Moolenbroek         "got_tp(foo*?bar, true)",
298*00b67f09SDavid van Moolenbroek         "got_tp(glob * with ? spaces, true)",
299*00b67f09SDavid van Moolenbroek         "got_tp(single-*-word, true)",
300*00b67f09SDavid van Moolenbroek         "got_tp(single-*-word, true)",
301*00b67f09SDavid van Moolenbroek         "got_eof()",
302*00b67f09SDavid van Moolenbroek         NULL
303*00b67f09SDavid van Moolenbroek     };
304*00b67f09SDavid van Moolenbroek 
305*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
306*00b67f09SDavid van Moolenbroek         NULL
307*00b67f09SDavid van Moolenbroek     };
308*00b67f09SDavid van Moolenbroek 
309*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
310*00b67f09SDavid van Moolenbroek }
311*00b67f09SDavid van Moolenbroek 
312*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_6);
ATF_TEST_CASE_BODY(atffile_6)313*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_6)
314*00b67f09SDavid van Moolenbroek {
315*00b67f09SDavid van Moolenbroek     const char* input =
316*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
317*00b67f09SDavid van Moolenbroek         "\n"
318*00b67f09SDavid van Moolenbroek         "prop: foo = bar # A comment.\n"
319*00b67f09SDavid van Moolenbroek         "conf: foo = bar # A comment.\n"
320*00b67f09SDavid van Moolenbroek         "tp: foo # A comment.\n"
321*00b67f09SDavid van Moolenbroek         "tp-glob: foo # A comment.\n"
322*00b67f09SDavid van Moolenbroek     ;
323*00b67f09SDavid van Moolenbroek 
324*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
325*00b67f09SDavid van Moolenbroek         "got_prop(foo, bar)",
326*00b67f09SDavid van Moolenbroek         "got_conf(foo, bar)",
327*00b67f09SDavid van Moolenbroek         "got_tp(foo, false)",
328*00b67f09SDavid van Moolenbroek         "got_tp(foo, true)",
329*00b67f09SDavid van Moolenbroek         "got_eof()",
330*00b67f09SDavid van Moolenbroek         NULL
331*00b67f09SDavid van Moolenbroek     };
332*00b67f09SDavid van Moolenbroek 
333*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
334*00b67f09SDavid van Moolenbroek         NULL
335*00b67f09SDavid van Moolenbroek     };
336*00b67f09SDavid van Moolenbroek 
337*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
338*00b67f09SDavid van Moolenbroek }
339*00b67f09SDavid van Moolenbroek 
340*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_50);
ATF_TEST_CASE_BODY(atffile_50)341*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_50)
342*00b67f09SDavid van Moolenbroek {
343*00b67f09SDavid van Moolenbroek     const char* input =
344*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
345*00b67f09SDavid van Moolenbroek         "\n"
346*00b67f09SDavid van Moolenbroek         "foo\n"
347*00b67f09SDavid van Moolenbroek     ;
348*00b67f09SDavid van Moolenbroek 
349*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
350*00b67f09SDavid van Moolenbroek         NULL
351*00b67f09SDavid van Moolenbroek     };
352*00b67f09SDavid van Moolenbroek 
353*00b67f09SDavid van Moolenbroek     // NO_CHECK_STYLE_BEGIN
354*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
355*00b67f09SDavid van Moolenbroek         "3: Unexpected token `foo'; expected conf, #, prop, tp, tp-glob, a new line or eof",
356*00b67f09SDavid van Moolenbroek         NULL
357*00b67f09SDavid van Moolenbroek     };
358*00b67f09SDavid van Moolenbroek     // NO_CHECK_STYLE_END
359*00b67f09SDavid van Moolenbroek 
360*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
361*00b67f09SDavid van Moolenbroek }
362*00b67f09SDavid van Moolenbroek 
363*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_51);
ATF_TEST_CASE_BODY(atffile_51)364*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_51)
365*00b67f09SDavid van Moolenbroek {
366*00b67f09SDavid van Moolenbroek     const char* input =
367*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
368*00b67f09SDavid van Moolenbroek         "\n"
369*00b67f09SDavid van Moolenbroek         "foo bar\n"
370*00b67f09SDavid van Moolenbroek         "baz\n"
371*00b67f09SDavid van Moolenbroek     ;
372*00b67f09SDavid van Moolenbroek 
373*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
374*00b67f09SDavid van Moolenbroek         NULL
375*00b67f09SDavid van Moolenbroek     };
376*00b67f09SDavid van Moolenbroek 
377*00b67f09SDavid van Moolenbroek     // NO_CHECK_STYLE_BEGIN
378*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
379*00b67f09SDavid van Moolenbroek         "3: Unexpected token `foo'; expected conf, #, prop, tp, tp-glob, a new line or eof",
380*00b67f09SDavid van Moolenbroek         "4: Unexpected token `baz'; expected conf, #, prop, tp, tp-glob, a new line or eof",
381*00b67f09SDavid van Moolenbroek         NULL
382*00b67f09SDavid van Moolenbroek     };
383*00b67f09SDavid van Moolenbroek     // NO_CHECK_STYLE_END
384*00b67f09SDavid van Moolenbroek 
385*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
386*00b67f09SDavid van Moolenbroek }
387*00b67f09SDavid van Moolenbroek 
388*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_52);
ATF_TEST_CASE_BODY(atffile_52)389*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_52)
390*00b67f09SDavid van Moolenbroek {
391*00b67f09SDavid van Moolenbroek     const char* input =
392*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
393*00b67f09SDavid van Moolenbroek         "\n"
394*00b67f09SDavid van Moolenbroek         "conf\n"
395*00b67f09SDavid van Moolenbroek         "conf:\n"
396*00b67f09SDavid van Moolenbroek         "conf: foo =\n"
397*00b67f09SDavid van Moolenbroek         "conf: bar = # A comment.\n"
398*00b67f09SDavid van Moolenbroek         "\n"
399*00b67f09SDavid van Moolenbroek         "prop\n"
400*00b67f09SDavid van Moolenbroek         "prop:\n"
401*00b67f09SDavid van Moolenbroek         "prop: foo =\n"
402*00b67f09SDavid van Moolenbroek         "prop: bar = # A comment.\n"
403*00b67f09SDavid van Moolenbroek         "\n"
404*00b67f09SDavid van Moolenbroek         "tp\n"
405*00b67f09SDavid van Moolenbroek         "tp:\n"
406*00b67f09SDavid van Moolenbroek         "tp: # A comment.\n"
407*00b67f09SDavid van Moolenbroek         "\n"
408*00b67f09SDavid van Moolenbroek         "tp-glob\n"
409*00b67f09SDavid van Moolenbroek         "tp-glob:\n"
410*00b67f09SDavid van Moolenbroek         "tp-glob: # A comment.\n"
411*00b67f09SDavid van Moolenbroek     ;
412*00b67f09SDavid van Moolenbroek 
413*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
414*00b67f09SDavid van Moolenbroek         NULL
415*00b67f09SDavid van Moolenbroek     };
416*00b67f09SDavid van Moolenbroek 
417*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
418*00b67f09SDavid van Moolenbroek         "3: Unexpected token `<<NEWLINE>>'; expected `:'",
419*00b67f09SDavid van Moolenbroek         "4: Unexpected token `<<NEWLINE>>'; expected variable name",
420*00b67f09SDavid van Moolenbroek         "5: Unexpected token `<<NEWLINE>>'; expected word or quoted string",
421*00b67f09SDavid van Moolenbroek         "6: Unexpected token `#'; expected word or quoted string",
422*00b67f09SDavid van Moolenbroek         "8: Unexpected token `<<NEWLINE>>'; expected `:'",
423*00b67f09SDavid van Moolenbroek         "9: Unexpected token `<<NEWLINE>>'; expected property name",
424*00b67f09SDavid van Moolenbroek         "10: Unexpected token `<<NEWLINE>>'; expected word or quoted string",
425*00b67f09SDavid van Moolenbroek         "11: Unexpected token `#'; expected word or quoted string",
426*00b67f09SDavid van Moolenbroek         "13: Unexpected token `<<NEWLINE>>'; expected `:'",
427*00b67f09SDavid van Moolenbroek         "14: Unexpected token `<<NEWLINE>>'; expected word or quoted string",
428*00b67f09SDavid van Moolenbroek         "15: Unexpected token `#'; expected word or quoted string",
429*00b67f09SDavid van Moolenbroek         "17: Unexpected token `<<NEWLINE>>'; expected `:'",
430*00b67f09SDavid van Moolenbroek         "18: Unexpected token `<<NEWLINE>>'; expected word or quoted string",
431*00b67f09SDavid van Moolenbroek         "19: Unexpected token `#'; expected word or quoted string",
432*00b67f09SDavid van Moolenbroek         NULL
433*00b67f09SDavid van Moolenbroek     };
434*00b67f09SDavid van Moolenbroek 
435*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
436*00b67f09SDavid van Moolenbroek }
437*00b67f09SDavid van Moolenbroek 
438*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_53);
ATF_TEST_CASE_BODY(atffile_53)439*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_53)
440*00b67f09SDavid van Moolenbroek {
441*00b67f09SDavid van Moolenbroek     const char* input =
442*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
443*00b67f09SDavid van Moolenbroek         "\n"
444*00b67f09SDavid van Moolenbroek         "prop: foo = \"Correct value\" # With comment.\n"
445*00b67f09SDavid van Moolenbroek         "\n"
446*00b67f09SDavid van Moolenbroek         "prop: bar = # A comment.\n"
447*00b67f09SDavid van Moolenbroek         "\n"
448*00b67f09SDavid van Moolenbroek         "prop: baz = \"Last variable\"\n"
449*00b67f09SDavid van Moolenbroek         "\n"
450*00b67f09SDavid van Moolenbroek         "# End of file.\n"
451*00b67f09SDavid van Moolenbroek     ;
452*00b67f09SDavid van Moolenbroek 
453*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
454*00b67f09SDavid van Moolenbroek         "got_prop(foo, Correct value)",
455*00b67f09SDavid van Moolenbroek         NULL
456*00b67f09SDavid van Moolenbroek     };
457*00b67f09SDavid van Moolenbroek 
458*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
459*00b67f09SDavid van Moolenbroek         "5: Unexpected token `#'; expected word or quoted string",
460*00b67f09SDavid van Moolenbroek         NULL
461*00b67f09SDavid van Moolenbroek     };
462*00b67f09SDavid van Moolenbroek 
463*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
464*00b67f09SDavid van Moolenbroek }
465*00b67f09SDavid van Moolenbroek 
466*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(atffile_54);
ATF_TEST_CASE_BODY(atffile_54)467*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_54)
468*00b67f09SDavid van Moolenbroek {
469*00b67f09SDavid van Moolenbroek     const char* input =
470*00b67f09SDavid van Moolenbroek         "Content-Type: application/X-atf-atffile; version=\"1\"\n"
471*00b67f09SDavid van Moolenbroek         "\n"
472*00b67f09SDavid van Moolenbroek         "prop: foo = \"\n"
473*00b67f09SDavid van Moolenbroek         "prop: bar = \"text\n"
474*00b67f09SDavid van Moolenbroek         "prop: baz = \"te\\\"xt\n"
475*00b67f09SDavid van Moolenbroek         "prop: last = \"\\\"\n"
476*00b67f09SDavid van Moolenbroek     ;
477*00b67f09SDavid van Moolenbroek 
478*00b67f09SDavid van Moolenbroek     const char* exp_calls[] = {
479*00b67f09SDavid van Moolenbroek         NULL
480*00b67f09SDavid van Moolenbroek     };
481*00b67f09SDavid van Moolenbroek 
482*00b67f09SDavid van Moolenbroek     const char* exp_errors[] = {
483*00b67f09SDavid van Moolenbroek         "3: Missing double quotes before end of line",
484*00b67f09SDavid van Moolenbroek         "4: Missing double quotes before end of line",
485*00b67f09SDavid van Moolenbroek         "5: Missing double quotes before end of line",
486*00b67f09SDavid van Moolenbroek         "6: Missing double quotes before end of line",
487*00b67f09SDavid van Moolenbroek         NULL
488*00b67f09SDavid van Moolenbroek     };
489*00b67f09SDavid van Moolenbroek 
490*00b67f09SDavid van Moolenbroek     do_parser_test< atffile_reader >(input, exp_calls, exp_errors);
491*00b67f09SDavid van Moolenbroek }
492*00b67f09SDavid van Moolenbroek 
493*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
494*00b67f09SDavid van Moolenbroek // Tests cases for the "atffile" class.
495*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
496*00b67f09SDavid van Moolenbroek 
497*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(atffile_getters);
ATF_TEST_CASE_HEAD(atffile_getters)498*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(atffile_getters) {}
ATF_TEST_CASE_BODY(atffile_getters)499*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(atffile_getters) {
500*00b67f09SDavid van Moolenbroek     atf::tests::vars_map config_vars;
501*00b67f09SDavid van Moolenbroek     config_vars["config-var-1"] = "value 1";
502*00b67f09SDavid van Moolenbroek 
503*00b67f09SDavid van Moolenbroek     std::vector< std::string > test_program_names;
504*00b67f09SDavid van Moolenbroek     test_program_names.push_back("test-program-1");
505*00b67f09SDavid van Moolenbroek 
506*00b67f09SDavid van Moolenbroek     atf::tests::vars_map properties;
507*00b67f09SDavid van Moolenbroek     properties["test-suite"] = "a test name";
508*00b67f09SDavid van Moolenbroek 
509*00b67f09SDavid van Moolenbroek     const atf::atf_run::atffile atffile(config_vars, test_program_names,
510*00b67f09SDavid van Moolenbroek                                         properties);
511*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(config_vars == atffile.conf());
512*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(test_program_names == atffile.tps());
513*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(properties == atffile.props());
514*00b67f09SDavid van Moolenbroek }
515*00b67f09SDavid van Moolenbroek 
516*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
517*00b67f09SDavid van Moolenbroek // Tests cases for the free functions.
518*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
519*00b67f09SDavid van Moolenbroek 
520*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(read_ok_simple);
ATF_TEST_CASE_BODY(read_ok_simple)521*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(read_ok_simple) {
522*00b67f09SDavid van Moolenbroek     std::auto_ptr< std::ofstream > os = new_atffile();
523*00b67f09SDavid van Moolenbroek     (*os) << "prop: test-suite = foo\n";
524*00b67f09SDavid van Moolenbroek     (*os) << "tp: tp-1\n";
525*00b67f09SDavid van Moolenbroek     (*os) << "conf: var1 = value1\n";
526*00b67f09SDavid van Moolenbroek     (*os) << "tp: tp-2\n";
527*00b67f09SDavid van Moolenbroek     (*os) << "tp: tp-3\n";
528*00b67f09SDavid van Moolenbroek     (*os) << "prop: prop1 = propvalue1\n";
529*00b67f09SDavid van Moolenbroek     (*os) << "conf: var2 = value2\n";
530*00b67f09SDavid van Moolenbroek     (*os).close();
531*00b67f09SDavid van Moolenbroek 
532*00b67f09SDavid van Moolenbroek     touch_exec("tp-1");
533*00b67f09SDavid van Moolenbroek     touch_exec("tp-2");
534*00b67f09SDavid van Moolenbroek     touch_exec("tp-3");
535*00b67f09SDavid van Moolenbroek 
536*00b67f09SDavid van Moolenbroek     const atf::atf_run::atffile atffile = atf::atf_run::read_atffile(
537*00b67f09SDavid van Moolenbroek         atf::fs::path("Atffile"));
538*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(2, atffile.conf().size());
539*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ("value1", atffile.conf().find("var1")->second);
540*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ("value2", atffile.conf().find("var2")->second);
541*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(3, atffile.tps().size());
542*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("tp-1", atffile.tps()));
543*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("tp-2", atffile.tps()));
544*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("tp-3", atffile.tps()));
545*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(2, atffile.props().size());
546*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ("foo", atffile.props().find("test-suite")->second);
547*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ("propvalue1", atffile.props().find("prop1")->second);
548*00b67f09SDavid van Moolenbroek }
549*00b67f09SDavid van Moolenbroek 
550*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(read_ok_some_globs);
ATF_TEST_CASE_BODY(read_ok_some_globs)551*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(read_ok_some_globs) {
552*00b67f09SDavid van Moolenbroek     std::auto_ptr< std::ofstream > os = new_atffile();
553*00b67f09SDavid van Moolenbroek     (*os) << "prop: test-suite = foo\n";
554*00b67f09SDavid van Moolenbroek     (*os) << "tp: foo\n";
555*00b67f09SDavid van Moolenbroek     (*os) << "tp-glob: *K*\n";
556*00b67f09SDavid van Moolenbroek     (*os) << "tp: bar\n";
557*00b67f09SDavid van Moolenbroek     (*os) << "tp-glob: t_*\n";
558*00b67f09SDavid van Moolenbroek     (*os).close();
559*00b67f09SDavid van Moolenbroek 
560*00b67f09SDavid van Moolenbroek     touch_exec("foo");
561*00b67f09SDavid van Moolenbroek     touch_exec("bar");
562*00b67f09SDavid van Moolenbroek     touch_exec("aK");
563*00b67f09SDavid van Moolenbroek     touch_exec("KKKKK");
564*00b67f09SDavid van Moolenbroek     touch_exec("t_hello");
565*00b67f09SDavid van Moolenbroek     touch_exec("zzzt_hello");
566*00b67f09SDavid van Moolenbroek 
567*00b67f09SDavid van Moolenbroek     const atf::atf_run::atffile atffile = atf::atf_run::read_atffile(
568*00b67f09SDavid van Moolenbroek         atf::fs::path("Atffile"));
569*00b67f09SDavid van Moolenbroek     ATF_REQUIRE_EQ(5, atffile.tps().size());
570*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("foo", atffile.tps()));
571*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("bar", atffile.tps()));
572*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("aK", atffile.tps()));
573*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("KKKKK", atffile.tps()));
574*00b67f09SDavid van Moolenbroek     ATF_REQUIRE(is_in("t_hello", atffile.tps()));
575*00b67f09SDavid van Moolenbroek }
576*00b67f09SDavid van Moolenbroek 
577*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(read_missing_test_suite);
ATF_TEST_CASE_BODY(read_missing_test_suite)578*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(read_missing_test_suite) {
579*00b67f09SDavid van Moolenbroek     std::auto_ptr< std::ofstream > os = new_atffile();
580*00b67f09SDavid van Moolenbroek     (*os).close();
581*00b67f09SDavid van Moolenbroek 
582*00b67f09SDavid van Moolenbroek     try {
583*00b67f09SDavid van Moolenbroek         (void)atf::atf_run::read_atffile(atf::fs::path("Atffile"));
584*00b67f09SDavid van Moolenbroek         ATF_FAIL("Missing property 'test-suite' did not raise an error");
585*00b67f09SDavid van Moolenbroek     } catch (const atf::not_found_error< std::string >& e) {
586*00b67f09SDavid van Moolenbroek         ATF_REQUIRE_EQ("test-suite", e.get_value());
587*00b67f09SDavid van Moolenbroek     }
588*00b67f09SDavid van Moolenbroek }
589*00b67f09SDavid van Moolenbroek 
590*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(read_missing_test_program);
ATF_TEST_CASE_BODY(read_missing_test_program)591*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(read_missing_test_program) {
592*00b67f09SDavid van Moolenbroek     std::auto_ptr< std::ofstream > os = new_atffile();
593*00b67f09SDavid van Moolenbroek     (*os) << "tp: foo\n";
594*00b67f09SDavid van Moolenbroek     (*os) << "tp: bar\n";
595*00b67f09SDavid van Moolenbroek     (*os) << "tp: baz\n";
596*00b67f09SDavid van Moolenbroek     (*os).close();
597*00b67f09SDavid van Moolenbroek 
598*00b67f09SDavid van Moolenbroek     touch_exec("foo");
599*00b67f09SDavid van Moolenbroek     touch_exec("baz");
600*00b67f09SDavid van Moolenbroek 
601*00b67f09SDavid van Moolenbroek     try {
602*00b67f09SDavid van Moolenbroek         (void)atf::atf_run::read_atffile(atf::fs::path("Atffile"));
603*00b67f09SDavid van Moolenbroek         ATF_FAIL("Missing file 'bar' did not raise an error");
604*00b67f09SDavid van Moolenbroek     } catch (const atf::not_found_error< atf::fs::path >& e) {
605*00b67f09SDavid van Moolenbroek         ATF_REQUIRE_EQ("bar", e.get_value().str());
606*00b67f09SDavid van Moolenbroek     }
607*00b67f09SDavid van Moolenbroek }
608*00b67f09SDavid van Moolenbroek 
609*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
610*00b67f09SDavid van Moolenbroek // Main.
611*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
612*00b67f09SDavid van Moolenbroek 
ATF_INIT_TEST_CASES(tcs)613*00b67f09SDavid van Moolenbroek ATF_INIT_TEST_CASES(tcs)
614*00b67f09SDavid van Moolenbroek {
615*00b67f09SDavid van Moolenbroek     // Add the test cases for the parser class.
616*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_1);
617*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_2);
618*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_3);
619*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_4);
620*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_5);
621*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_6);
622*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_50);
623*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_51);
624*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_52);
625*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_53);
626*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_54);
627*00b67f09SDavid van Moolenbroek 
628*00b67f09SDavid van Moolenbroek     // Add the test cases for the atffile class.
629*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, atffile_getters);
630*00b67f09SDavid van Moolenbroek 
631*00b67f09SDavid van Moolenbroek     // Add the test cases for the free functions.
632*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, read_ok_simple);
633*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, read_ok_some_globs);
634*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, read_missing_test_suite);
635*00b67f09SDavid van Moolenbroek     ATF_ADD_TEST_CASE(tcs, read_missing_test_program);
636*00b67f09SDavid van Moolenbroek }
637