108334c51SBrooks Davis // Copyright 2011 The Kyua Authors.
208334c51SBrooks Davis // All rights reserved.
308334c51SBrooks Davis //
408334c51SBrooks Davis // Redistribution and use in source and binary forms, with or without
508334c51SBrooks Davis // modification, are permitted provided that the following conditions are
608334c51SBrooks Davis // met:
708334c51SBrooks Davis //
808334c51SBrooks Davis // * Redistributions of source code must retain the above copyright
908334c51SBrooks Davis // notice, this list of conditions and the following disclaimer.
1008334c51SBrooks Davis // * Redistributions in binary form must reproduce the above copyright
1108334c51SBrooks Davis // notice, this list of conditions and the following disclaimer in the
1208334c51SBrooks Davis // documentation and/or other materials provided with the distribution.
1308334c51SBrooks Davis // * Neither the name of Google Inc. nor the names of its contributors
1408334c51SBrooks Davis // may be used to endorse or promote products derived from this software
1508334c51SBrooks Davis // without specific prior written permission.
1608334c51SBrooks Davis //
1708334c51SBrooks Davis // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1808334c51SBrooks Davis // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1908334c51SBrooks Davis // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2008334c51SBrooks Davis // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2108334c51SBrooks Davis // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2208334c51SBrooks Davis // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2308334c51SBrooks Davis // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2408334c51SBrooks Davis // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2508334c51SBrooks Davis // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2608334c51SBrooks Davis // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2708334c51SBrooks Davis // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2808334c51SBrooks Davis
2908334c51SBrooks Davis #include "utils/fs/lua_module.hpp"
3008334c51SBrooks Davis
3108334c51SBrooks Davis #include <atf-c++.hpp>
3208334c51SBrooks Davis #include <lutok/operations.hpp>
3308334c51SBrooks Davis #include <lutok/state.hpp>
3408334c51SBrooks Davis #include <lutok/test_utils.hpp>
3508334c51SBrooks Davis
3608334c51SBrooks Davis #include "utils/format/macros.hpp"
3708334c51SBrooks Davis #include "utils/fs/operations.hpp"
3808334c51SBrooks Davis #include "utils/fs/path.hpp"
3908334c51SBrooks Davis
4008334c51SBrooks Davis namespace fs = utils::fs;
4108334c51SBrooks Davis
4208334c51SBrooks Davis
4308334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(open_fs);
ATF_TEST_CASE_BODY(open_fs)4408334c51SBrooks Davis ATF_TEST_CASE_BODY(open_fs)
4508334c51SBrooks Davis {
4608334c51SBrooks Davis lutok::state state;
4708334c51SBrooks Davis stack_balance_checker checker(state);
4808334c51SBrooks Davis fs::open_fs(state);
4908334c51SBrooks Davis lutok::do_string(state, "return fs.basename", 0, 1, 0);
5008334c51SBrooks Davis ATF_REQUIRE(state.is_function(-1));
5108334c51SBrooks Davis lutok::do_string(state, "return fs.dirname", 0, 1, 0);
5208334c51SBrooks Davis ATF_REQUIRE(state.is_function(-1));
5308334c51SBrooks Davis lutok::do_string(state, "return fs.join", 0, 1, 0);
5408334c51SBrooks Davis ATF_REQUIRE(state.is_function(-1));
5508334c51SBrooks Davis state.pop(3);
5608334c51SBrooks Davis }
5708334c51SBrooks Davis
5808334c51SBrooks Davis
5908334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(basename__ok);
ATF_TEST_CASE_BODY(basename__ok)6008334c51SBrooks Davis ATF_TEST_CASE_BODY(basename__ok)
6108334c51SBrooks Davis {
6208334c51SBrooks Davis lutok::state state;
6308334c51SBrooks Davis fs::open_fs(state);
6408334c51SBrooks Davis
6508334c51SBrooks Davis lutok::do_string(state, "return fs.basename('/my/test//file_foobar')",
6608334c51SBrooks Davis 0, 1, 0);
6708334c51SBrooks Davis ATF_REQUIRE_EQ("file_foobar", state.to_string(-1));
6808334c51SBrooks Davis state.pop(1);
6908334c51SBrooks Davis }
7008334c51SBrooks Davis
7108334c51SBrooks Davis
7208334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(basename__fail);
ATF_TEST_CASE_BODY(basename__fail)7308334c51SBrooks Davis ATF_TEST_CASE_BODY(basename__fail)
7408334c51SBrooks Davis {
7508334c51SBrooks Davis lutok::state state;
7608334c51SBrooks Davis fs::open_fs(state);
7708334c51SBrooks Davis
7808334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
7908334c51SBrooks Davis lutok::do_string(state, "return fs.basename({})",
8008334c51SBrooks Davis 0, 1, 0));
8108334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
8208334c51SBrooks Davis lutok::do_string(state, "return fs.basename('')",
8308334c51SBrooks Davis 0, 1, 0));
8408334c51SBrooks Davis }
8508334c51SBrooks Davis
8608334c51SBrooks Davis
8708334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(dirname__ok);
ATF_TEST_CASE_BODY(dirname__ok)8808334c51SBrooks Davis ATF_TEST_CASE_BODY(dirname__ok)
8908334c51SBrooks Davis {
9008334c51SBrooks Davis lutok::state state;
9108334c51SBrooks Davis fs::open_fs(state);
9208334c51SBrooks Davis
9308334c51SBrooks Davis lutok::do_string(state, "return fs.dirname('/my/test//file_foobar')",
9408334c51SBrooks Davis 0, 1, 0);
9508334c51SBrooks Davis ATF_REQUIRE_EQ("/my/test", state.to_string(-1));
9608334c51SBrooks Davis state.pop(1);
9708334c51SBrooks Davis }
9808334c51SBrooks Davis
9908334c51SBrooks Davis
10008334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(dirname__fail);
ATF_TEST_CASE_BODY(dirname__fail)10108334c51SBrooks Davis ATF_TEST_CASE_BODY(dirname__fail)
10208334c51SBrooks Davis {
10308334c51SBrooks Davis lutok::state state;
10408334c51SBrooks Davis fs::open_fs(state);
10508334c51SBrooks Davis
10608334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
10708334c51SBrooks Davis lutok::do_string(state, "return fs.dirname({})",
10808334c51SBrooks Davis 0, 1, 0));
10908334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
11008334c51SBrooks Davis lutok::do_string(state, "return fs.dirname('')",
11108334c51SBrooks Davis 0, 1, 0));
11208334c51SBrooks Davis }
11308334c51SBrooks Davis
11408334c51SBrooks Davis
11508334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(exists__ok);
ATF_TEST_CASE_BODY(exists__ok)11608334c51SBrooks Davis ATF_TEST_CASE_BODY(exists__ok)
11708334c51SBrooks Davis {
11808334c51SBrooks Davis lutok::state state;
11908334c51SBrooks Davis fs::open_fs(state);
12008334c51SBrooks Davis
12108334c51SBrooks Davis atf::utils::create_file("foo", "");
12208334c51SBrooks Davis
12308334c51SBrooks Davis lutok::do_string(state, "return fs.exists('foo')", 0, 1, 0);
12408334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
12508334c51SBrooks Davis state.pop(1);
12608334c51SBrooks Davis
12708334c51SBrooks Davis lutok::do_string(state, "return fs.exists('bar')", 0, 1, 0);
12808334c51SBrooks Davis ATF_REQUIRE(!state.to_boolean(-1));
12908334c51SBrooks Davis state.pop(1);
13008334c51SBrooks Davis
13108334c51SBrooks Davis lutok::do_string(state,
13208334c51SBrooks Davis F("return fs.exists('%s')") % fs::current_path(), 0, 1, 0);
13308334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
13408334c51SBrooks Davis state.pop(1);
13508334c51SBrooks Davis }
13608334c51SBrooks Davis
13708334c51SBrooks Davis
13808334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(exists__fail);
ATF_TEST_CASE_BODY(exists__fail)13908334c51SBrooks Davis ATF_TEST_CASE_BODY(exists__fail)
14008334c51SBrooks Davis {
14108334c51SBrooks Davis lutok::state state;
14208334c51SBrooks Davis fs::open_fs(state);
14308334c51SBrooks Davis
14408334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
14508334c51SBrooks Davis lutok::do_string(state, "return fs.exists({})",
14608334c51SBrooks Davis 0, 1, 0));
14708334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
14808334c51SBrooks Davis lutok::do_string(state, "return fs.exists('')",
14908334c51SBrooks Davis 0, 1, 0));
15008334c51SBrooks Davis }
15108334c51SBrooks Davis
15208334c51SBrooks Davis
15308334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(exists__custom_start_dir);
ATF_TEST_CASE_BODY(exists__custom_start_dir)15408334c51SBrooks Davis ATF_TEST_CASE_BODY(exists__custom_start_dir)
15508334c51SBrooks Davis {
15608334c51SBrooks Davis lutok::state state;
15708334c51SBrooks Davis fs::open_fs(state, fs::path("subdir"));
15808334c51SBrooks Davis
15908334c51SBrooks Davis fs::mkdir(fs::path("subdir"), 0755);
16008334c51SBrooks Davis atf::utils::create_file("subdir/foo", "");
16108334c51SBrooks Davis atf::utils::create_file("bar", "");
16208334c51SBrooks Davis
16308334c51SBrooks Davis lutok::do_string(state, "return fs.exists('foo')", 0, 1, 0);
16408334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
16508334c51SBrooks Davis state.pop(1);
16608334c51SBrooks Davis
16708334c51SBrooks Davis lutok::do_string(state, "return fs.exists('subdir/foo')", 0, 1, 0);
16808334c51SBrooks Davis ATF_REQUIRE(!state.to_boolean(-1));
16908334c51SBrooks Davis state.pop(1);
17008334c51SBrooks Davis
17108334c51SBrooks Davis lutok::do_string(state, "return fs.exists('bar')", 0, 1, 0);
17208334c51SBrooks Davis ATF_REQUIRE(!state.to_boolean(-1));
17308334c51SBrooks Davis state.pop(1);
17408334c51SBrooks Davis
17508334c51SBrooks Davis lutok::do_string(state, "return fs.exists('../bar')", 0, 1, 0);
17608334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
17708334c51SBrooks Davis state.pop(1);
17808334c51SBrooks Davis
17908334c51SBrooks Davis lutok::do_string(state,
18008334c51SBrooks Davis F("return fs.exists('%s')") % (fs::current_path() / "bar"),
18108334c51SBrooks Davis 0, 1, 0);
18208334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
18308334c51SBrooks Davis state.pop(1);
18408334c51SBrooks Davis }
18508334c51SBrooks Davis
18608334c51SBrooks Davis
18708334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(files__none);
ATF_TEST_CASE_BODY(files__none)18808334c51SBrooks Davis ATF_TEST_CASE_BODY(files__none)
18908334c51SBrooks Davis {
19008334c51SBrooks Davis lutok::state state;
19108334c51SBrooks Davis state.open_table();
19208334c51SBrooks Davis fs::open_fs(state);
19308334c51SBrooks Davis
19408334c51SBrooks Davis fs::mkdir(fs::path("root"), 0755);
19508334c51SBrooks Davis
19608334c51SBrooks Davis lutok::do_string(state,
19708334c51SBrooks Davis "names = {}\n"
19808334c51SBrooks Davis "for file in fs.files('root') do\n"
19908334c51SBrooks Davis " table.insert(names, file)\n"
20008334c51SBrooks Davis "end\n"
20108334c51SBrooks Davis "table.sort(names)\n"
20208334c51SBrooks Davis "return table.concat(names, ' ')",
20308334c51SBrooks Davis 0, 1, 0);
20408334c51SBrooks Davis ATF_REQUIRE_EQ(". ..", state.to_string(-1));
20508334c51SBrooks Davis state.pop(1);
20608334c51SBrooks Davis }
20708334c51SBrooks Davis
20808334c51SBrooks Davis
20908334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(files__some);
ATF_TEST_CASE_BODY(files__some)21008334c51SBrooks Davis ATF_TEST_CASE_BODY(files__some)
21108334c51SBrooks Davis {
21208334c51SBrooks Davis lutok::state state;
21308334c51SBrooks Davis state.open_table();
21408334c51SBrooks Davis fs::open_fs(state);
21508334c51SBrooks Davis
21608334c51SBrooks Davis fs::mkdir(fs::path("root"), 0755);
21708334c51SBrooks Davis atf::utils::create_file("root/file1", "");
21808334c51SBrooks Davis atf::utils::create_file("root/file2", "");
21908334c51SBrooks Davis
22008334c51SBrooks Davis lutok::do_string(state,
22108334c51SBrooks Davis "names = {}\n"
22208334c51SBrooks Davis "for file in fs.files('root') do\n"
22308334c51SBrooks Davis " table.insert(names, file)\n"
22408334c51SBrooks Davis "end\n"
22508334c51SBrooks Davis "table.sort(names)\n"
22608334c51SBrooks Davis "return table.concat(names, ' ')",
22708334c51SBrooks Davis 0, 1, 0);
22808334c51SBrooks Davis ATF_REQUIRE_EQ(". .. file1 file2", state.to_string(-1));
22908334c51SBrooks Davis state.pop(1);
23008334c51SBrooks Davis }
23108334c51SBrooks Davis
23208334c51SBrooks Davis
23308334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(files__some_with_custom_start_dir);
ATF_TEST_CASE_BODY(files__some_with_custom_start_dir)23408334c51SBrooks Davis ATF_TEST_CASE_BODY(files__some_with_custom_start_dir)
23508334c51SBrooks Davis {
23608334c51SBrooks Davis lutok::state state;
23708334c51SBrooks Davis state.open_table();
23808334c51SBrooks Davis fs::open_fs(state, fs::current_path() / "root");
23908334c51SBrooks Davis
24008334c51SBrooks Davis fs::mkdir(fs::path("root"), 0755);
24108334c51SBrooks Davis atf::utils::create_file("root/file1", "");
24208334c51SBrooks Davis atf::utils::create_file("root/file2", "");
24308334c51SBrooks Davis atf::utils::create_file("file3", "");
24408334c51SBrooks Davis
24508334c51SBrooks Davis lutok::do_string(state,
24608334c51SBrooks Davis "names = {}\n"
24708334c51SBrooks Davis "for file in fs.files('.') do\n"
24808334c51SBrooks Davis " table.insert(names, file)\n"
24908334c51SBrooks Davis "end\n"
25008334c51SBrooks Davis "table.sort(names)\n"
25108334c51SBrooks Davis "return table.concat(names, ' ')",
25208334c51SBrooks Davis 0, 1, 0);
25308334c51SBrooks Davis ATF_REQUIRE_EQ(". .. file1 file2", state.to_string(-1));
25408334c51SBrooks Davis state.pop(1);
25508334c51SBrooks Davis }
25608334c51SBrooks Davis
25708334c51SBrooks Davis
25808334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(files__fail_arg);
ATF_TEST_CASE_BODY(files__fail_arg)25908334c51SBrooks Davis ATF_TEST_CASE_BODY(files__fail_arg)
26008334c51SBrooks Davis {
26108334c51SBrooks Davis lutok::state state;
26208334c51SBrooks Davis fs::open_fs(state);
26308334c51SBrooks Davis
26408334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string parameter",
26508334c51SBrooks Davis lutok::do_string(state, "fs.files({})", 0, 0, 0));
26608334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
26708334c51SBrooks Davis lutok::do_string(state, "fs.files('')", 0, 0, 0));
26808334c51SBrooks Davis }
26908334c51SBrooks Davis
27008334c51SBrooks Davis
27108334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(files__fail_opendir);
ATF_TEST_CASE_BODY(files__fail_opendir)27208334c51SBrooks Davis ATF_TEST_CASE_BODY(files__fail_opendir)
27308334c51SBrooks Davis {
27408334c51SBrooks Davis lutok::state state;
27508334c51SBrooks Davis fs::open_fs(state);
27608334c51SBrooks Davis
27708334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Failed to open directory",
27808334c51SBrooks Davis lutok::do_string(state, "fs.files('root')", 0, 0, 0));
27908334c51SBrooks Davis }
28008334c51SBrooks Davis
28108334c51SBrooks Davis
28208334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(is_absolute__ok);
ATF_TEST_CASE_BODY(is_absolute__ok)28308334c51SBrooks Davis ATF_TEST_CASE_BODY(is_absolute__ok)
28408334c51SBrooks Davis {
28508334c51SBrooks Davis lutok::state state;
28608334c51SBrooks Davis fs::open_fs(state);
28708334c51SBrooks Davis
28808334c51SBrooks Davis lutok::do_string(state, "return fs.is_absolute('my/test//file_foobar')",
28908334c51SBrooks Davis 0, 1, 0);
29008334c51SBrooks Davis ATF_REQUIRE(!state.to_boolean(-1));
29108334c51SBrooks Davis lutok::do_string(state, "return fs.is_absolute('/my/test//file_foobar')",
29208334c51SBrooks Davis 0, 1, 0);
29308334c51SBrooks Davis ATF_REQUIRE(state.to_boolean(-1));
29408334c51SBrooks Davis state.pop(2);
29508334c51SBrooks Davis }
29608334c51SBrooks Davis
29708334c51SBrooks Davis
29808334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(is_absolute__fail);
ATF_TEST_CASE_BODY(is_absolute__fail)29908334c51SBrooks Davis ATF_TEST_CASE_BODY(is_absolute__fail)
30008334c51SBrooks Davis {
30108334c51SBrooks Davis lutok::state state;
30208334c51SBrooks Davis fs::open_fs(state);
30308334c51SBrooks Davis
30408334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
30508334c51SBrooks Davis lutok::do_string(state, "return fs.is_absolute({})",
30608334c51SBrooks Davis 0, 1, 0));
30708334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
30808334c51SBrooks Davis lutok::do_string(state, "return fs.is_absolute('')",
30908334c51SBrooks Davis 0, 1, 0));
31008334c51SBrooks Davis }
31108334c51SBrooks Davis
31208334c51SBrooks Davis
31308334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(join__ok);
ATF_TEST_CASE_BODY(join__ok)31408334c51SBrooks Davis ATF_TEST_CASE_BODY(join__ok)
31508334c51SBrooks Davis {
31608334c51SBrooks Davis lutok::state state;
31708334c51SBrooks Davis fs::open_fs(state);
31808334c51SBrooks Davis
31908334c51SBrooks Davis lutok::do_string(state, "return fs.join('/a/b///', 'c/d')", 0, 1, 0);
32008334c51SBrooks Davis ATF_REQUIRE_EQ("/a/b/c/d", state.to_string(-1));
32108334c51SBrooks Davis state.pop(1);
32208334c51SBrooks Davis }
32308334c51SBrooks Davis
32408334c51SBrooks Davis
32508334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(join__fail);
ATF_TEST_CASE_BODY(join__fail)32608334c51SBrooks Davis ATF_TEST_CASE_BODY(join__fail)
32708334c51SBrooks Davis {
32808334c51SBrooks Davis lutok::state state;
32908334c51SBrooks Davis fs::open_fs(state);
33008334c51SBrooks Davis
33108334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
33208334c51SBrooks Davis lutok::do_string(state, "return fs.join({}, 'a')",
33308334c51SBrooks Davis 0, 1, 0));
33408334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Need a string",
33508334c51SBrooks Davis lutok::do_string(state, "return fs.join('a', {})",
33608334c51SBrooks Davis 0, 1, 0));
33708334c51SBrooks Davis
33808334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
33908334c51SBrooks Davis lutok::do_string(state, "return fs.join('', 'a')",
34008334c51SBrooks Davis 0, 1, 0));
34108334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Invalid path",
34208334c51SBrooks Davis lutok::do_string(state, "return fs.join('a', '')",
34308334c51SBrooks Davis 0, 1, 0));
34408334c51SBrooks Davis
34508334c51SBrooks Davis ATF_REQUIRE_THROW_RE(lutok::error, "Cannot join.*'a/b'.*'/c'",
34608334c51SBrooks Davis lutok::do_string(state, "fs.join('a/b', '/c')",
34708334c51SBrooks Davis 0, 0, 0));
34808334c51SBrooks Davis }
34908334c51SBrooks Davis
35008334c51SBrooks Davis
ATF_INIT_TEST_CASES(tcs)35108334c51SBrooks Davis ATF_INIT_TEST_CASES(tcs)
35208334c51SBrooks Davis {
35308334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, open_fs);
35408334c51SBrooks Davis
35508334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, basename__ok);
35608334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, basename__fail);
35708334c51SBrooks Davis
35808334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, dirname__ok);
35908334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, dirname__fail);
36008334c51SBrooks Davis
36108334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, exists__ok);
36208334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, exists__fail);
36308334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, exists__custom_start_dir);
36408334c51SBrooks Davis
36508334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, files__none);
36608334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, files__some);
36708334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, files__some_with_custom_start_dir);
36808334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, files__fail_arg);
36908334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, files__fail_opendir);
37008334c51SBrooks Davis
37108334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, is_absolute__ok);
37208334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, is_absolute__fail);
37308334c51SBrooks Davis
37408334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, join__ok);
37508334c51SBrooks Davis ATF_ADD_TEST_CASE(tcs, join__fail);
37608334c51SBrooks Davis }
377