brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · ca4e02d Raw
156 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 proximate(const path& p, error_code &ec)16// path proximate(const path& p, const path& base = current_path())17// path proximate(const path& p, const path& base, error_code& ec);18 19#include <filesystem>20#include <string>21#include <type_traits>22#include <cassert>23 24#include "test_macros.h"25#include "test_iterators.h"26#include "count_new.h"27#include "filesystem_test_helper.h"28namespace fs = std::filesystem;29 30static void test_signature_0() {31  fs::path p("");32  const fs::path output = fs::weakly_canonical(p);33  assert(output == fs::path::string_type(fs::current_path()));34}35 36static void test_signature_1() {37  fs::path p(".");38  const fs::path output = fs::weakly_canonical(p);39  assert(output == fs::path::string_type(fs::current_path()));40}41 42static void test_signature_2() {43  static_test_env static_env;44  fs::path p(static_env.File);45  const fs::path output = fs::weakly_canonical(p);46  assert(output == fs::path::string_type(static_env.File));47}48 49static void test_signature_3() {50  static_test_env static_env;51  fs::path p(static_env.Dir);52  const fs::path output = fs::weakly_canonical(p);53  assert(output == fs::path::string_type(static_env.Dir));54}55 56static void test_signature_4() {57  static_test_env static_env;58  fs::path p(static_env.SymlinkToDir);59  const fs::path output = fs::weakly_canonical(p);60  assert(output == fs::path::string_type(static_env.Dir));61}62 63static void test_signature_5() {64  static_test_env static_env;65  fs::path p(static_env.SymlinkToDir / "dir2/.");66  const fs::path output = fs::weakly_canonical(p);67  assert(output == fs::path::string_type(static_env.Dir / "dir2"));68}69 70static void test_signature_6() {71  static_test_env static_env;72  // FIXME? If the trailing separator occurs in a part of the path that exists,73  // it is omitted. Otherwise it is added to the end of the result.74  fs::path p(static_env.SymlinkToDir / "dir2/./");75  const fs::path output = fs::weakly_canonical(p);76  assert(output == fs::path::string_type(static_env.Dir / "dir2"));77}78 79static void test_signature_7() {80  static_test_env static_env;81  fs::path p(static_env.SymlinkToDir / "dir2/DNE/./");82  const fs::path output = fs::weakly_canonical(p);83  assert(output == fs::path::string_type(static_env.Dir / "dir2/DNE/"));84}85 86static void test_signature_8() {87  static_test_env static_env;88  fs::path p(static_env.SymlinkToDir / "dir2");89  const fs::path output = fs::weakly_canonical(p);90  assert(output == fs::path::string_type(static_env.Dir2));91}92 93static void test_signature_9() {94  static_test_env static_env;95  fs::path p(static_env.SymlinkToDir / "dir2/../dir2/DNE/..");96  const fs::path output = fs::weakly_canonical(p);97  // weakly_canonical has a quirk - if the path is considered to exist,98  // it's returned without a trailing slash, otherwise it's returned with99  // one (see a note in fs.op.weakly_canonical/weakly_canonical.pass.cpp).100  // On Windows, a path like existent/nonexistentsubdir/.. is considered101  // to exist, on posix it's considered to not exist. Therefore, the102  // result here differs in the trailing slash.103#ifdef _WIN32104  assert(output == fs::path::string_type(static_env.Dir2));105#else106  assert(output == fs::path::string_type(static_env.Dir2 / ""));107#endif108}109 110static void test_signature_10() {111  static_test_env static_env;112  fs::path p(static_env.SymlinkToDir / "dir2/dir3/../DNE/DNE2");113  const fs::path output = fs::weakly_canonical(p);114  assert(output == fs::path::string_type(static_env.Dir2 / "DNE/DNE2"));115}116 117static void test_signature_11() {118  static_test_env static_env;119  fs::path p(static_env.Dir / "../dir1");120  const fs::path output = fs::weakly_canonical(p);121  assert(output == fs::path::string_type(static_env.Dir));122}123 124static void test_signature_12() {125  static_test_env static_env;126  fs::path p(static_env.Dir / "./.");127  const fs::path output = fs::weakly_canonical(p);128  assert(output == fs::path::string_type(static_env.Dir));129}130 131static void test_signature_13() {132  static_test_env static_env;133  fs::path p(static_env.Dir / "DNE/../foo");134  const fs::path output = fs::weakly_canonical(p);135  assert(output == fs::path::string_type(static_env.Dir / "foo"));136}137 138int main(int, char**) {139  test_signature_0();140  test_signature_1();141  test_signature_2();142  test_signature_3();143  test_signature_4();144  test_signature_5();145  test_signature_6();146  test_signature_7();147  test_signature_8();148  test_signature_9();149  test_signature_10();150  test_signature_11();151  test_signature_12();152  test_signature_13();153 154  return 0;155}156