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