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 create_directories(const path& p); 156e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// bool create_directories(const path& p, error_code& ec) noexcept; 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 Fiseliernamespace fs = std::experimental::filesystem; 276e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 286e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE(filesystem_create_directories_test_suite) 296e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 306e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_signatures) 316e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 326e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path p; ((void)p); 336e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; ((void)ec); 346e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier ASSERT_SAME_TYPE(decltype(fs::create_directories(p)), bool); 356e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier ASSERT_SAME_TYPE(decltype(fs::create_directories(p, ec)), bool); 366e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier ASSERT_NOT_NOEXCEPT(fs::create_directories(p)); 376e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier ASSERT_NOEXCEPT(fs::create_directories(p, ec)); 386e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 396e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 406e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(create_existing_directory) 416e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 426e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier scoped_test_env env; 436e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path dir = env.create_dir("dir1"); 446e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; 456e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(fs::create_directories(dir, ec) == false); 466e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!ec); 476e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_directory(dir)); 486e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 496e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 506e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(create_directory_one_level) 516e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 526e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier scoped_test_env env; 536e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path dir = env.make_env_path("dir1"); 546e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; 556e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(fs::create_directories(dir, ec) == true); 566e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!ec); 576e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_directory(dir)); 586e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 596e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 606e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(create_directories_multi_level) 616e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{ 626e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier scoped_test_env env; 636e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier const path dir = env.make_env_path("dir1/dir2/dir3"); 646e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier std::error_code ec; 656e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(fs::create_directories(dir, ec) == true); 666e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(!ec); 676e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier TEST_CHECK(is_directory(dir)); 686e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier} 696e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier 706e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE_END() 71