Home | History | Annotate | Download | only in fs.op.is_empty
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // UNSUPPORTED: c++98, c++03
     11 
     12 // <experimental/filesystem>
     13 
     14 // bool is_empty(path const& p);
     15 // bool is_empty(path const& p, std::error_code& ec);
     16 
     17 #include <experimental/filesystem>
     18 #include <type_traits>
     19 #include <cassert>
     20 
     21 #include "test_macros.h"
     22 #include "rapid-cxx-test.hpp"
     23 #include "filesystem_test_helper.hpp"
     24 
     25 using namespace std::experimental::filesystem;
     26 
     27 TEST_SUITE(is_empty_test_suite)
     28 
     29 TEST_CASE(signature_test)
     30 {
     31     const path p; ((void)p);
     32     std::error_code ec; ((void)ec);
     33     ASSERT_NOT_NOEXCEPT(is_empty(p, ec));
     34     ASSERT_NOT_NOEXCEPT(is_empty(p));
     35 }
     36 
     37 TEST_CASE(test_exist_not_found)
     38 {
     39     const path p = StaticEnv::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     TEST_CHECK(!is_empty(StaticEnv::Dir));
     49     TEST_CHECK(!is_empty(StaticEnv::SymlinkToDir));
     50 }
     51 
     52 TEST_CASE(test_is_empty_directory_dynamic)
     53 {
     54     scoped_test_env env;
     55     TEST_CHECK(is_empty(env.test_root));
     56     env.create_file("foo", 42);
     57     TEST_CHECK(!is_empty(env.test_root));
     58 }
     59 
     60 TEST_CASE(test_is_empty_file)
     61 {
     62     TEST_CHECK(is_empty(StaticEnv::EmptyFile));
     63     TEST_CHECK(!is_empty(StaticEnv::NonEmptyFile));
     64 }
     65 
     66 TEST_CASE(test_is_empty_fails)
     67 {
     68     scoped_test_env env;
     69     const path dir = env.create_dir("dir");
     70     const path dir2 = env.create_dir("dir/dir2");
     71     permissions(dir, perms::none);
     72 
     73     std::error_code ec;
     74     TEST_CHECK(is_empty(dir2, ec) == false);
     75     TEST_CHECK(ec);
     76 
     77     TEST_CHECK_THROW(filesystem_error, is_empty(dir2));
     78 }
     79 
     80 TEST_CASE(test_directory_access_denied)
     81 {
     82     scoped_test_env env;
     83     const path dir = env.create_dir("dir");
     84     const path file1 = env.create_file("dir/file", 42);
     85     permissions(dir, perms::none);
     86 
     87     std::error_code ec = GetTestEC();
     88     TEST_CHECK(is_empty(dir, ec) == false);
     89     TEST_CHECK(ec);
     90     TEST_CHECK(ec != GetTestEC());
     91 
     92     TEST_CHECK_THROW(filesystem_error, is_empty(dir));
     93 }
     94 
     95 
     96 TEST_CASE(test_fifo_fails)
     97 {
     98     scoped_test_env env;
     99     const path fifo = env.create_fifo("fifo");
    100 
    101     std::error_code ec = GetTestEC();
    102     TEST_CHECK(is_empty(fifo, ec) == false);
    103     TEST_CHECK(ec);
    104     TEST_CHECK(ec != GetTestEC());
    105 
    106     TEST_CHECK_THROW(filesystem_error, is_empty(fifo));
    107 }
    108 
    109 TEST_SUITE_END()
    110