xref: /llvm-project/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.is_empty/is_empty.pass.cpp (revision 4f7fa06a666a2ff2107892c6a4737a82062e1feb)
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 // XFAIL: LIBCXX-WINDOWS-FIXME
12 
13 // <filesystem>
14 
15 // bool is_empty(path const& p);
16 // bool is_empty(path const& p, std::error_code& ec);
17 
18 #include "filesystem_include.h"
19 #include <type_traits>
20 #include <cassert>
21 
22 #include "test_macros.h"
23 #include "rapid-cxx-test.h"
24 #include "filesystem_test_helper.h"
25 
26 using namespace fs;
27 
28 TEST_SUITE(is_empty_test_suite)
29 
30 TEST_CASE(signature_test)
31 {
32     const path p; ((void)p);
33     std::error_code ec; ((void)ec);
34     ASSERT_NOT_NOEXCEPT(is_empty(p, ec));
35     ASSERT_NOT_NOEXCEPT(is_empty(p));
36 }
37 
38 TEST_CASE(test_exist_not_found)
39 {
40     static_test_env static_env;
41     const path p = static_env.DNE;
42     std::error_code ec;
43     TEST_CHECK(is_empty(p, ec) == false);
44     TEST_CHECK(ec);
45     TEST_CHECK_THROW(filesystem_error, is_empty(p));
46 }
47 
48 TEST_CASE(test_is_empty_directory)
49 {
50     static_test_env static_env;
51     TEST_CHECK(!is_empty(static_env.Dir));
52     TEST_CHECK(!is_empty(static_env.SymlinkToDir));
53 }
54 
55 TEST_CASE(test_is_empty_directory_dynamic)
56 {
57     scoped_test_env env;
58     TEST_CHECK(is_empty(env.test_root));
59     env.create_file("foo", 42);
60     TEST_CHECK(!is_empty(env.test_root));
61 }
62 
63 TEST_CASE(test_is_empty_file)
64 {
65     static_test_env static_env;
66     TEST_CHECK(is_empty(static_env.EmptyFile));
67     TEST_CHECK(!is_empty(static_env.NonEmptyFile));
68 }
69 
70 TEST_CASE(test_is_empty_fails)
71 {
72     scoped_test_env env;
73     const path dir = env.create_dir("dir");
74     const path dir2 = env.create_dir("dir/dir2");
75     permissions(dir, perms::none);
76 
77     std::error_code ec;
78     TEST_CHECK(is_empty(dir2, ec) == false);
79     TEST_CHECK(ec);
80 
81     TEST_CHECK_THROW(filesystem_error, is_empty(dir2));
82 }
83 
84 TEST_CASE(test_directory_access_denied)
85 {
86     scoped_test_env env;
87     const path dir = env.create_dir("dir");
88     const path file1 = env.create_file("dir/file", 42);
89     permissions(dir, perms::none);
90 
91     std::error_code ec = GetTestEC();
92     TEST_CHECK(is_empty(dir, ec) == false);
93     TEST_CHECK(ec);
94     TEST_CHECK(ec != GetTestEC());
95 
96     TEST_CHECK_THROW(filesystem_error, is_empty(dir));
97 }
98 
99 
100 #ifndef _WIN32
101 TEST_CASE(test_fifo_fails)
102 {
103     scoped_test_env env;
104     const path fifo = env.create_fifo("fifo");
105 
106     std::error_code ec = GetTestEC();
107     TEST_CHECK(is_empty(fifo, ec) == false);
108     TEST_CHECK(ec);
109     TEST_CHECK(ec != GetTestEC());
110 
111     TEST_CHECK_THROW(filesystem_error, is_empty(fifo));
112 }
113 #endif
114 
115 TEST_SUITE_END()
116