Fix filesystem::path tests that fail on Windows
* testsuite/27_io/filesystem/operations/proximate.cc: Fix test for MinGW. * testsuite/27_io/filesystem/path/append/source.cc: Likewise. * testsuite/27_io/filesystem/path/compare/lwg2936.cc: Likewise. From-SVN: r267308
This commit is contained in:
parent
159fdc3966
commit
080cec7f9a
@ -1,5 +1,10 @@
|
||||
2018-12-20 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* testsuite/27_io/filesystem/operations/proximate.cc: Fix test for
|
||||
MinGW.
|
||||
* testsuite/27_io/filesystem/path/append/source.cc: Likewise.
|
||||
* testsuite/27_io/filesystem/path/compare/lwg2936.cc: Likewise.
|
||||
|
||||
* testsuite/27_io/filesystem/directory_entry/lwg3171.cc: New test
|
||||
(missed from previous commit).
|
||||
|
||||
|
@ -26,15 +26,27 @@
|
||||
using std::filesystem::proximate;
|
||||
using __gnu_test::compare_paths;
|
||||
|
||||
// Normalize directory-separators
|
||||
std::string operator""_norm(const char* s, std::size_t n)
|
||||
{
|
||||
std::string str(s, n);
|
||||
#if defined(__MING32__) || defined(__MINGW64__)
|
||||
for (auto& c : str)
|
||||
if (c == '/')
|
||||
c = '\\';
|
||||
#endif
|
||||
return str;
|
||||
}
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
compare_paths( proximate("/a/d", "/a/b/c"), "../../d" );
|
||||
compare_paths( proximate("/a/b/c", "/a/d"), "../b/c" );
|
||||
compare_paths( proximate("a/b/c", "a"), "b/c" );
|
||||
compare_paths( proximate("a/b/c", "a/b/c/x/y"), "../.." );
|
||||
compare_paths( proximate("/a/d", "/a/b/c"), "../../d"_norm );
|
||||
compare_paths( proximate("/a/b/c", "/a/d"), "../b/c"_norm );
|
||||
compare_paths( proximate("a/b/c", "a"), "b/c"_norm );
|
||||
compare_paths( proximate("a/b/c", "a/b/c/x/y"), "../.."_norm );
|
||||
compare_paths( proximate("a/b/c", "a/b/c"), "." );
|
||||
compare_paths( proximate("a/b", "c/d"), "../../a/b" );
|
||||
compare_paths( proximate("a/b", "c/d"), "../../a/b"_norm );
|
||||
}
|
||||
|
||||
void
|
||||
@ -42,22 +54,22 @@ test02()
|
||||
{
|
||||
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
|
||||
std::error_code ec = bad_ec;
|
||||
compare_paths( proximate("/a/d", "/a/b/c", ec), "../../d" );
|
||||
compare_paths( proximate("/a/d", "/a/b/c", ec), "../../d"_norm );
|
||||
VERIFY( !ec );
|
||||
ec = bad_ec;
|
||||
compare_paths( proximate("/a/b/c", "/a/d", ec), "../b/c" );
|
||||
compare_paths( proximate("/a/b/c", "/a/d", ec), "../b/c"_norm );
|
||||
VERIFY( !ec );
|
||||
ec = bad_ec;
|
||||
compare_paths( proximate("a/b/c", "a", ec), "b/c" );
|
||||
compare_paths( proximate("a/b/c", "a", ec), "b/c"_norm );
|
||||
VERIFY( !ec );
|
||||
ec = bad_ec;
|
||||
compare_paths( proximate("a/b/c", "a/b/c/x/y", ec), "../.." );
|
||||
compare_paths( proximate("a/b/c", "a/b/c/x/y", ec), "../.."_norm );
|
||||
VERIFY( !ec );
|
||||
ec = bad_ec;
|
||||
compare_paths( proximate("a/b/c", "a/b/c", ec), "." );
|
||||
VERIFY( !ec );
|
||||
ec = bad_ec;
|
||||
compare_paths( proximate("a/b", "c/d", ec), "../../a/b" );
|
||||
compare_paths( proximate("a/b", "c/d", ec), "../../a/b"_norm );
|
||||
VERIFY( !ec );
|
||||
}
|
||||
|
||||
|
@ -120,24 +120,31 @@ test05()
|
||||
path p = "0/1/2/3/4/5/6";
|
||||
// The string_view aliases the path's internal string:
|
||||
s = p.native();
|
||||
path::string_type expected(s);
|
||||
expected += path::preferred_separator;
|
||||
expected += s;
|
||||
// Append that string_view, which must work correctly even though the
|
||||
// internal string will be reallocated during the operation:
|
||||
p /= s;
|
||||
VERIFY( p.string() == "0/1/2/3/4/5/6/0/1/2/3/4/5/6" );
|
||||
compare_paths(p, expected);
|
||||
|
||||
// Same again with a trailing slash:
|
||||
path p2 = "0/1/2/3/4/5/";
|
||||
s = p2.native();
|
||||
expected = s;
|
||||
expected += s;
|
||||
p2 /= s;
|
||||
VERIFY( p2.string() == "0/1/2/3/4/5/0/1/2/3/4/5/" );
|
||||
compare_paths(p2, expected);
|
||||
|
||||
// And aliasing one of the components of the path:
|
||||
path p3 = "0/123456789/a";
|
||||
path::iterator second = std::next(p3.begin());
|
||||
s = second->native();
|
||||
expected = p3.native() + path::preferred_separator;
|
||||
expected += s;
|
||||
p3 /= s;
|
||||
VERIFY( p3.string() == "0/123456789/a/123456789" );
|
||||
}
|
||||
compare_paths(p3, expected);
|
||||
}
|
||||
|
||||
void
|
||||
test06()
|
||||
|
@ -60,7 +60,11 @@ test01()
|
||||
check("c:", "d:", -1);
|
||||
check("c:", "c:/", -1);
|
||||
check("d:", "c:/", +1);
|
||||
#if defined(__MING32__) || defined(__MINGW64__)
|
||||
check("c:/a/b", "c:a/b", +1);
|
||||
#else
|
||||
check("c:/a/b", "c:a/b", -1);
|
||||
#endif
|
||||
|
||||
// These are root names on Cygwin (just relative paths elsewhere)
|
||||
check("", "//c", -1);
|
||||
@ -68,6 +72,7 @@ test01()
|
||||
check("//c", "//c/", -1);
|
||||
check("//d", "//c/", +1);
|
||||
|
||||
check("a", "/", -1);
|
||||
check("/a", "/b", -1);
|
||||
check("a", "/b", -1);
|
||||
check("/b", "b", +1);
|
||||
|
Loading…
Reference in New Issue
Block a user