This test's logic was wrong for the case where the nofollow option is
supported and the operation succeeds.
PR libstdc++/82706
* testsuite/27_io/filesystem/operations/permissions.cc: Fix test.
Tested x86_64-linux, committed to trunk.
commit 4e94cea9af0581c319aa2f5092c63d668888843d
Author: Jonathan Wakely <[email protected]>
Date: Wed Oct 25 01:25:46 2017 +0100
PR libstdc++/82706 fix test for case where operations succeed
PR libstdc++/82706
* testsuite/27_io/filesystem/operations/permissions.cc: Fix test.
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
index 97b7a7874f7..e190e886230 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
@@ -86,9 +86,10 @@ test03()
create_symlink(f.path, p);
std::error_code ec = make_error_code(std::errc::no_such_file_or_directory);
- std::error_code ec2 = make_error_code(std::errc::invalid_argument);
permissions(p, perms::owner_all,
perm_options::replace|perm_options::nofollow, ec);
+ bool caught = false;
+ std::error_code ec2;
try
{
permissions(p, perms::owner_all,
@@ -96,11 +97,18 @@ test03()
}
catch (const std::filesystem::filesystem_error& ex)
{
+ caught = true;
ec2 = ex.code();
VERIFY( ex.path1() == p );
}
// Both calls should succeed, or both should fail with same error:
- VERIFY( ec == ec2 );
+ if (ec)
+ {
+ VERIFY( caught );
+ VERIFY( ec == ec2 );
+ }
+ else
+ VERIFY( !caught );
remove(p);
}
@@ -114,9 +122,9 @@ test04()
create_symlink(__gnu_test::nonexistent_path(), p);
std::error_code ec = make_error_code(std::errc::no_such_file_or_directory);
- std::error_code ec2 = make_error_code(std::errc::invalid_argument);
permissions(p, perms::owner_all, ec);
VERIFY( ec );
+ std::error_code ec2;
try
{
permissions(p, perms::owner_all);