brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 81aeb11 Raw
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