Filesystem tests: fix fs.op.relative

Summary: The test wasn't using the testing infrastructure properly.

Reviewers: ldionne, mclow.lists, EricWF

Subscribers: christof, jkorous, dexonsmith, libcxx-commits

Differential Revision: https://reviews.llvm.org/D56519

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@350872 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
JF Bastien
2019-01-10 18:50:34 +00:00
parent a131ebfcaf
commit 4fb9e8f89a

View File

@@ -16,9 +16,8 @@
// path proximate(const path& p, const path& base, error_code& ec); // path proximate(const path& p, const path& base, error_code& ec);
#include "filesystem_include.hpp" #include "filesystem_include.hpp"
#include <string>
#include <type_traits> #include <type_traits>
#include <vector>
#include <iostream>
#include <cassert> #include <cassert>
#include "test_macros.h" #include "test_macros.h"
@@ -30,49 +29,90 @@
TEST_SUITE(filesystem_proximate_path_test_suite) TEST_SUITE(filesystem_proximate_path_test_suite)
TEST_CASE(test_signature) { TEST_CASE(test_signature_0) {
fs::path p("");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(fs::current_path()));
} }
int main() {
// clang-format off TEST_CASE(test_signature_1) {
struct { fs::path p(".");
std::string input; const fs::path output = fs::weakly_canonical(p);
std::string expect; TEST_CHECK(output == std::string(fs::current_path()));
} TestCases[] = { }
{"", fs::current_path()},
{".", fs::current_path()}, TEST_CASE(test_signature_2) {
{StaticEnv::File, StaticEnv::File}, fs::path p(StaticEnv::File);
{StaticEnv::Dir, StaticEnv::Dir}, const fs::path output = fs::weakly_canonical(p);
{StaticEnv::SymlinkToDir, StaticEnv::Dir}, TEST_CHECK(output == std::string(StaticEnv::File));
{StaticEnv::SymlinkToDir / "dir2/.", StaticEnv::Dir / "dir2"}, }
// FIXME? If the trailing separator occurs in a part of the path that exists,
// it is ommitted. Otherwise it is added to the end of the result. TEST_CASE(test_signature_3) {
{StaticEnv::SymlinkToDir / "dir2/./", StaticEnv::Dir / "dir2"}, fs::path p(StaticEnv::Dir);
{StaticEnv::SymlinkToDir / "dir2/DNE/./", StaticEnv::Dir / "dir2/DNE/"}, const fs::path output = fs::weakly_canonical(p);
{StaticEnv::SymlinkToDir / "dir2", StaticEnv::Dir2}, TEST_CHECK(output == std::string(StaticEnv::Dir));
{StaticEnv::SymlinkToDir / "dir2/../dir2/DNE/..", StaticEnv::Dir2 / ""}, }
{StaticEnv::SymlinkToDir / "dir2/dir3/../DNE/DNE2", StaticEnv::Dir2 / "DNE/DNE2"},
{StaticEnv::Dir / "../dir1", StaticEnv::Dir}, TEST_CASE(test_signature_4) {
{StaticEnv::Dir / "./.", StaticEnv::Dir}, fs::path p(StaticEnv::SymlinkToDir);
{StaticEnv::Dir / "DNE/../foo", StaticEnv::Dir / "foo"} const fs::path output = fs::weakly_canonical(p);
}; TEST_CHECK(output == std::string(StaticEnv::Dir));
// clang-format on }
int ID = 0;
bool Failed = false; TEST_CASE(test_signature_5) {
for (auto& TC : TestCases) { fs::path p(StaticEnv::SymlinkToDir / "dir2/.");
++ID; const fs::path output = fs::weakly_canonical(p);
fs::path p(TC.input); TEST_CHECK(output == std::string(StaticEnv::Dir / "dir2"));
const fs::path output = fs::weakly_canonical(p); }
if (output != TC.expect) {
Failed = true; TEST_CASE(test_signature_6) {
std::cerr << "TEST CASE #" << ID << " FAILED: \n"; // FIXME? If the trailing separator occurs in a part of the path that exists,
std::cerr << " Input: '" << TC.input << "'\n"; // it is ommitted. Otherwise it is added to the end of the result.
std::cerr << " Expected: '" << TC.expect << "'\n"; fs::path p(StaticEnv::SymlinkToDir / "dir2/./");
std::cerr << " Output: '" << output.native() << "'"; const fs::path output = fs::weakly_canonical(p);
std::cerr << std::endl; TEST_CHECK(output == std::string(StaticEnv::Dir / "dir2"));
} }
}
return Failed; TEST_CASE(test_signature_7) {
fs::path p(StaticEnv::SymlinkToDir / "dir2/DNE/./");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir / "dir2/DNE/"));
}
TEST_CASE(test_signature_8) {
fs::path p(StaticEnv::SymlinkToDir / "dir2");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir2));
}
TEST_CASE(test_signature_9) {
fs::path p(StaticEnv::SymlinkToDir / "dir2/../dir2/DNE/..");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir2 / ""));
}
TEST_CASE(test_signature_10) {
fs::path p(StaticEnv::SymlinkToDir / "dir2/dir3/../DNE/DNE2");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir2 / "DNE/DNE2"));
}
TEST_CASE(test_signature_11) {
fs::path p(StaticEnv::Dir / "../dir1");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir));
}
TEST_CASE(test_signature_12) {
fs::path p(StaticEnv::Dir / "./.");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir));
}
TEST_CASE(test_signature_13) {
fs::path p(StaticEnv::Dir / "DNE/../foo");
const fs::path output = fs::weakly_canonical(p);
TEST_CHECK(output == std::string(StaticEnv::Dir / "foo"));
} }
TEST_SUITE_END() TEST_SUITE_END()