16e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//===----------------------------------------------------------------------===// 26e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// 36e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// The LLVM Compiler Infrastructure 46e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// 56e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 66e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// Source Licenses. See LICENSE.TXT for details. 76e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// 86e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//===----------------------------------------------------------------------===// 96e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 106e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// UNSUPPORTED: c++98, c++03 116e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 126e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// <experimental/filesystem> 136e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 146e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// bool is_empty(path const& p); 15a4c272d82f58593ba96babf7bca7e3be7c993a03Eric Fiselier// bool is_empty(path const& p, std::error_code& ec); 166e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 176e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <experimental/filesystem> 186e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <type_traits> 196e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <cassert> 206e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 216e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "test_macros.h" 226e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "rapid-cxx-test.hpp" 236e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "filesystem_test_helper.hpp" 246e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 256e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselierusing namespace std::experimental::filesystem; 266e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 276e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE(is_empty_test_suite) 286e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 296e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(signature_test) 306e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 316e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path p; ((void)p); 326e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; ((void)ec); 33a4c272d82f58593ba96babf7bca7e3be7c993a03Eric Fiselier ASSERT_NOT_NOEXCEPT(is_empty(p, ec)); 346e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier ASSERT_NOT_NOEXCEPT(is_empty(p)); 356e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 366e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 376e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_exist_not_found) 386e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 396e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path p = StaticEnv::DNE; 406e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; 416e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_empty(p, ec) == false); 426e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(ec); 436e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK_THROW(filesystem_error, is_empty(p)); 446e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 456e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 466e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_is_empty_directory) 476e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 486e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!is_empty(StaticEnv::Dir)); 496e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!is_empty(StaticEnv::SymlinkToDir)); 506e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 516e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 526e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_is_empty_directory_dynamic) 536e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 546e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier scoped_test_env env; 556e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_empty(env.test_root)); 566e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier env.create_file("foo", 42); 576e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!is_empty(env.test_root)); 586e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 596e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 606e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_is_empty_file) 616e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 626e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_empty(StaticEnv::EmptyFile)); 636e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!is_empty(StaticEnv::NonEmptyFile)); 646e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 656e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 666e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_is_empty_fails) 676e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 686e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier scoped_test_env env; 696e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path dir = env.create_dir("dir"); 706e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path dir2 = env.create_dir("dir/dir2"); 716e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier permissions(dir, perms::none); 726e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 736e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; 746e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_empty(dir2, ec) == false); 756e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(ec); 766e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 776e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK_THROW(filesystem_error, is_empty(dir2)); 786e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 796e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 8025dc5bdb887e80a232f86e5b54b298427392e1c7Eric FiselierTEST_CASE(test_directory_access_denied) 8125dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier{ 8225dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier scoped_test_env env; 8325dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier const path dir = env.create_dir("dir"); 8425dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier const path file1 = env.create_file("dir/file", 42); 8525dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier permissions(dir, perms::none); 8625dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 8725dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier std::error_code ec = GetTestEC(); 8825dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(is_empty(dir, ec) == false); 8925dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(ec); 9025dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(ec != GetTestEC()); 9125dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 9225dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK_THROW(filesystem_error, is_empty(dir)); 9325dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier} 9425dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 9525dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 9625dc5bdb887e80a232f86e5b54b298427392e1c7Eric FiselierTEST_CASE(test_fifo_fails) 9725dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier{ 9825dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier scoped_test_env env; 9925dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier const path fifo = env.create_fifo("fifo"); 10025dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 10125dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier std::error_code ec = GetTestEC(); 10225dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(is_empty(fifo, ec) == false); 10325dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(ec); 10425dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK(ec != GetTestEC()); 10525dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 10625dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier TEST_CHECK_THROW(filesystem_error, is_empty(fifo)); 10725dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier} 10825dc5bdb887e80a232f86e5b54b298427392e1c7Eric Fiselier 1096e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE_END() 110