1f7b43230SLouis Dionne //===----------------------------------------------------------------------===// 2f7b43230SLouis Dionne // 3f7b43230SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f7b43230SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5f7b43230SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f7b43230SLouis Dionne // 7f7b43230SLouis Dionne //===----------------------------------------------------------------------===// 8f7b43230SLouis Dionne 931cbe0f2SLouis Dionne // UNSUPPORTED: c++03 10f7b43230SLouis Dionne 11f7b43230SLouis Dionne // <filesystem> 12f7b43230SLouis Dionne 13f7b43230SLouis Dionne // path current_path(); 14f7b43230SLouis Dionne // path current_path(error_code& ec); 15f7b43230SLouis Dionne // void current_path(path const&); 16f7b43230SLouis Dionne // void current_path(path const&, std::error_code& ec) noexcept; 17f7b43230SLouis Dionne 18cc89063bSNico Weber #include "filesystem_include.h" 19f7b43230SLouis Dionne #include <type_traits> 20f7b43230SLouis Dionne #include <cassert> 21f7b43230SLouis Dionne 22f7b43230SLouis Dionne #include "test_macros.h" 23cc89063bSNico Weber #include "rapid-cxx-test.h" 24cc89063bSNico Weber #include "filesystem_test_helper.h" 25f7b43230SLouis Dionne 26f7b43230SLouis Dionne using namespace fs; 27f7b43230SLouis Dionne 28f7b43230SLouis Dionne TEST_SUITE(filesystem_current_path_path_test_suite) 29f7b43230SLouis Dionne TEST_CASE(current_path_signature_test)30f7b43230SLouis DionneTEST_CASE(current_path_signature_test) 31f7b43230SLouis Dionne { 32f7b43230SLouis Dionne const path p; ((void)p); 33f7b43230SLouis Dionne std::error_code ec; ((void)ec); 34f7b43230SLouis Dionne ASSERT_NOT_NOEXCEPT(current_path()); 35f7b43230SLouis Dionne ASSERT_NOT_NOEXCEPT(current_path(ec)); 36f7b43230SLouis Dionne ASSERT_NOT_NOEXCEPT(current_path(p)); 37f7b43230SLouis Dionne ASSERT_NOEXCEPT(current_path(p, ec)); 38f7b43230SLouis Dionne } 39f7b43230SLouis Dionne TEST_CASE(current_path_test)40f7b43230SLouis DionneTEST_CASE(current_path_test) 41f7b43230SLouis Dionne { 42f7b43230SLouis Dionne std::error_code ec; 43f7b43230SLouis Dionne const path p = current_path(ec); 44f7b43230SLouis Dionne TEST_REQUIRE(!ec); 45f7b43230SLouis Dionne TEST_CHECK(p.is_absolute()); 46f7b43230SLouis Dionne TEST_CHECK(is_directory(p)); 47f7b43230SLouis Dionne 48f7b43230SLouis Dionne const path p2 = current_path(); 49f7b43230SLouis Dionne TEST_CHECK(p2 == p); 50f7b43230SLouis Dionne } 51f7b43230SLouis Dionne TEST_CASE(current_path_after_change_test)52f7b43230SLouis DionneTEST_CASE(current_path_after_change_test) 53f7b43230SLouis Dionne { 54b62ce9e0SSergej Jaskiewicz static_test_env static_env; 55*4c402ae8SMartin Storsjö CWDGuard guard; 56b62ce9e0SSergej Jaskiewicz const path new_path = static_env.Dir; 57f7b43230SLouis Dionne current_path(new_path); 58f7b43230SLouis Dionne TEST_CHECK(current_path() == new_path); 59f7b43230SLouis Dionne } 60f7b43230SLouis Dionne TEST_CASE(current_path_is_file_test)61f7b43230SLouis DionneTEST_CASE(current_path_is_file_test) 62f7b43230SLouis Dionne { 63b62ce9e0SSergej Jaskiewicz static_test_env static_env; 64*4c402ae8SMartin Storsjö CWDGuard guard; 65b62ce9e0SSergej Jaskiewicz const path p = static_env.File; 66f7b43230SLouis Dionne std::error_code ec; 67f7b43230SLouis Dionne const path old_p = current_path(); 68f7b43230SLouis Dionne current_path(p, ec); 69f7b43230SLouis Dionne TEST_CHECK(ec); 70f7b43230SLouis Dionne TEST_CHECK(old_p == current_path()); 71f7b43230SLouis Dionne } 72f7b43230SLouis Dionne TEST_CASE(set_to_non_absolute_path)73f7b43230SLouis DionneTEST_CASE(set_to_non_absolute_path) 74f7b43230SLouis Dionne { 75b62ce9e0SSergej Jaskiewicz static_test_env static_env; 76*4c402ae8SMartin Storsjö CWDGuard guard; 77b62ce9e0SSergej Jaskiewicz const path base = static_env.Dir; 78f7b43230SLouis Dionne current_path(base); 79b62ce9e0SSergej Jaskiewicz const path p = static_env.Dir2.filename(); 80f7b43230SLouis Dionne std::error_code ec; 81f7b43230SLouis Dionne current_path(p, ec); 82f7b43230SLouis Dionne TEST_CHECK(!ec); 83f7b43230SLouis Dionne const path new_cwd = current_path(); 84b62ce9e0SSergej Jaskiewicz TEST_CHECK(new_cwd == static_env.Dir2); 85f7b43230SLouis Dionne TEST_CHECK(new_cwd.is_absolute()); 86f7b43230SLouis Dionne } 87f7b43230SLouis Dionne TEST_CASE(set_to_empty)88f7b43230SLouis DionneTEST_CASE(set_to_empty) 89f7b43230SLouis Dionne { 90f7b43230SLouis Dionne const path p = ""; 91f7b43230SLouis Dionne std::error_code ec; 92f7b43230SLouis Dionne const path old_p = current_path(); 93f7b43230SLouis Dionne current_path(p, ec); 94f7b43230SLouis Dionne TEST_CHECK(ec); 95f7b43230SLouis Dionne TEST_CHECK(old_p == current_path()); 96f7b43230SLouis Dionne } 97f7b43230SLouis Dionne 98f7b43230SLouis Dionne TEST_SUITE_END() 99