1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03 10 11 // <filesystem> 12 13 // bool is_empty(path const& p); 14 // bool is_empty(path const& p, std::error_code& ec); 15 16 #include "filesystem_include.h" 17 #include <type_traits> 18 #include <cassert> 19 20 #include "test_macros.h" 21 #include "rapid-cxx-test.h" 22 #include "filesystem_test_helper.h" 23 24 using namespace fs; 25 26 TEST_SUITE(is_empty_test_suite) 27 28 TEST_CASE(signature_test) 29 { 30 const path p; ((void)p); 31 std::error_code ec; ((void)ec); 32 ASSERT_NOT_NOEXCEPT(is_empty(p, ec)); 33 ASSERT_NOT_NOEXCEPT(is_empty(p)); 34 } 35 36 TEST_CASE(test_exist_not_found) 37 { 38 static_test_env static_env; 39 const path p = static_env.DNE; 40 std::error_code ec; 41 TEST_CHECK(is_empty(p, ec) == false); 42 TEST_CHECK(ec); 43 TEST_CHECK_THROW(filesystem_error, is_empty(p)); 44 } 45 46 TEST_CASE(test_is_empty_directory) 47 { 48 static_test_env static_env; 49 TEST_CHECK(!is_empty(static_env.Dir)); 50 TEST_CHECK(!is_empty(static_env.SymlinkToDir)); 51 } 52 53 TEST_CASE(test_is_empty_directory_dynamic) 54 { 55 scoped_test_env env; 56 TEST_CHECK(is_empty(env.test_root)); 57 env.create_file("foo", 42); 58 TEST_CHECK(!is_empty(env.test_root)); 59 } 60 61 TEST_CASE(test_is_empty_file) 62 { 63 static_test_env static_env; 64 TEST_CHECK(is_empty(static_env.EmptyFile)); 65 TEST_CHECK(!is_empty(static_env.NonEmptyFile)); 66 } 67 68 TEST_CASE(test_is_empty_fails) 69 { 70 scoped_test_env env; 71 const path dir = env.create_dir("dir"); 72 const path dir2 = env.create_dir("dir/dir2"); 73 permissions(dir, perms::none); 74 75 std::error_code ec; 76 TEST_CHECK(is_empty(dir2, ec) == false); 77 TEST_CHECK(ec); 78 79 TEST_CHECK_THROW(filesystem_error, is_empty(dir2)); 80 } 81 82 TEST_CASE(test_directory_access_denied) 83 { 84 scoped_test_env env; 85 const path dir = env.create_dir("dir"); 86 const path file1 = env.create_file("dir/file", 42); 87 permissions(dir, perms::none); 88 89 std::error_code ec = GetTestEC(); 90 TEST_CHECK(is_empty(dir, ec) == false); 91 TEST_CHECK(ec); 92 TEST_CHECK(ec != GetTestEC()); 93 94 TEST_CHECK_THROW(filesystem_error, is_empty(dir)); 95 } 96 97 98 #ifndef _WIN32 99 TEST_CASE(test_fifo_fails) 100 { 101 scoped_test_env env; 102 const path fifo = env.create_fifo("fifo"); 103 104 std::error_code ec = GetTestEC(); 105 TEST_CHECK(is_empty(fifo, ec) == false); 106 TEST_CHECK(ec); 107 TEST_CHECK(ec != GetTestEC()); 108 109 TEST_CHECK_THROW(filesystem_error, is_empty(fifo)); 110 } 111 #endif 112 113 TEST_SUITE_END() 114