libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

create_directories.pass.cpp (2925B)


      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 // <filesystem>
     13 
     14 // bool create_directories(const path& p);
     15 // bool create_directories(const path& p, error_code& ec) noexcept;
     16 
     17 #include "filesystem_include.hpp"
     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 fs;
     26 
     27 TEST_SUITE(filesystem_create_directories_test_suite)
     28 
     29 TEST_CASE(test_signatures)
     30 {
     31     const path p; ((void)p);
     32     std::error_code ec; ((void)ec);
     33     ASSERT_SAME_TYPE(decltype(fs::create_directories(p)), bool);
     34     ASSERT_SAME_TYPE(decltype(fs::create_directories(p, ec)), bool);
     35     ASSERT_NOT_NOEXCEPT(fs::create_directories(p));
     36     ASSERT_NOT_NOEXCEPT(fs::create_directories(p, ec));
     37 }
     38 
     39 TEST_CASE(create_existing_directory)
     40 {
     41     scoped_test_env env;
     42     const path dir = env.create_dir("dir1");
     43     std::error_code ec;
     44     TEST_CHECK(fs::create_directories(dir, ec) == false);
     45     TEST_CHECK(!ec);
     46     TEST_CHECK(is_directory(dir));
     47 }
     48 
     49 TEST_CASE(create_directory_one_level)
     50 {
     51     scoped_test_env env;
     52     const path dir = env.make_env_path("dir1");
     53     std::error_code ec;
     54     TEST_CHECK(fs::create_directories(dir, ec) == true);
     55     TEST_CHECK(!ec);
     56     TEST_CHECK(is_directory(dir));
     57 }
     58 
     59 TEST_CASE(create_directories_multi_level)
     60 {
     61     scoped_test_env env;
     62     const path dir = env.make_env_path("dir1/dir2/dir3");
     63     std::error_code ec;
     64     TEST_CHECK(fs::create_directories(dir, ec) == true);
     65     TEST_CHECK(!ec);
     66     TEST_CHECK(is_directory(dir));
     67 }
     68 
     69 TEST_CASE(create_directory_symlinks) {
     70   scoped_test_env env;
     71   const path root = env.create_dir("dir");
     72   const path sym_dest_dead = env.make_env_path("dead");
     73   const path dead_sym = env.create_symlink(sym_dest_dead, "dir/sym_dir");
     74   const path target = env.make_env_path("dir/sym_dir/foo");
     75   {
     76     std::error_code ec = GetTestEC();
     77     TEST_CHECK(create_directories(target, ec) == false);
     78     TEST_CHECK(ec);
     79     TEST_CHECK(!exists(sym_dest_dead));
     80     TEST_CHECK(!exists(dead_sym));
     81   }
     82 }
     83 
     84 
     85 TEST_CASE(create_directory_through_symlinks) {
     86   scoped_test_env env;
     87   const path root = env.create_dir("dir");
     88   const path sym_dir = env.create_symlink(root, "sym_dir");
     89   const path target = env.make_env_path("sym_dir/foo");
     90   const path resolved_target = env.make_env_path("dir/foo");
     91   TEST_REQUIRE(is_directory(sym_dir));
     92   {
     93     std::error_code ec = GetTestEC();
     94     TEST_CHECK(create_directories(target, ec) == true);
     95     TEST_CHECK(!ec);
     96     TEST_CHECK(is_directory(target));
     97     TEST_CHECK(is_directory(resolved_target));
     98   }
     99 }
    100 
    101 TEST_SUITE_END()