diff options
Diffstat (limited to 'libcxx/test/std')
4 files changed, 55 insertions, 41 deletions
diff --git a/libcxx/test/std/experimental/filesystem/class.rec.dir.itr/rec.dir.itr.members/increment.pass.cpp b/libcxx/test/std/experimental/filesystem/class.rec.dir.itr/rec.dir.itr.members/increment.pass.cpp index d2a5b8c18da..1699a414af1 100644 --- a/libcxx/test/std/experimental/filesystem/class.rec.dir.itr/rec.dir.itr.members/increment.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/class.rec.dir.itr/rec.dir.itr.members/increment.pass.cpp @@ -255,8 +255,8 @@ TEST_CASE(test_PR35078) // Change the permissions so we can no longer iterate permissions(permDeniedDir, - perms::remove_perms|perms::group_exec - |perms::owner_exec|perms::others_exec); + perms::group_exec|perms::owner_exec|perms::others_exec, + perm_options::remove); const std::error_code eacess_ec = std::make_error_code(std::errc::permission_denied); @@ -329,8 +329,8 @@ TEST_CASE(test_PR35078_with_symlink) // Change the permissions so we can no longer iterate permissions(permDeniedDir, - perms::remove_perms|perms::group_exec - |perms::owner_exec|perms::others_exec); + perms::group_exec|perms::owner_exec|perms::others_exec, + perm_options::remove); const std::error_code eacess_ec = std::make_error_code(std::errc::permission_denied); @@ -413,8 +413,8 @@ TEST_CASE(test_PR35078_with_symlink_file) // Change the permissions so we can no longer iterate permissions(permDeniedDir, - perms::remove_perms|perms::group_exec - |perms::owner_exec|perms::others_exec); + perms::group_exec|perms::owner_exec|perms::others_exec, + perm_options::remove); const std::error_code eacess_ec = std::make_error_code(std::errc::permission_denied); diff --git a/libcxx/test/std/experimental/filesystem/fs.enum/enum.perms.pass.cpp b/libcxx/test/std/experimental/filesystem/fs.enum/enum.perms.pass.cpp index bfc769f552c..7cd8f677943 100644 --- a/libcxx/test/std/experimental/filesystem/fs.enum/enum.perms.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/fs.enum/enum.perms.pass.cpp @@ -59,9 +59,6 @@ int main() { E::set_gid == ME(02000) && E::sticky_bit == ME(01000) && E::mask == ME(07777) && - E::unknown == ME(0xFFFF) && - E::add_perms == ME(0x10000) && - E::remove_perms == ME(0x20000) && - E::symlink_nofollow == ME(0x40000), + E::unknown == ME(0xFFFF), "Expected enumeration values do not match"); } diff --git a/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.create_directory/create_directory_with_attributes.pass.cpp b/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.create_directory/create_directory_with_attributes.pass.cpp index d0fff583a95..8ec22f1f913 100644 --- a/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.create_directory/create_directory_with_attributes.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.create_directory/create_directory_with_attributes.pass.cpp @@ -60,7 +60,7 @@ TEST_CASE(create_directory_one_level) { scoped_test_env env; // Remove setgid which mkdir would inherit - permissions(env.test_root, perms::remove_perms | perms::set_gid); + permissions(env.test_root, perms::set_gid, perm_options::remove); const path dir = env.make_env_path("dir1"); const path attr_dir = env.create_dir("dir2"); diff --git a/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.permissions/permissions.pass.cpp b/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.permissions/permissions.pass.cpp index 1082a62fad2..3783f5f34f8 100644 --- a/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.permissions/permissions.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.permissions/permissions.pass.cpp @@ -11,8 +11,11 @@ // <experimental/filesystem> -// void permissions(const path& p, perms prms); +// void permissions(const path& p, perms prms, +// perm_options opts = perm_options::replace); // void permissions(const path& p, perms prms, std::error_code& ec) noexcept; +// void permissions(const path& p, perms prms, perm_options opts, std::error_code); + #include "filesystem_include.hpp" @@ -30,17 +33,19 @@ TEST_SUITE(filesystem_permissions_test_suite) TEST_CASE(test_signatures) { const path p; ((void)p); - const perms opts{}; ((void)opts); + const perms pr{}; ((void)pr); + const perm_options opts{}; ((void)opts); std::error_code ec; ((void)ec); - ASSERT_NOT_NOEXCEPT(fs::permissions(p, opts)); - // Not noexcept because of narrow contract - LIBCPP_ONLY( - ASSERT_NOT_NOEXCEPT(fs::permissions(p, opts, ec))); + ASSERT_NOT_NOEXCEPT(fs::permissions(p, pr)); + ASSERT_NOT_NOEXCEPT(fs::permissions(p, pr, opts)); + ASSERT_NOEXCEPT(fs::permissions(p, pr, ec)); + ASSERT_NOT_NOEXCEPT(fs::permissions(p, pr, opts, ec)); } TEST_CASE(test_error_reporting) { - auto checkThrow = [](path const& f, fs::perms opts, const std::error_code& ec) + auto checkThrow = [](path const& f, fs::perms opts, + const std::error_code& ec) { #ifndef TEST_HAS_NO_EXCEPTIONS try { @@ -61,15 +66,17 @@ TEST_CASE(test_error_reporting) const path dne = env.make_env_path("dne"); const path dne_sym = env.create_symlink(dne, "dne_sym"); { // !exists - std::error_code ec; + std::error_code ec = GetTestEC(); fs::permissions(dne, fs::perms{}, ec); TEST_REQUIRE(ec); + TEST_CHECK(ec != GetTestEC()); TEST_CHECK(checkThrow(dne, fs::perms{}, ec)); } { - std::error_code ec; + std::error_code ec = GetTestEC(); fs::permissions(dne_sym, fs::perms{}, ec); TEST_REQUIRE(ec); + TEST_CHECK(ec != GetTestEC()); TEST_CHECK(checkThrow(dne_sym, fs::perms{}, ec)); } } @@ -81,42 +88,51 @@ TEST_CASE(basic_permissions_test) const path dir = env.create_dir("dir1"); const path file_for_sym = env.create_file("file2", 42); const path sym = env.create_symlink(file_for_sym, "sym"); - const perms AP = perms::add_perms; - const perms RP = perms::remove_perms; - const perms NF = perms::symlink_nofollow; + const perm_options AP = perm_options::add; + const perm_options RP = perm_options::remove; + const perm_options NF = perm_options::nofollow; struct TestCase { path p; perms set_perms; perms expected; + perm_options opts = perm_options::replace; } cases[] = { // test file {file, perms::none, perms::none}, {file, perms::owner_all, perms::owner_all}, - {file, perms::group_all | AP, perms::owner_all | perms::group_all}, - {file, perms::group_all | RP, perms::owner_all}, + {file, perms::group_all, perms::owner_all | perms::group_all, AP}, + {file, perms::group_all, perms::owner_all, RP}, // test directory {dir, perms::none, perms::none}, {dir, perms::owner_all, perms::owner_all}, - {dir, perms::group_all | AP, perms::owner_all | perms::group_all}, - {dir, perms::group_all | RP, perms::owner_all}, + {dir, perms::group_all, perms::owner_all | perms::group_all, AP}, + {dir, perms::group_all, perms::owner_all, RP}, // test symlink without symlink_nofollow {sym, perms::none, perms::none}, {sym, perms::owner_all, perms::owner_all}, - {sym, perms::group_all | AP, perms::owner_all | perms::group_all}, - {sym, perms::group_all | RP , perms::owner_all}, + {sym, perms::group_all, perms::owner_all | perms::group_all, AP}, + {sym, perms::group_all, perms::owner_all, RP}, // test non-symlink with symlink_nofollow. The last test on file/dir // will have set their permissions to perms::owner_all - {file, perms::group_all | AP | NF, perms::owner_all | perms::group_all}, - {dir, perms::group_all | AP | NF, perms::owner_all | perms::group_all} + {file, perms::group_all, perms::owner_all | perms::group_all, AP | NF}, + {dir, perms::group_all, perms::owner_all | perms::group_all, AP | NF} }; for (auto const& TC : cases) { TEST_CHECK(status(TC.p).permissions() != TC.expected); - // Set the error code to ensure it's cleared. - std::error_code ec = std::make_error_code(std::errc::bad_address); - permissions(TC.p, TC.set_perms, ec); - TEST_CHECK(!ec); - auto pp = status(TC.p).permissions(); - TEST_CHECK(pp == TC.expected); + { + std::error_code ec = GetTestEC(); + permissions(TC.p, TC.set_perms, TC.opts, ec); + TEST_CHECK(!ec); + auto pp = status(TC.p).permissions(); + TEST_CHECK(pp == TC.expected); + } + if (TC.opts == perm_options::replace) { + std::error_code ec = GetTestEC(); + permissions(TC.p, TC.set_perms, ec); + TEST_CHECK(!ec); + auto pp = status(TC.p).permissions(); + TEST_CHECK(pp == TC.expected); + } } } @@ -130,10 +146,11 @@ TEST_CASE(test_no_resolve_symlink_on_symlink) struct TestCase { perms set_perms; perms expected; // only expected on platform that support symlink perms. + perm_options opts = perm_options::replace; } cases[] = { {perms::owner_all, perms::owner_all}, - {perms::group_all | perms::add_perms, perms::owner_all | perms::group_all}, - {perms::owner_all | perms::remove_perms, perms::group_all}, + {perms::group_all, perms::owner_all | perms::group_all, perm_options::add}, + {perms::owner_all, perms::group_all, perm_options::remove}, }; for (auto const& TC : cases) { #if defined(__APPLE__) || defined(__FreeBSD__) @@ -148,8 +165,8 @@ TEST_CASE(test_no_resolve_symlink_on_symlink) const auto expected_link_perms = symlink_status(sym).permissions(); std::error_code expected_ec = std::make_error_code(std::errc::operation_not_supported); #endif - std::error_code ec = std::make_error_code(std::errc::bad_address); - permissions(sym, TC.set_perms | perms::symlink_nofollow, ec); + std::error_code ec = GetTestEC(); + permissions(sym, TC.set_perms, TC.opts | perm_options::nofollow, ec); TEST_CHECK(ec == expected_ec); TEST_CHECK(status(file).permissions() == file_perms); TEST_CHECK(symlink_status(sym).permissions() == expected_link_perms); |