Improve tests for error reporting in Filesystem TS

Backport from mainline
2017-10-19  Jonathan Wakely  <jwakely@redhat.com>

	* testsuite/experimental/filesystem/iterators/
	recursive_directory_iterator.cc: Ensure that error_code arguments are
	cleared when required.
	* testsuite/experimental/filesystem/operations/create_directory.cc:
	Remove redundant check.
	* testsuite/experimental/filesystem/operations/temp_directory_path.cc:
	Ensure that error_code argument is cleared when required.

From-SVN: r256293
This commit is contained in:
Jonathan Wakely 2018-01-05 22:22:33 +00:00 committed by Jonathan Wakely
parent 7a2b2be984
commit f8e2a3f31e
4 changed files with 29 additions and 4 deletions

View File

@ -1,5 +1,16 @@
2018-01-05 Jonathan Wakely <jwakely@redhat.com>
Backport from mainline
2017-10-19 Jonathan Wakely <jwakely@redhat.com>
* testsuite/experimental/filesystem/iterators/
recursive_directory_iterator.cc: Ensure that error_code arguments are
cleared when required.
* testsuite/experimental/filesystem/operations/create_directory.cc:
Remove redundant check.
* testsuite/experimental/filesystem/operations/temp_directory_path.cc:
Ensure that error_code argument is cleared when required.
Backport from mainline
2017-12-27 Jonathan Wakely <jwakely@redhat.com>

View File

@ -28,6 +28,7 @@ namespace fs = std::experimental::filesystem;
void
test01()
{
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
std::error_code ec;
// Test non-existent path.
@ -37,15 +38,19 @@ test01()
VERIFY( iter == end(iter) );
// Test empty directory.
ec = bad_ec;
create_directory(p, fs::current_path(), ec);
VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec );
VERIFY( iter == end(iter) );
// Test non-empty directory.
create_directories(p / "d1/d2");
ec = bad_ec;
create_directories(p / "d1/d2", ec);
VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec );
VERIFY( iter != end(iter) );
@ -56,6 +61,7 @@ test01()
VERIFY( iter == end(iter) );
// Test inaccessible directory.
ec = bad_ec;
permissions(p, fs::perms::none, ec);
VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec);
@ -64,15 +70,19 @@ test01()
// Test inaccessible directory, skipping permission denied.
const auto opts = fs::directory_options::skip_permission_denied;
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec );
VERIFY( iter == end(iter) );
// Test inaccessible sub-directory.
ec = bad_ec;
permissions(p, fs::perms::owner_all, ec);
VERIFY( !ec );
ec = bad_ec;
permissions(p/"d1/d2", fs::perms::none, ec);
VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec );
VERIFY( iter != end(iter) );
@ -84,12 +94,14 @@ test01()
VERIFY( iter == end(iter) );
// Test inaccessible sub-directory, skipping permission denied.
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec );
VERIFY( iter != end(iter) );
VERIFY( iter->path() == p/"d1" );
++iter; // should recurse into d1
VERIFY( iter->path() == p/"d1/d2" );
ec = bad_ec;
iter.increment(ec); // should fail to recurse into p/d1/d2, so skip it
VERIFY( !ec );
VERIFY( iter == end(iter) );
@ -101,12 +113,15 @@ test01()
void
test02()
{
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
std::error_code ec;
const auto p = __gnu_test::nonexistent_path();
ec = bad_ec;
create_directories(p / "d1/d2", ec);
VERIFY( !ec );
// Test post-increment (libstdc++/71005)
ec = bad_ec;
auto iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec );
VERIFY( iter != end(iter) );
@ -126,7 +141,7 @@ test02()
void
test03()
{
std::error_code ec;
std::error_code ec = make_error_code(std::errc::invalid_argument);
const auto p = __gnu_test::nonexistent_path();
create_directories(p / "longer_than_small_string_buffer", ec);
VERIFY( !ec );

View File

@ -50,7 +50,6 @@ test01()
VERIFY( !ec );
VERIFY( !b );
b = create_directory(p);
VERIFY( !ec );
VERIFY( !b );
remove_all(p, ec);

View File

@ -43,7 +43,7 @@ test01()
if (!fs::exists("/tmp"))
return; // just give up
std::error_code ec;
std::error_code ec = make_error_code(std::errc::invalid_argument);
fs::path p1 = fs::temp_directory_path(ec);
VERIFY( !ec );
VERIFY( exists(p1) );