1*00b67f09SDavid van Moolenbroek //
2*00b67f09SDavid van Moolenbroek // Automated Testing Framework (atf)
3*00b67f09SDavid van Moolenbroek //
4*00b67f09SDavid van Moolenbroek // Copyright (c) 2010 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 #include "atf-c++/detail/env.hpp"
31*00b67f09SDavid van Moolenbroek #include "atf-c++/detail/test_helpers.hpp"
32*00b67f09SDavid van Moolenbroek #include "atf-c++/config.hpp"
33*00b67f09SDavid van Moolenbroek #include "atf-c++/macros.hpp"
34*00b67f09SDavid van Moolenbroek
35*00b67f09SDavid van Moolenbroek #include "config.hpp"
36*00b67f09SDavid van Moolenbroek
37*00b67f09SDavid van Moolenbroek namespace impl = atf::atf_run;
38*00b67f09SDavid van Moolenbroek namespace detail = atf::atf_run::detail;
39*00b67f09SDavid van Moolenbroek
40*00b67f09SDavid van Moolenbroek using atf::tests::vars_map;
41*00b67f09SDavid van Moolenbroek
42*00b67f09SDavid van Moolenbroek namespace atf {
43*00b67f09SDavid van Moolenbroek namespace config {
44*00b67f09SDavid van Moolenbroek
45*00b67f09SDavid van Moolenbroek void __reinit(void);
46*00b67f09SDavid van Moolenbroek
47*00b67f09SDavid van Moolenbroek } // namespace config
48*00b67f09SDavid van Moolenbroek } // namespace atf
49*00b67f09SDavid van Moolenbroek
50*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
51*00b67f09SDavid van Moolenbroek // Tests for the "config" parser.
52*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
53*00b67f09SDavid van Moolenbroek
54*00b67f09SDavid van Moolenbroek class config_reader : protected detail::atf_config_reader {
55*00b67f09SDavid van Moolenbroek void
got_var(const std::string & name,const std::string & val)56*00b67f09SDavid van Moolenbroek got_var(const std::string& name, const std::string& val)
57*00b67f09SDavid van Moolenbroek {
58*00b67f09SDavid van Moolenbroek m_calls.push_back("got_var(" + name + ", " + val + ")");
59*00b67f09SDavid van Moolenbroek }
60*00b67f09SDavid van Moolenbroek
61*00b67f09SDavid van Moolenbroek void
got_eof(void)62*00b67f09SDavid van Moolenbroek got_eof(void)
63*00b67f09SDavid van Moolenbroek {
64*00b67f09SDavid van Moolenbroek m_calls.push_back("got_eof()");
65*00b67f09SDavid van Moolenbroek }
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek public:
config_reader(std::istream & is)68*00b67f09SDavid van Moolenbroek config_reader(std::istream& is) :
69*00b67f09SDavid van Moolenbroek detail::atf_config_reader(is)
70*00b67f09SDavid van Moolenbroek {
71*00b67f09SDavid van Moolenbroek }
72*00b67f09SDavid van Moolenbroek
73*00b67f09SDavid van Moolenbroek void
read(void)74*00b67f09SDavid van Moolenbroek read(void)
75*00b67f09SDavid van Moolenbroek {
76*00b67f09SDavid van Moolenbroek atf_config_reader::read();
77*00b67f09SDavid van Moolenbroek }
78*00b67f09SDavid van Moolenbroek
79*00b67f09SDavid van Moolenbroek std::vector< std::string > m_calls;
80*00b67f09SDavid van Moolenbroek };
81*00b67f09SDavid van Moolenbroek
82*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_1);
ATF_TEST_CASE_BODY(config_1)83*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_1)
84*00b67f09SDavid van Moolenbroek {
85*00b67f09SDavid van Moolenbroek const char* input =
86*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
87*00b67f09SDavid van Moolenbroek "\n"
88*00b67f09SDavid van Moolenbroek ;
89*00b67f09SDavid van Moolenbroek
90*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
91*00b67f09SDavid van Moolenbroek "got_eof()",
92*00b67f09SDavid van Moolenbroek NULL
93*00b67f09SDavid van Moolenbroek };
94*00b67f09SDavid van Moolenbroek
95*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
96*00b67f09SDavid van Moolenbroek NULL
97*00b67f09SDavid van Moolenbroek };
98*00b67f09SDavid van Moolenbroek
99*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
100*00b67f09SDavid van Moolenbroek }
101*00b67f09SDavid van Moolenbroek
102*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_2);
ATF_TEST_CASE_BODY(config_2)103*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_2)
104*00b67f09SDavid van Moolenbroek {
105*00b67f09SDavid van Moolenbroek const char* input =
106*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
107*00b67f09SDavid van Moolenbroek "\n"
108*00b67f09SDavid van Moolenbroek "# This is a comment on a line of its own.\n"
109*00b67f09SDavid van Moolenbroek "# And this is another one.\n"
110*00b67f09SDavid van Moolenbroek "\n"
111*00b67f09SDavid van Moolenbroek " # Another after some whitespace.\n"
112*00b67f09SDavid van Moolenbroek "\n"
113*00b67f09SDavid van Moolenbroek "# The last one after an empty line.\n"
114*00b67f09SDavid van Moolenbroek ;
115*00b67f09SDavid van Moolenbroek
116*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
117*00b67f09SDavid van Moolenbroek "got_eof()",
118*00b67f09SDavid van Moolenbroek NULL
119*00b67f09SDavid van Moolenbroek };
120*00b67f09SDavid van Moolenbroek
121*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
122*00b67f09SDavid van Moolenbroek NULL
123*00b67f09SDavid van Moolenbroek };
124*00b67f09SDavid van Moolenbroek
125*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
126*00b67f09SDavid van Moolenbroek }
127*00b67f09SDavid van Moolenbroek
128*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_3);
ATF_TEST_CASE_BODY(config_3)129*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_3)
130*00b67f09SDavid van Moolenbroek {
131*00b67f09SDavid van Moolenbroek const char* input =
132*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
133*00b67f09SDavid van Moolenbroek "\n"
134*00b67f09SDavid van Moolenbroek "var1=value1\n"
135*00b67f09SDavid van Moolenbroek "var2 = value2\n"
136*00b67f09SDavid van Moolenbroek "var3 = value3\n"
137*00b67f09SDavid van Moolenbroek "var4 = value4\n"
138*00b67f09SDavid van Moolenbroek "\n"
139*00b67f09SDavid van Moolenbroek "var5=value5\n"
140*00b67f09SDavid van Moolenbroek " var6=value6\n"
141*00b67f09SDavid van Moolenbroek "\n"
142*00b67f09SDavid van Moolenbroek "var7 = \"This is a long value.\"\n"
143*00b67f09SDavid van Moolenbroek "var8 = \"Single-word\"\n"
144*00b67f09SDavid van Moolenbroek "var9 = \" Single-word \"\n"
145*00b67f09SDavid van Moolenbroek "var10 = Single-word\n"
146*00b67f09SDavid van Moolenbroek ;
147*00b67f09SDavid van Moolenbroek
148*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
149*00b67f09SDavid van Moolenbroek "got_var(var1, value1)",
150*00b67f09SDavid van Moolenbroek "got_var(var2, value2)",
151*00b67f09SDavid van Moolenbroek "got_var(var3, value3)",
152*00b67f09SDavid van Moolenbroek "got_var(var4, value4)",
153*00b67f09SDavid van Moolenbroek "got_var(var5, value5)",
154*00b67f09SDavid van Moolenbroek "got_var(var6, value6)",
155*00b67f09SDavid van Moolenbroek "got_var(var7, This is a long value.)",
156*00b67f09SDavid van Moolenbroek "got_var(var8, Single-word)",
157*00b67f09SDavid van Moolenbroek "got_var(var9, Single-word )",
158*00b67f09SDavid van Moolenbroek "got_var(var10, Single-word)",
159*00b67f09SDavid van Moolenbroek "got_eof()",
160*00b67f09SDavid van Moolenbroek NULL
161*00b67f09SDavid van Moolenbroek };
162*00b67f09SDavid van Moolenbroek
163*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
164*00b67f09SDavid van Moolenbroek NULL
165*00b67f09SDavid van Moolenbroek };
166*00b67f09SDavid van Moolenbroek
167*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
168*00b67f09SDavid van Moolenbroek }
169*00b67f09SDavid van Moolenbroek
170*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_4);
ATF_TEST_CASE_BODY(config_4)171*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_4)
172*00b67f09SDavid van Moolenbroek {
173*00b67f09SDavid van Moolenbroek const char* input =
174*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
175*00b67f09SDavid van Moolenbroek "\n"
176*00b67f09SDavid van Moolenbroek "foo = bar # A comment.\n"
177*00b67f09SDavid van Moolenbroek ;
178*00b67f09SDavid van Moolenbroek
179*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
180*00b67f09SDavid van Moolenbroek "got_var(foo, bar)",
181*00b67f09SDavid van Moolenbroek "got_eof()",
182*00b67f09SDavid van Moolenbroek NULL
183*00b67f09SDavid van Moolenbroek };
184*00b67f09SDavid van Moolenbroek
185*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
186*00b67f09SDavid van Moolenbroek NULL
187*00b67f09SDavid van Moolenbroek };
188*00b67f09SDavid van Moolenbroek
189*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
190*00b67f09SDavid van Moolenbroek }
191*00b67f09SDavid van Moolenbroek
192*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_50);
ATF_TEST_CASE_BODY(config_50)193*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_50)
194*00b67f09SDavid van Moolenbroek {
195*00b67f09SDavid van Moolenbroek const char* input =
196*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
197*00b67f09SDavid van Moolenbroek "\n"
198*00b67f09SDavid van Moolenbroek "foo\n"
199*00b67f09SDavid van Moolenbroek ;
200*00b67f09SDavid van Moolenbroek
201*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
202*00b67f09SDavid van Moolenbroek NULL
203*00b67f09SDavid van Moolenbroek };
204*00b67f09SDavid van Moolenbroek
205*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
206*00b67f09SDavid van Moolenbroek "3: Unexpected token `<<NEWLINE>>'; expected equal sign",
207*00b67f09SDavid van Moolenbroek NULL
208*00b67f09SDavid van Moolenbroek };
209*00b67f09SDavid van Moolenbroek
210*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
211*00b67f09SDavid van Moolenbroek }
212*00b67f09SDavid van Moolenbroek
213*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_51);
ATF_TEST_CASE_BODY(config_51)214*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_51)
215*00b67f09SDavid van Moolenbroek {
216*00b67f09SDavid van Moolenbroek const char* input =
217*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
218*00b67f09SDavid van Moolenbroek "\n"
219*00b67f09SDavid van Moolenbroek "foo bar\n"
220*00b67f09SDavid van Moolenbroek "baz\n"
221*00b67f09SDavid van Moolenbroek ;
222*00b67f09SDavid van Moolenbroek
223*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
224*00b67f09SDavid van Moolenbroek NULL
225*00b67f09SDavid van Moolenbroek };
226*00b67f09SDavid van Moolenbroek
227*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
228*00b67f09SDavid van Moolenbroek "3: Unexpected token `bar'; expected equal sign",
229*00b67f09SDavid van Moolenbroek "4: Unexpected token `<<NEWLINE>>'; expected equal sign",
230*00b67f09SDavid van Moolenbroek NULL
231*00b67f09SDavid van Moolenbroek };
232*00b67f09SDavid van Moolenbroek
233*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
234*00b67f09SDavid van Moolenbroek }
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_52);
ATF_TEST_CASE_BODY(config_52)237*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_52)
238*00b67f09SDavid van Moolenbroek {
239*00b67f09SDavid van Moolenbroek const char* input =
240*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
241*00b67f09SDavid van Moolenbroek "\n"
242*00b67f09SDavid van Moolenbroek "foo =\n"
243*00b67f09SDavid van Moolenbroek "bar = # A comment.\n"
244*00b67f09SDavid van Moolenbroek ;
245*00b67f09SDavid van Moolenbroek
246*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
247*00b67f09SDavid van Moolenbroek NULL
248*00b67f09SDavid van Moolenbroek };
249*00b67f09SDavid van Moolenbroek
250*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
251*00b67f09SDavid van Moolenbroek "3: Unexpected token `<<NEWLINE>>'; expected word or quoted string",
252*00b67f09SDavid van Moolenbroek "4: Unexpected token `#'; expected word or quoted string",
253*00b67f09SDavid van Moolenbroek NULL
254*00b67f09SDavid van Moolenbroek };
255*00b67f09SDavid van Moolenbroek
256*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
257*00b67f09SDavid van Moolenbroek }
258*00b67f09SDavid van Moolenbroek
259*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_53);
ATF_TEST_CASE_BODY(config_53)260*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_53)
261*00b67f09SDavid van Moolenbroek {
262*00b67f09SDavid van Moolenbroek const char* input =
263*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
264*00b67f09SDavid van Moolenbroek "\n"
265*00b67f09SDavid van Moolenbroek "foo = \"Correct value\" # With comment.\n"
266*00b67f09SDavid van Moolenbroek "\n"
267*00b67f09SDavid van Moolenbroek "bar = # A comment.\n"
268*00b67f09SDavid van Moolenbroek "\n"
269*00b67f09SDavid van Moolenbroek "baz = \"Last variable\"\n"
270*00b67f09SDavid van Moolenbroek "\n"
271*00b67f09SDavid van Moolenbroek "# End of file.\n"
272*00b67f09SDavid van Moolenbroek ;
273*00b67f09SDavid van Moolenbroek
274*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
275*00b67f09SDavid van Moolenbroek "got_var(foo, Correct value)",
276*00b67f09SDavid van Moolenbroek NULL
277*00b67f09SDavid van Moolenbroek };
278*00b67f09SDavid van Moolenbroek
279*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
280*00b67f09SDavid van Moolenbroek "5: Unexpected token `#'; expected word or quoted string",
281*00b67f09SDavid van Moolenbroek NULL
282*00b67f09SDavid van Moolenbroek };
283*00b67f09SDavid van Moolenbroek
284*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
285*00b67f09SDavid van Moolenbroek }
286*00b67f09SDavid van Moolenbroek
287*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_WITHOUT_HEAD(config_54);
ATF_TEST_CASE_BODY(config_54)288*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(config_54)
289*00b67f09SDavid van Moolenbroek {
290*00b67f09SDavid van Moolenbroek const char* input =
291*00b67f09SDavid van Moolenbroek "Content-Type: application/X-atf-config; version=\"1\"\n"
292*00b67f09SDavid van Moolenbroek "\n"
293*00b67f09SDavid van Moolenbroek "foo = \"\n"
294*00b67f09SDavid van Moolenbroek "bar = \"text\n"
295*00b67f09SDavid van Moolenbroek "baz = \"te\\\"xt\n"
296*00b67f09SDavid van Moolenbroek "last = \"\\\"\n"
297*00b67f09SDavid van Moolenbroek ;
298*00b67f09SDavid van Moolenbroek
299*00b67f09SDavid van Moolenbroek const char* exp_calls[] = {
300*00b67f09SDavid van Moolenbroek NULL
301*00b67f09SDavid van Moolenbroek };
302*00b67f09SDavid van Moolenbroek
303*00b67f09SDavid van Moolenbroek const char* exp_errors[] = {
304*00b67f09SDavid van Moolenbroek "3: Missing double quotes before end of line",
305*00b67f09SDavid van Moolenbroek "4: Missing double quotes before end of line",
306*00b67f09SDavid van Moolenbroek "5: Missing double quotes before end of line",
307*00b67f09SDavid van Moolenbroek "6: Missing double quotes before end of line",
308*00b67f09SDavid van Moolenbroek NULL
309*00b67f09SDavid van Moolenbroek };
310*00b67f09SDavid van Moolenbroek
311*00b67f09SDavid van Moolenbroek do_parser_test< config_reader >(input, exp_calls, exp_errors);
312*00b67f09SDavid van Moolenbroek }
313*00b67f09SDavid van Moolenbroek
314*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
315*00b67f09SDavid van Moolenbroek // Tests for the free functions.
316*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
317*00b67f09SDavid van Moolenbroek
318*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(merge_configs_both_empty);
ATF_TEST_CASE_HEAD(merge_configs_both_empty)319*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(merge_configs_both_empty) {}
ATF_TEST_CASE_BODY(merge_configs_both_empty)320*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(merge_configs_both_empty) {
321*00b67f09SDavid van Moolenbroek vars_map lower, upper;
322*00b67f09SDavid van Moolenbroek
323*00b67f09SDavid van Moolenbroek ATF_REQUIRE(impl::merge_configs(lower, upper).empty());
324*00b67f09SDavid van Moolenbroek }
325*00b67f09SDavid van Moolenbroek
326*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(merge_configs_lower_empty);
ATF_TEST_CASE_HEAD(merge_configs_lower_empty)327*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(merge_configs_lower_empty) {}
ATF_TEST_CASE_BODY(merge_configs_lower_empty)328*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(merge_configs_lower_empty) {
329*00b67f09SDavid van Moolenbroek vars_map lower, upper;
330*00b67f09SDavid van Moolenbroek upper["var"] = "value";
331*00b67f09SDavid van Moolenbroek
332*00b67f09SDavid van Moolenbroek vars_map merged = impl::merge_configs(lower, upper);
333*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ("value", merged["var"]);
334*00b67f09SDavid van Moolenbroek }
335*00b67f09SDavid van Moolenbroek
336*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(merge_configs_upper_empty);
ATF_TEST_CASE_HEAD(merge_configs_upper_empty)337*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(merge_configs_upper_empty) {}
ATF_TEST_CASE_BODY(merge_configs_upper_empty)338*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(merge_configs_upper_empty) {
339*00b67f09SDavid van Moolenbroek vars_map lower, upper;
340*00b67f09SDavid van Moolenbroek lower["var"] = "value";
341*00b67f09SDavid van Moolenbroek
342*00b67f09SDavid van Moolenbroek vars_map merged = impl::merge_configs(lower, upper);
343*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ("value", merged["var"]);
344*00b67f09SDavid van Moolenbroek }
345*00b67f09SDavid van Moolenbroek
346*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(merge_configs_mixed);
ATF_TEST_CASE_HEAD(merge_configs_mixed)347*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(merge_configs_mixed) {}
ATF_TEST_CASE_BODY(merge_configs_mixed)348*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(merge_configs_mixed) {
349*00b67f09SDavid van Moolenbroek vars_map lower, upper;
350*00b67f09SDavid van Moolenbroek lower["var1"] = "value1";
351*00b67f09SDavid van Moolenbroek lower["var2"] = "value2-l";
352*00b67f09SDavid van Moolenbroek upper["var2"] = "value2-u";
353*00b67f09SDavid van Moolenbroek upper["var3"] = "value3";
354*00b67f09SDavid van Moolenbroek
355*00b67f09SDavid van Moolenbroek vars_map merged = impl::merge_configs(lower, upper);
356*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ("value1", merged["var1"]);
357*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ("value2-u", merged["var2"]);
358*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ("value3", merged["var3"]);
359*00b67f09SDavid van Moolenbroek }
360*00b67f09SDavid van Moolenbroek
361*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(read_config_files_none);
ATF_TEST_CASE_HEAD(read_config_files_none)362*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(read_config_files_none) {}
ATF_TEST_CASE_BODY(read_config_files_none)363*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(read_config_files_none) {
364*00b67f09SDavid van Moolenbroek atf::env::set("ATF_CONFDIR", ".");
365*00b67f09SDavid van Moolenbroek atf::config::__reinit();
366*00b67f09SDavid van Moolenbroek ATF_REQUIRE(vars_map() == impl::read_config_files("test-suite"));
367*00b67f09SDavid van Moolenbroek }
368*00b67f09SDavid van Moolenbroek
369*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
370*00b67f09SDavid van Moolenbroek // Main.
371*00b67f09SDavid van Moolenbroek // -------------------------------------------------------------------------
372*00b67f09SDavid van Moolenbroek
ATF_INIT_TEST_CASES(tcs)373*00b67f09SDavid van Moolenbroek ATF_INIT_TEST_CASES(tcs)
374*00b67f09SDavid van Moolenbroek {
375*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_1);
376*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_2);
377*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_3);
378*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_4);
379*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_50);
380*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_51);
381*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_52);
382*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_53);
383*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, config_54);
384*00b67f09SDavid van Moolenbroek
385*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, merge_configs_both_empty);
386*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, merge_configs_lower_empty);
387*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, merge_configs_upper_empty);
388*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, merge_configs_mixed);
389*00b67f09SDavid van Moolenbroek
390*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, read_config_files_none);
391*00b67f09SDavid van Moolenbroek }
392