1*6b3a42afSjmmv // Copyright 2010 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 "engine/kyuafile.hpp"
30*6b3a42afSjmmv
31*6b3a42afSjmmv #include <stdexcept>
32*6b3a42afSjmmv #include <typeinfo>
33*6b3a42afSjmmv
34*6b3a42afSjmmv #include <atf-c++.hpp>
35*6b3a42afSjmmv #include <lutok/operations.hpp>
36*6b3a42afSjmmv #include <lutok/state.ipp>
37*6b3a42afSjmmv #include <lutok/test_utils.hpp>
38*6b3a42afSjmmv
39*6b3a42afSjmmv #include "engine/exceptions.hpp"
40*6b3a42afSjmmv #include "engine/test_program.hpp"
41*6b3a42afSjmmv #include "utils/datetime.hpp"
42*6b3a42afSjmmv #include "utils/format/macros.hpp"
43*6b3a42afSjmmv #include "utils/fs/operations.hpp"
44*6b3a42afSjmmv #include "utils/optional.ipp"
45*6b3a42afSjmmv
46*6b3a42afSjmmv namespace datetime = utils::datetime;
47*6b3a42afSjmmv namespace fs = utils::fs;
48*6b3a42afSjmmv
49*6b3a42afSjmmv using utils::none;
50*6b3a42afSjmmv
51*6b3a42afSjmmv
52*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__empty);
ATF_TEST_CASE_BODY(kyuafile__load__empty)53*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__empty)
54*6b3a42afSjmmv {
55*6b3a42afSjmmv atf::utils::create_file("config", "syntax(2)\n");
56*6b3a42afSjmmv
57*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
58*6b3a42afSjmmv fs::path("config"), none);
59*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
60*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
61*6b3a42afSjmmv ATF_REQUIRE_EQ(0, suite.test_programs().size());
62*6b3a42afSjmmv }
63*6b3a42afSjmmv
64*6b3a42afSjmmv
65*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__some_programs);
ATF_TEST_CASE_BODY(kyuafile__load__some_programs)66*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__some_programs)
67*6b3a42afSjmmv {
68*6b3a42afSjmmv atf::utils::create_file(
69*6b3a42afSjmmv "config",
70*6b3a42afSjmmv "syntax(2)\n"
71*6b3a42afSjmmv "test_suite('one-suite')\n"
72*6b3a42afSjmmv "atf_test_program{name='1st'}\n"
73*6b3a42afSjmmv "atf_test_program{name='2nd', test_suite='first'}\n"
74*6b3a42afSjmmv "plain_test_program{name='3rd'}\n"
75*6b3a42afSjmmv "plain_test_program{name='4th', test_suite='second'}\n"
76*6b3a42afSjmmv "include('dir/config')\n");
77*6b3a42afSjmmv
78*6b3a42afSjmmv fs::mkdir(fs::path("dir"), 0755);
79*6b3a42afSjmmv atf::utils::create_file(
80*6b3a42afSjmmv "dir/config",
81*6b3a42afSjmmv "syntax(2)\n"
82*6b3a42afSjmmv "atf_test_program{name='1st', test_suite='other-suite'}\n"
83*6b3a42afSjmmv "include('subdir/config')\n");
84*6b3a42afSjmmv
85*6b3a42afSjmmv fs::mkdir(fs::path("dir/subdir"), 0755);
86*6b3a42afSjmmv atf::utils::create_file(
87*6b3a42afSjmmv "dir/subdir/config",
88*6b3a42afSjmmv "syntax(2)\n"
89*6b3a42afSjmmv "atf_test_program{name='5th', test_suite='last-suite'}\n");
90*6b3a42afSjmmv
91*6b3a42afSjmmv atf::utils::create_file("1st", "");
92*6b3a42afSjmmv atf::utils::create_file("2nd", "");
93*6b3a42afSjmmv atf::utils::create_file("3rd", "");
94*6b3a42afSjmmv atf::utils::create_file("4th", "");
95*6b3a42afSjmmv atf::utils::create_file("dir/1st", "");
96*6b3a42afSjmmv atf::utils::create_file("dir/subdir/5th", "");
97*6b3a42afSjmmv
98*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
99*6b3a42afSjmmv fs::path("config"), none);
100*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
101*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
102*6b3a42afSjmmv ATF_REQUIRE_EQ(6, suite.test_programs().size());
103*6b3a42afSjmmv
104*6b3a42afSjmmv ATF_REQUIRE_EQ("atf", suite.test_programs()[0]->interface_name());
105*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("1st"), suite.test_programs()[0]->relative_path());
106*6b3a42afSjmmv ATF_REQUIRE_EQ("one-suite", suite.test_programs()[0]->test_suite_name());
107*6b3a42afSjmmv
108*6b3a42afSjmmv ATF_REQUIRE_EQ("atf", suite.test_programs()[1]->interface_name());
109*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("2nd"), suite.test_programs()[1]->relative_path());
110*6b3a42afSjmmv ATF_REQUIRE_EQ("first", suite.test_programs()[1]->test_suite_name());
111*6b3a42afSjmmv
112*6b3a42afSjmmv ATF_REQUIRE_EQ("plain", suite.test_programs()[2]->interface_name());
113*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("3rd"), suite.test_programs()[2]->relative_path());
114*6b3a42afSjmmv ATF_REQUIRE_EQ("one-suite", suite.test_programs()[2]->test_suite_name());
115*6b3a42afSjmmv
116*6b3a42afSjmmv ATF_REQUIRE_EQ("plain", suite.test_programs()[3]->interface_name());
117*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("4th"), suite.test_programs()[3]->relative_path());
118*6b3a42afSjmmv ATF_REQUIRE_EQ("second", suite.test_programs()[3]->test_suite_name());
119*6b3a42afSjmmv
120*6b3a42afSjmmv ATF_REQUIRE_EQ("atf", suite.test_programs()[4]->interface_name());
121*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/1st"),
122*6b3a42afSjmmv suite.test_programs()[4]->relative_path());
123*6b3a42afSjmmv ATF_REQUIRE_EQ("other-suite", suite.test_programs()[4]->test_suite_name());
124*6b3a42afSjmmv
125*6b3a42afSjmmv ATF_REQUIRE_EQ("atf", suite.test_programs()[5]->interface_name());
126*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/subdir/5th"),
127*6b3a42afSjmmv suite.test_programs()[5]->relative_path());
128*6b3a42afSjmmv ATF_REQUIRE_EQ("last-suite", suite.test_programs()[5]->test_suite_name());
129*6b3a42afSjmmv }
130*6b3a42afSjmmv
131*6b3a42afSjmmv
132*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__metadata);
ATF_TEST_CASE_BODY(kyuafile__load__metadata)133*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__metadata)
134*6b3a42afSjmmv {
135*6b3a42afSjmmv atf::utils::create_file(
136*6b3a42afSjmmv "config",
137*6b3a42afSjmmv "syntax(2)\n"
138*6b3a42afSjmmv "atf_test_program{name='1st', test_suite='first',"
139*6b3a42afSjmmv " allowed_architectures='amd64 i386', timeout=15}\n"
140*6b3a42afSjmmv "plain_test_program{name='2nd', test_suite='second',"
141*6b3a42afSjmmv " required_files='foo /bar//baz', required_user='root'}\n");
142*6b3a42afSjmmv atf::utils::create_file("1st", "");
143*6b3a42afSjmmv atf::utils::create_file("2nd", "");
144*6b3a42afSjmmv
145*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
146*6b3a42afSjmmv fs::path("config"), none);
147*6b3a42afSjmmv ATF_REQUIRE_EQ(2, suite.test_programs().size());
148*6b3a42afSjmmv
149*6b3a42afSjmmv ATF_REQUIRE_EQ("atf", suite.test_programs()[0]->interface_name());
150*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("1st"), suite.test_programs()[0]->relative_path());
151*6b3a42afSjmmv ATF_REQUIRE_EQ("first", suite.test_programs()[0]->test_suite_name());
152*6b3a42afSjmmv const engine::metadata md1 = engine::metadata_builder()
153*6b3a42afSjmmv .add_allowed_architecture("amd64")
154*6b3a42afSjmmv .add_allowed_architecture("i386")
155*6b3a42afSjmmv .set_timeout(datetime::delta(15, 0))
156*6b3a42afSjmmv .build();
157*6b3a42afSjmmv ATF_REQUIRE_EQ(md1, suite.test_programs()[0]->get_metadata());
158*6b3a42afSjmmv
159*6b3a42afSjmmv ATF_REQUIRE_EQ("plain", suite.test_programs()[1]->interface_name());
160*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("2nd"), suite.test_programs()[1]->relative_path());
161*6b3a42afSjmmv ATF_REQUIRE_EQ("second", suite.test_programs()[1]->test_suite_name());
162*6b3a42afSjmmv const engine::metadata md2 = engine::metadata_builder()
163*6b3a42afSjmmv .add_required_file(fs::path("foo"))
164*6b3a42afSjmmv .add_required_file(fs::path("/bar/baz"))
165*6b3a42afSjmmv .set_required_user("root")
166*6b3a42afSjmmv .build();
167*6b3a42afSjmmv ATF_REQUIRE_EQ(md2, suite.test_programs()[1]->get_metadata());
168*6b3a42afSjmmv }
169*6b3a42afSjmmv
170*6b3a42afSjmmv
171*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__current_directory);
ATF_TEST_CASE_BODY(kyuafile__load__current_directory)172*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__current_directory)
173*6b3a42afSjmmv {
174*6b3a42afSjmmv atf::utils::create_file(
175*6b3a42afSjmmv "config",
176*6b3a42afSjmmv "syntax(2)\n"
177*6b3a42afSjmmv "atf_test_program{name='one', test_suite='first'}\n"
178*6b3a42afSjmmv "include('config2')\n");
179*6b3a42afSjmmv
180*6b3a42afSjmmv atf::utils::create_file(
181*6b3a42afSjmmv "config2",
182*6b3a42afSjmmv "syntax(2)\n"
183*6b3a42afSjmmv "test_suite('second')\n"
184*6b3a42afSjmmv "atf_test_program{name='two'}\n");
185*6b3a42afSjmmv
186*6b3a42afSjmmv atf::utils::create_file("one", "");
187*6b3a42afSjmmv atf::utils::create_file("two", "");
188*6b3a42afSjmmv
189*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
190*6b3a42afSjmmv fs::path("config"), none);
191*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
192*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
193*6b3a42afSjmmv ATF_REQUIRE_EQ(2, suite.test_programs().size());
194*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
195*6b3a42afSjmmv ATF_REQUIRE_EQ("first", suite.test_programs()[0]->test_suite_name());
196*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("two"),
197*6b3a42afSjmmv suite.test_programs()[1]->relative_path());
198*6b3a42afSjmmv ATF_REQUIRE_EQ("second", suite.test_programs()[1]->test_suite_name());
199*6b3a42afSjmmv }
200*6b3a42afSjmmv
201*6b3a42afSjmmv
202*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__other_directory);
ATF_TEST_CASE_BODY(kyuafile__load__other_directory)203*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__other_directory)
204*6b3a42afSjmmv {
205*6b3a42afSjmmv fs::mkdir(fs::path("root"), 0755);
206*6b3a42afSjmmv atf::utils::create_file(
207*6b3a42afSjmmv "root/config",
208*6b3a42afSjmmv "syntax(2)\n"
209*6b3a42afSjmmv "test_suite('abc')\n"
210*6b3a42afSjmmv "atf_test_program{name='one'}\n"
211*6b3a42afSjmmv "include('dir/config')\n");
212*6b3a42afSjmmv
213*6b3a42afSjmmv fs::mkdir(fs::path("root/dir"), 0755);
214*6b3a42afSjmmv atf::utils::create_file(
215*6b3a42afSjmmv "root/dir/config",
216*6b3a42afSjmmv "syntax(2)\n"
217*6b3a42afSjmmv "test_suite('foo')\n"
218*6b3a42afSjmmv "atf_test_program{name='two', test_suite='def'}\n"
219*6b3a42afSjmmv "atf_test_program{name='three'}\n");
220*6b3a42afSjmmv
221*6b3a42afSjmmv atf::utils::create_file("root/one", "");
222*6b3a42afSjmmv atf::utils::create_file("root/dir/two", "");
223*6b3a42afSjmmv atf::utils::create_file("root/dir/three", "");
224*6b3a42afSjmmv
225*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
226*6b3a42afSjmmv fs::path("root/config"), none);
227*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("root"), suite.source_root());
228*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("root"), suite.build_root());
229*6b3a42afSjmmv ATF_REQUIRE_EQ(3, suite.test_programs().size());
230*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
231*6b3a42afSjmmv ATF_REQUIRE_EQ("abc", suite.test_programs()[0]->test_suite_name());
232*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/two"),
233*6b3a42afSjmmv suite.test_programs()[1]->relative_path());
234*6b3a42afSjmmv ATF_REQUIRE_EQ("def", suite.test_programs()[1]->test_suite_name());
235*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/three"),
236*6b3a42afSjmmv suite.test_programs()[2]->relative_path());
237*6b3a42afSjmmv ATF_REQUIRE_EQ("foo", suite.test_programs()[2]->test_suite_name());
238*6b3a42afSjmmv }
239*6b3a42afSjmmv
240*6b3a42afSjmmv
241*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__build_directory);
ATF_TEST_CASE_BODY(kyuafile__load__build_directory)242*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__build_directory)
243*6b3a42afSjmmv {
244*6b3a42afSjmmv fs::mkdir(fs::path("srcdir"), 0755);
245*6b3a42afSjmmv atf::utils::create_file(
246*6b3a42afSjmmv "srcdir/config",
247*6b3a42afSjmmv "syntax(2)\n"
248*6b3a42afSjmmv "test_suite('abc')\n"
249*6b3a42afSjmmv "atf_test_program{name='one'}\n"
250*6b3a42afSjmmv "include('dir/config')\n");
251*6b3a42afSjmmv
252*6b3a42afSjmmv fs::mkdir(fs::path("srcdir/dir"), 0755);
253*6b3a42afSjmmv atf::utils::create_file(
254*6b3a42afSjmmv "srcdir/dir/config",
255*6b3a42afSjmmv "syntax(2)\n"
256*6b3a42afSjmmv "test_suite('foo')\n"
257*6b3a42afSjmmv "atf_test_program{name='two', test_suite='def'}\n"
258*6b3a42afSjmmv "atf_test_program{name='three'}\n");
259*6b3a42afSjmmv
260*6b3a42afSjmmv fs::mkdir(fs::path("builddir"), 0755);
261*6b3a42afSjmmv atf::utils::create_file("builddir/one", "");
262*6b3a42afSjmmv fs::mkdir(fs::path("builddir/dir"), 0755);
263*6b3a42afSjmmv atf::utils::create_file("builddir/dir/two", "");
264*6b3a42afSjmmv atf::utils::create_file("builddir/dir/three", "");
265*6b3a42afSjmmv
266*6b3a42afSjmmv const engine::kyuafile suite = engine::kyuafile::load(
267*6b3a42afSjmmv fs::path("srcdir/config"), utils::make_optional(fs::path("builddir")));
268*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("srcdir"), suite.source_root());
269*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("builddir"), suite.build_root());
270*6b3a42afSjmmv ATF_REQUIRE_EQ(3, suite.test_programs().size());
271*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("builddir/one").to_absolute(),
272*6b3a42afSjmmv suite.test_programs()[0]->absolute_path());
273*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
274*6b3a42afSjmmv ATF_REQUIRE_EQ("abc", suite.test_programs()[0]->test_suite_name());
275*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("builddir/dir/two").to_absolute(),
276*6b3a42afSjmmv suite.test_programs()[1]->absolute_path());
277*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/two"),
278*6b3a42afSjmmv suite.test_programs()[1]->relative_path());
279*6b3a42afSjmmv ATF_REQUIRE_EQ("def", suite.test_programs()[1]->test_suite_name());
280*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("builddir/dir/three").to_absolute(),
281*6b3a42afSjmmv suite.test_programs()[2]->absolute_path());
282*6b3a42afSjmmv ATF_REQUIRE_EQ(fs::path("dir/three"),
283*6b3a42afSjmmv suite.test_programs()[2]->relative_path());
284*6b3a42afSjmmv ATF_REQUIRE_EQ("foo", suite.test_programs()[2]->test_suite_name());
285*6b3a42afSjmmv }
286*6b3a42afSjmmv
287*6b3a42afSjmmv
288*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__test_program_not_basename);
ATF_TEST_CASE_BODY(kyuafile__load__test_program_not_basename)289*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__test_program_not_basename)
290*6b3a42afSjmmv {
291*6b3a42afSjmmv atf::utils::create_file(
292*6b3a42afSjmmv "config",
293*6b3a42afSjmmv "syntax(2)\n"
294*6b3a42afSjmmv "test_suite('abc')\n"
295*6b3a42afSjmmv "atf_test_program{name='one'}\n"
296*6b3a42afSjmmv "atf_test_program{name='./ls'}\n");
297*6b3a42afSjmmv
298*6b3a42afSjmmv atf::utils::create_file("one", "");
299*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "./ls.*path components",
300*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
301*6b3a42afSjmmv }
302*6b3a42afSjmmv
303*6b3a42afSjmmv
304*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__lua_error);
ATF_TEST_CASE_BODY(kyuafile__load__lua_error)305*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__lua_error)
306*6b3a42afSjmmv {
307*6b3a42afSjmmv atf::utils::create_file("config", "this syntax is invalid\n");
308*6b3a42afSjmmv
309*6b3a42afSjmmv ATF_REQUIRE_THROW(engine::load_error, engine::kyuafile::load(
310*6b3a42afSjmmv fs::path("config"), none));
311*6b3a42afSjmmv }
312*6b3a42afSjmmv
313*6b3a42afSjmmv
314*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__not_called);
ATF_TEST_CASE_BODY(kyuafile__load__syntax__not_called)315*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__not_called)
316*6b3a42afSjmmv {
317*6b3a42afSjmmv atf::utils::create_file("config", "");
318*6b3a42afSjmmv
319*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "syntax.* never called",
320*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
321*6b3a42afSjmmv }
322*6b3a42afSjmmv
323*6b3a42afSjmmv
324*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__deprecated_format);
ATF_TEST_CASE_BODY(kyuafile__load__syntax__deprecated_format)325*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__deprecated_format)
326*6b3a42afSjmmv {
327*6b3a42afSjmmv atf::utils::create_file("config", "syntax('kyuafile', 1)\n");
328*6b3a42afSjmmv (void)engine::kyuafile::load(fs::path("config"), none);
329*6b3a42afSjmmv
330*6b3a42afSjmmv atf::utils::create_file("config", "syntax('foo', 1)\n");
331*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "must be 'kyuafile'",
332*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
333*6b3a42afSjmmv
334*6b3a42afSjmmv atf::utils::create_file("config", "syntax('config', 2)\n");
335*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "only takes one argument",
336*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
337*6b3a42afSjmmv }
338*6b3a42afSjmmv
339*6b3a42afSjmmv
340*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__twice);
ATF_TEST_CASE_BODY(kyuafile__load__syntax__twice)341*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__twice)
342*6b3a42afSjmmv {
343*6b3a42afSjmmv atf::utils::create_file(
344*6b3a42afSjmmv "config",
345*6b3a42afSjmmv "syntax(2)\n"
346*6b3a42afSjmmv "syntax(2)\n");
347*6b3a42afSjmmv
348*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "Can only call syntax.* once",
349*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
350*6b3a42afSjmmv }
351*6b3a42afSjmmv
352*6b3a42afSjmmv
353*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__bad_version);
ATF_TEST_CASE_BODY(kyuafile__load__syntax__bad_version)354*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__bad_version)
355*6b3a42afSjmmv {
356*6b3a42afSjmmv atf::utils::create_file("config", "syntax(12)\n");
357*6b3a42afSjmmv
358*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "Unsupported file version 12",
359*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
360*6b3a42afSjmmv }
361*6b3a42afSjmmv
362*6b3a42afSjmmv
363*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__test_suite__twice);
ATF_TEST_CASE_BODY(kyuafile__load__test_suite__twice)364*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__test_suite__twice)
365*6b3a42afSjmmv {
366*6b3a42afSjmmv atf::utils::create_file(
367*6b3a42afSjmmv "config",
368*6b3a42afSjmmv "syntax(2)\n"
369*6b3a42afSjmmv "test_suite('foo')\n"
370*6b3a42afSjmmv "test_suite('bar')\n");
371*6b3a42afSjmmv
372*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "Can only call test_suite.* once",
373*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
374*6b3a42afSjmmv }
375*6b3a42afSjmmv
376*6b3a42afSjmmv
377*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__missing_file);
ATF_TEST_CASE_BODY(kyuafile__load__missing_file)378*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__missing_file)
379*6b3a42afSjmmv {
380*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "Load of 'missing' failed",
381*6b3a42afSjmmv engine::kyuafile::load(fs::path("missing"), none));
382*6b3a42afSjmmv }
383*6b3a42afSjmmv
384*6b3a42afSjmmv
385*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__missing_test_program);
ATF_TEST_CASE_BODY(kyuafile__load__missing_test_program)386*6b3a42afSjmmv ATF_TEST_CASE_BODY(kyuafile__load__missing_test_program)
387*6b3a42afSjmmv {
388*6b3a42afSjmmv atf::utils::create_file(
389*6b3a42afSjmmv "config",
390*6b3a42afSjmmv "syntax(2)\n"
391*6b3a42afSjmmv "atf_test_program{name='one', test_suite='first'}\n"
392*6b3a42afSjmmv "atf_test_program{name='two', test_suite='first'}\n");
393*6b3a42afSjmmv
394*6b3a42afSjmmv atf::utils::create_file("one", "");
395*6b3a42afSjmmv
396*6b3a42afSjmmv ATF_REQUIRE_THROW_RE(engine::load_error, "Non-existent.*'two'",
397*6b3a42afSjmmv engine::kyuafile::load(fs::path("config"), none));
398*6b3a42afSjmmv }
399*6b3a42afSjmmv
400*6b3a42afSjmmv
ATF_INIT_TEST_CASES(tcs)401*6b3a42afSjmmv ATF_INIT_TEST_CASES(tcs)
402*6b3a42afSjmmv {
403*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__empty);
404*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__some_programs);
405*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__metadata);
406*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__current_directory);
407*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__other_directory);
408*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__build_directory);
409*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__test_program_not_basename);
410*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__lua_error);
411*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__not_called);
412*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__deprecated_format);
413*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__twice);
414*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__bad_version);
415*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__test_suite__twice);
416*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__missing_file);
417*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, kyuafile__load__missing_test_program);
418*6b3a42afSjmmv }
419