107 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// REQUIRES: can-create-symlinks10// UNSUPPORTED: c++03, c++11, c++1411// UNSUPPORTED: no-filesystem12 13// <filesystem>14 15// path current_path();16// path current_path(error_code& ec);17// void current_path(path const&);18// void current_path(path const&, std::error_code& ec) noexcept;19 20#include <filesystem>21#include <type_traits>22#include <cassert>23 24#include "test_macros.h"25#include "filesystem_test_helper.h"26namespace fs = std::filesystem;27using namespace fs;28 29static void current_path_signature_test()30{31 const path p; ((void)p);32 std::error_code ec; ((void)ec);33 ASSERT_NOT_NOEXCEPT(current_path());34 ASSERT_NOT_NOEXCEPT(current_path(ec));35 ASSERT_NOT_NOEXCEPT(current_path(p));36 ASSERT_NOEXCEPT(current_path(p, ec));37}38 39static void current_path_test()40{41 std::error_code ec;42 const path p = current_path(ec);43 assert(!ec);44 assert(p.is_absolute());45 assert(is_directory(p));46 47 const path p2 = current_path();48 assert(p2 == p);49}50 51static void current_path_after_change_test()52{53 static_test_env static_env;54 CWDGuard guard;55 const path new_path = static_env.Dir;56 current_path(new_path);57 assert(current_path() == new_path);58}59 60static void current_path_is_file_test()61{62 static_test_env static_env;63 CWDGuard guard;64 const path p = static_env.File;65 std::error_code ec;66 const path old_p = current_path();67 current_path(p, ec);68 assert(ec);69 assert(old_p == current_path());70}71 72static void set_to_non_absolute_path()73{74 static_test_env static_env;75 CWDGuard guard;76 const path base = static_env.Dir;77 current_path(base);78 const path p = static_env.Dir2.filename();79 std::error_code ec;80 current_path(p, ec);81 assert(!ec);82 const path new_cwd = current_path();83 assert(new_cwd == static_env.Dir2);84 assert(new_cwd.is_absolute());85}86 87static void set_to_empty()88{89 const path p = "";90 std::error_code ec;91 const path old_p = current_path();92 current_path(p, ec);93 assert(ec);94 assert(old_p == current_path());95}96 97int main(int, char**) {98 current_path_signature_test();99 current_path_test();100 current_path_after_change_test();101 current_path_is_file_test();102 set_to_non_absolute_path();103 set_to_empty();104 105 return 0;106}107