Home | History | Annotate | Line # | Download | only in engine
      1  1.1  jmmv // Copyright 2010 Google Inc.
      2  1.1  jmmv // All rights reserved.
      3  1.1  jmmv //
      4  1.1  jmmv // Redistribution and use in source and binary forms, with or without
      5  1.1  jmmv // modification, are permitted provided that the following conditions are
      6  1.1  jmmv // met:
      7  1.1  jmmv //
      8  1.1  jmmv // * Redistributions of source code must retain the above copyright
      9  1.1  jmmv //   notice, this list of conditions and the following disclaimer.
     10  1.1  jmmv // * Redistributions in binary form must reproduce the above copyright
     11  1.1  jmmv //   notice, this list of conditions and the following disclaimer in the
     12  1.1  jmmv //   documentation and/or other materials provided with the distribution.
     13  1.1  jmmv // * Neither the name of Google Inc. nor the names of its contributors
     14  1.1  jmmv //   may be used to endorse or promote products derived from this software
     15  1.1  jmmv //   without specific prior written permission.
     16  1.1  jmmv //
     17  1.1  jmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     18  1.1  jmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     19  1.1  jmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     20  1.1  jmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     21  1.1  jmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     22  1.1  jmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     23  1.1  jmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24  1.1  jmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25  1.1  jmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  1.1  jmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     27  1.1  jmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  1.1  jmmv 
     29  1.1  jmmv #include "engine/kyuafile.hpp"
     30  1.1  jmmv 
     31  1.1  jmmv #include <stdexcept>
     32  1.1  jmmv #include <typeinfo>
     33  1.1  jmmv 
     34  1.1  jmmv #include <atf-c++.hpp>
     35  1.1  jmmv #include <lutok/operations.hpp>
     36  1.1  jmmv #include <lutok/state.ipp>
     37  1.1  jmmv #include <lutok/test_utils.hpp>
     38  1.1  jmmv 
     39  1.1  jmmv #include "engine/exceptions.hpp"
     40  1.1  jmmv #include "engine/test_program.hpp"
     41  1.1  jmmv #include "utils/datetime.hpp"
     42  1.1  jmmv #include "utils/format/macros.hpp"
     43  1.1  jmmv #include "utils/fs/operations.hpp"
     44  1.1  jmmv #include "utils/optional.ipp"
     45  1.1  jmmv 
     46  1.1  jmmv namespace datetime = utils::datetime;
     47  1.1  jmmv namespace fs = utils::fs;
     48  1.1  jmmv 
     49  1.1  jmmv using utils::none;
     50  1.1  jmmv 
     51  1.1  jmmv 
     52  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__empty);
     53  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__empty)
     54  1.1  jmmv {
     55  1.1  jmmv     atf::utils::create_file("config", "syntax(2)\n");
     56  1.1  jmmv 
     57  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
     58  1.1  jmmv         fs::path("config"), none);
     59  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
     60  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
     61  1.1  jmmv     ATF_REQUIRE_EQ(0, suite.test_programs().size());
     62  1.1  jmmv }
     63  1.1  jmmv 
     64  1.1  jmmv 
     65  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__some_programs);
     66  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__some_programs)
     67  1.1  jmmv {
     68  1.1  jmmv     atf::utils::create_file(
     69  1.1  jmmv         "config",
     70  1.1  jmmv         "syntax(2)\n"
     71  1.1  jmmv         "test_suite('one-suite')\n"
     72  1.1  jmmv         "atf_test_program{name='1st'}\n"
     73  1.1  jmmv         "atf_test_program{name='2nd', test_suite='first'}\n"
     74  1.1  jmmv         "plain_test_program{name='3rd'}\n"
     75  1.1  jmmv         "plain_test_program{name='4th', test_suite='second'}\n"
     76  1.1  jmmv         "include('dir/config')\n");
     77  1.1  jmmv 
     78  1.1  jmmv     fs::mkdir(fs::path("dir"), 0755);
     79  1.1  jmmv     atf::utils::create_file(
     80  1.1  jmmv         "dir/config",
     81  1.1  jmmv         "syntax(2)\n"
     82  1.1  jmmv         "atf_test_program{name='1st', test_suite='other-suite'}\n"
     83  1.1  jmmv         "include('subdir/config')\n");
     84  1.1  jmmv 
     85  1.1  jmmv     fs::mkdir(fs::path("dir/subdir"), 0755);
     86  1.1  jmmv     atf::utils::create_file(
     87  1.1  jmmv         "dir/subdir/config",
     88  1.1  jmmv         "syntax(2)\n"
     89  1.1  jmmv         "atf_test_program{name='5th', test_suite='last-suite'}\n");
     90  1.1  jmmv 
     91  1.1  jmmv     atf::utils::create_file("1st", "");
     92  1.1  jmmv     atf::utils::create_file("2nd", "");
     93  1.1  jmmv     atf::utils::create_file("3rd", "");
     94  1.1  jmmv     atf::utils::create_file("4th", "");
     95  1.1  jmmv     atf::utils::create_file("dir/1st", "");
     96  1.1  jmmv     atf::utils::create_file("dir/subdir/5th", "");
     97  1.1  jmmv 
     98  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
     99  1.1  jmmv         fs::path("config"), none);
    100  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
    101  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
    102  1.1  jmmv     ATF_REQUIRE_EQ(6, suite.test_programs().size());
    103  1.1  jmmv 
    104  1.1  jmmv     ATF_REQUIRE_EQ("atf", suite.test_programs()[0]->interface_name());
    105  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("1st"), suite.test_programs()[0]->relative_path());
    106  1.1  jmmv     ATF_REQUIRE_EQ("one-suite", suite.test_programs()[0]->test_suite_name());
    107  1.1  jmmv 
    108  1.1  jmmv     ATF_REQUIRE_EQ("atf", suite.test_programs()[1]->interface_name());
    109  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("2nd"), suite.test_programs()[1]->relative_path());
    110  1.1  jmmv     ATF_REQUIRE_EQ("first", suite.test_programs()[1]->test_suite_name());
    111  1.1  jmmv 
    112  1.1  jmmv     ATF_REQUIRE_EQ("plain", suite.test_programs()[2]->interface_name());
    113  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("3rd"), suite.test_programs()[2]->relative_path());
    114  1.1  jmmv     ATF_REQUIRE_EQ("one-suite", suite.test_programs()[2]->test_suite_name());
    115  1.1  jmmv 
    116  1.1  jmmv     ATF_REQUIRE_EQ("plain", suite.test_programs()[3]->interface_name());
    117  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("4th"), suite.test_programs()[3]->relative_path());
    118  1.1  jmmv     ATF_REQUIRE_EQ("second", suite.test_programs()[3]->test_suite_name());
    119  1.1  jmmv 
    120  1.1  jmmv     ATF_REQUIRE_EQ("atf", suite.test_programs()[4]->interface_name());
    121  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/1st"),
    122  1.1  jmmv                    suite.test_programs()[4]->relative_path());
    123  1.1  jmmv     ATF_REQUIRE_EQ("other-suite", suite.test_programs()[4]->test_suite_name());
    124  1.1  jmmv 
    125  1.1  jmmv     ATF_REQUIRE_EQ("atf", suite.test_programs()[5]->interface_name());
    126  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/subdir/5th"),
    127  1.1  jmmv                    suite.test_programs()[5]->relative_path());
    128  1.1  jmmv     ATF_REQUIRE_EQ("last-suite", suite.test_programs()[5]->test_suite_name());
    129  1.1  jmmv }
    130  1.1  jmmv 
    131  1.1  jmmv 
    132  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__metadata);
    133  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__metadata)
    134  1.1  jmmv {
    135  1.1  jmmv     atf::utils::create_file(
    136  1.1  jmmv         "config",
    137  1.1  jmmv         "syntax(2)\n"
    138  1.1  jmmv         "atf_test_program{name='1st', test_suite='first',"
    139  1.1  jmmv         " allowed_architectures='amd64 i386', timeout=15}\n"
    140  1.1  jmmv         "plain_test_program{name='2nd', test_suite='second',"
    141  1.1  jmmv         " required_files='foo /bar//baz', required_user='root'}\n");
    142  1.1  jmmv     atf::utils::create_file("1st", "");
    143  1.1  jmmv     atf::utils::create_file("2nd", "");
    144  1.1  jmmv 
    145  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
    146  1.1  jmmv         fs::path("config"), none);
    147  1.1  jmmv     ATF_REQUIRE_EQ(2, suite.test_programs().size());
    148  1.1  jmmv 
    149  1.1  jmmv     ATF_REQUIRE_EQ("atf", suite.test_programs()[0]->interface_name());
    150  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("1st"), suite.test_programs()[0]->relative_path());
    151  1.1  jmmv     ATF_REQUIRE_EQ("first", suite.test_programs()[0]->test_suite_name());
    152  1.1  jmmv     const engine::metadata md1 = engine::metadata_builder()
    153  1.1  jmmv         .add_allowed_architecture("amd64")
    154  1.1  jmmv         .add_allowed_architecture("i386")
    155  1.1  jmmv         .set_timeout(datetime::delta(15, 0))
    156  1.1  jmmv         .build();
    157  1.1  jmmv     ATF_REQUIRE_EQ(md1, suite.test_programs()[0]->get_metadata());
    158  1.1  jmmv 
    159  1.1  jmmv     ATF_REQUIRE_EQ("plain", suite.test_programs()[1]->interface_name());
    160  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("2nd"), suite.test_programs()[1]->relative_path());
    161  1.1  jmmv     ATF_REQUIRE_EQ("second", suite.test_programs()[1]->test_suite_name());
    162  1.1  jmmv     const engine::metadata md2 = engine::metadata_builder()
    163  1.1  jmmv         .add_required_file(fs::path("foo"))
    164  1.1  jmmv         .add_required_file(fs::path("/bar/baz"))
    165  1.1  jmmv         .set_required_user("root")
    166  1.1  jmmv         .build();
    167  1.1  jmmv     ATF_REQUIRE_EQ(md2, suite.test_programs()[1]->get_metadata());
    168  1.1  jmmv }
    169  1.1  jmmv 
    170  1.1  jmmv 
    171  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__current_directory);
    172  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__current_directory)
    173  1.1  jmmv {
    174  1.1  jmmv     atf::utils::create_file(
    175  1.1  jmmv         "config",
    176  1.1  jmmv         "syntax(2)\n"
    177  1.1  jmmv         "atf_test_program{name='one', test_suite='first'}\n"
    178  1.1  jmmv         "include('config2')\n");
    179  1.1  jmmv 
    180  1.1  jmmv     atf::utils::create_file(
    181  1.1  jmmv         "config2",
    182  1.1  jmmv         "syntax(2)\n"
    183  1.1  jmmv         "test_suite('second')\n"
    184  1.1  jmmv         "atf_test_program{name='two'}\n");
    185  1.1  jmmv 
    186  1.1  jmmv     atf::utils::create_file("one", "");
    187  1.1  jmmv     atf::utils::create_file("two", "");
    188  1.1  jmmv 
    189  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
    190  1.1  jmmv         fs::path("config"), none);
    191  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.source_root());
    192  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("."), suite.build_root());
    193  1.1  jmmv     ATF_REQUIRE_EQ(2, suite.test_programs().size());
    194  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
    195  1.1  jmmv     ATF_REQUIRE_EQ("first", suite.test_programs()[0]->test_suite_name());
    196  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("two"),
    197  1.1  jmmv                    suite.test_programs()[1]->relative_path());
    198  1.1  jmmv     ATF_REQUIRE_EQ("second", suite.test_programs()[1]->test_suite_name());
    199  1.1  jmmv }
    200  1.1  jmmv 
    201  1.1  jmmv 
    202  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__other_directory);
    203  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__other_directory)
    204  1.1  jmmv {
    205  1.1  jmmv     fs::mkdir(fs::path("root"), 0755);
    206  1.1  jmmv     atf::utils::create_file(
    207  1.1  jmmv         "root/config",
    208  1.1  jmmv         "syntax(2)\n"
    209  1.1  jmmv         "test_suite('abc')\n"
    210  1.1  jmmv         "atf_test_program{name='one'}\n"
    211  1.1  jmmv         "include('dir/config')\n");
    212  1.1  jmmv 
    213  1.1  jmmv     fs::mkdir(fs::path("root/dir"), 0755);
    214  1.1  jmmv     atf::utils::create_file(
    215  1.1  jmmv         "root/dir/config",
    216  1.1  jmmv         "syntax(2)\n"
    217  1.1  jmmv         "test_suite('foo')\n"
    218  1.1  jmmv         "atf_test_program{name='two', test_suite='def'}\n"
    219  1.1  jmmv         "atf_test_program{name='three'}\n");
    220  1.1  jmmv 
    221  1.1  jmmv     atf::utils::create_file("root/one", "");
    222  1.1  jmmv     atf::utils::create_file("root/dir/two", "");
    223  1.1  jmmv     atf::utils::create_file("root/dir/three", "");
    224  1.1  jmmv 
    225  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
    226  1.1  jmmv         fs::path("root/config"), none);
    227  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("root"), suite.source_root());
    228  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("root"), suite.build_root());
    229  1.1  jmmv     ATF_REQUIRE_EQ(3, suite.test_programs().size());
    230  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
    231  1.1  jmmv     ATF_REQUIRE_EQ("abc", suite.test_programs()[0]->test_suite_name());
    232  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/two"),
    233  1.1  jmmv                    suite.test_programs()[1]->relative_path());
    234  1.1  jmmv     ATF_REQUIRE_EQ("def", suite.test_programs()[1]->test_suite_name());
    235  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/three"),
    236  1.1  jmmv                    suite.test_programs()[2]->relative_path());
    237  1.1  jmmv     ATF_REQUIRE_EQ("foo", suite.test_programs()[2]->test_suite_name());
    238  1.1  jmmv }
    239  1.1  jmmv 
    240  1.1  jmmv 
    241  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__build_directory);
    242  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__build_directory)
    243  1.1  jmmv {
    244  1.1  jmmv     fs::mkdir(fs::path("srcdir"), 0755);
    245  1.1  jmmv     atf::utils::create_file(
    246  1.1  jmmv         "srcdir/config",
    247  1.1  jmmv         "syntax(2)\n"
    248  1.1  jmmv         "test_suite('abc')\n"
    249  1.1  jmmv         "atf_test_program{name='one'}\n"
    250  1.1  jmmv         "include('dir/config')\n");
    251  1.1  jmmv 
    252  1.1  jmmv     fs::mkdir(fs::path("srcdir/dir"), 0755);
    253  1.1  jmmv     atf::utils::create_file(
    254  1.1  jmmv         "srcdir/dir/config",
    255  1.1  jmmv         "syntax(2)\n"
    256  1.1  jmmv         "test_suite('foo')\n"
    257  1.1  jmmv         "atf_test_program{name='two', test_suite='def'}\n"
    258  1.1  jmmv         "atf_test_program{name='three'}\n");
    259  1.1  jmmv 
    260  1.1  jmmv     fs::mkdir(fs::path("builddir"), 0755);
    261  1.1  jmmv     atf::utils::create_file("builddir/one", "");
    262  1.1  jmmv     fs::mkdir(fs::path("builddir/dir"), 0755);
    263  1.1  jmmv     atf::utils::create_file("builddir/dir/two", "");
    264  1.1  jmmv     atf::utils::create_file("builddir/dir/three", "");
    265  1.1  jmmv 
    266  1.1  jmmv     const engine::kyuafile suite = engine::kyuafile::load(
    267  1.1  jmmv         fs::path("srcdir/config"), utils::make_optional(fs::path("builddir")));
    268  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("srcdir"), suite.source_root());
    269  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("builddir"), suite.build_root());
    270  1.1  jmmv     ATF_REQUIRE_EQ(3, suite.test_programs().size());
    271  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("builddir/one").to_absolute(),
    272  1.1  jmmv                    suite.test_programs()[0]->absolute_path());
    273  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("one"), suite.test_programs()[0]->relative_path());
    274  1.1  jmmv     ATF_REQUIRE_EQ("abc", suite.test_programs()[0]->test_suite_name());
    275  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("builddir/dir/two").to_absolute(),
    276  1.1  jmmv                    suite.test_programs()[1]->absolute_path());
    277  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/two"),
    278  1.1  jmmv                    suite.test_programs()[1]->relative_path());
    279  1.1  jmmv     ATF_REQUIRE_EQ("def", suite.test_programs()[1]->test_suite_name());
    280  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("builddir/dir/three").to_absolute(),
    281  1.1  jmmv                    suite.test_programs()[2]->absolute_path());
    282  1.1  jmmv     ATF_REQUIRE_EQ(fs::path("dir/three"),
    283  1.1  jmmv                    suite.test_programs()[2]->relative_path());
    284  1.1  jmmv     ATF_REQUIRE_EQ("foo", suite.test_programs()[2]->test_suite_name());
    285  1.1  jmmv }
    286  1.1  jmmv 
    287  1.1  jmmv 
    288  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__test_program_not_basename);
    289  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__test_program_not_basename)
    290  1.1  jmmv {
    291  1.1  jmmv     atf::utils::create_file(
    292  1.1  jmmv         "config",
    293  1.1  jmmv         "syntax(2)\n"
    294  1.1  jmmv         "test_suite('abc')\n"
    295  1.1  jmmv         "atf_test_program{name='one'}\n"
    296  1.1  jmmv         "atf_test_program{name='./ls'}\n");
    297  1.1  jmmv 
    298  1.1  jmmv     atf::utils::create_file("one", "");
    299  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "./ls.*path components",
    300  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    301  1.1  jmmv }
    302  1.1  jmmv 
    303  1.1  jmmv 
    304  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__lua_error);
    305  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__lua_error)
    306  1.1  jmmv {
    307  1.1  jmmv     atf::utils::create_file("config", "this syntax is invalid\n");
    308  1.1  jmmv 
    309  1.1  jmmv     ATF_REQUIRE_THROW(engine::load_error, engine::kyuafile::load(
    310  1.1  jmmv                           fs::path("config"), none));
    311  1.1  jmmv }
    312  1.1  jmmv 
    313  1.1  jmmv 
    314  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__not_called);
    315  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__not_called)
    316  1.1  jmmv {
    317  1.1  jmmv     atf::utils::create_file("config", "");
    318  1.1  jmmv 
    319  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "syntax.* never called",
    320  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    321  1.1  jmmv }
    322  1.1  jmmv 
    323  1.1  jmmv 
    324  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__deprecated_format);
    325  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__deprecated_format)
    326  1.1  jmmv {
    327  1.1  jmmv     atf::utils::create_file("config", "syntax('kyuafile', 1)\n");
    328  1.1  jmmv     (void)engine::kyuafile::load(fs::path("config"), none);
    329  1.1  jmmv 
    330  1.1  jmmv     atf::utils::create_file("config", "syntax('foo', 1)\n");
    331  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "must be 'kyuafile'",
    332  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    333  1.1  jmmv 
    334  1.1  jmmv     atf::utils::create_file("config", "syntax('config', 2)\n");
    335  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "only takes one argument",
    336  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    337  1.1  jmmv }
    338  1.1  jmmv 
    339  1.1  jmmv 
    340  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__twice);
    341  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__twice)
    342  1.1  jmmv {
    343  1.1  jmmv     atf::utils::create_file(
    344  1.1  jmmv         "config",
    345  1.1  jmmv         "syntax(2)\n"
    346  1.1  jmmv         "syntax(2)\n");
    347  1.1  jmmv 
    348  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "Can only call syntax.* once",
    349  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    350  1.1  jmmv }
    351  1.1  jmmv 
    352  1.1  jmmv 
    353  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__syntax__bad_version);
    354  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__syntax__bad_version)
    355  1.1  jmmv {
    356  1.1  jmmv     atf::utils::create_file("config", "syntax(12)\n");
    357  1.1  jmmv 
    358  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "Unsupported file version 12",
    359  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    360  1.1  jmmv }
    361  1.1  jmmv 
    362  1.1  jmmv 
    363  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__test_suite__twice);
    364  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__test_suite__twice)
    365  1.1  jmmv {
    366  1.1  jmmv     atf::utils::create_file(
    367  1.1  jmmv         "config",
    368  1.1  jmmv         "syntax(2)\n"
    369  1.1  jmmv         "test_suite('foo')\n"
    370  1.1  jmmv         "test_suite('bar')\n");
    371  1.1  jmmv 
    372  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "Can only call test_suite.* once",
    373  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    374  1.1  jmmv }
    375  1.1  jmmv 
    376  1.1  jmmv 
    377  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__missing_file);
    378  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__missing_file)
    379  1.1  jmmv {
    380  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "Load of 'missing' failed",
    381  1.1  jmmv                          engine::kyuafile::load(fs::path("missing"), none));
    382  1.1  jmmv }
    383  1.1  jmmv 
    384  1.1  jmmv 
    385  1.1  jmmv ATF_TEST_CASE_WITHOUT_HEAD(kyuafile__load__missing_test_program);
    386  1.1  jmmv ATF_TEST_CASE_BODY(kyuafile__load__missing_test_program)
    387  1.1  jmmv {
    388  1.1  jmmv     atf::utils::create_file(
    389  1.1  jmmv         "config",
    390  1.1  jmmv         "syntax(2)\n"
    391  1.1  jmmv         "atf_test_program{name='one', test_suite='first'}\n"
    392  1.1  jmmv         "atf_test_program{name='two', test_suite='first'}\n");
    393  1.1  jmmv 
    394  1.1  jmmv     atf::utils::create_file("one", "");
    395  1.1  jmmv 
    396  1.1  jmmv     ATF_REQUIRE_THROW_RE(engine::load_error, "Non-existent.*'two'",
    397  1.1  jmmv                          engine::kyuafile::load(fs::path("config"), none));
    398  1.1  jmmv }
    399  1.1  jmmv 
    400  1.1  jmmv 
    401  1.1  jmmv ATF_INIT_TEST_CASES(tcs)
    402  1.1  jmmv {
    403  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__empty);
    404  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__some_programs);
    405  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__metadata);
    406  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__current_directory);
    407  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__other_directory);
    408  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__build_directory);
    409  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__test_program_not_basename);
    410  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__lua_error);
    411  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__not_called);
    412  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__deprecated_format);
    413  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__twice);
    414  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__syntax__bad_version);
    415  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__test_suite__twice);
    416  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__missing_file);
    417  1.1  jmmv     ATF_ADD_TEST_CASE(tcs, kyuafile__load__missing_test_program);
    418  1.1  jmmv }
    419