Commit db62ad7c by Jonathan Wakely Committed by Jonathan Wakely

Improve tests for error reporting in Filesystem TS

	* 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: r253897
parent 551124d5
2017-10-19 Jonathan Wakely <jwakely@redhat.com> 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.
* include/experimental/bits/fs_path.h (path::iterator++(int)) * include/experimental/bits/fs_path.h (path::iterator++(int))
(path::iterator--(int)): Fix for paths with only one component. (path::iterator--(int)): Fix for paths with only one component.
* testsuite/experimental/filesystem/path/itr/traversal.cc: Test * testsuite/experimental/filesystem/path/itr/traversal.cc: Test
......
...@@ -28,6 +28,7 @@ namespace fs = std::experimental::filesystem; ...@@ -28,6 +28,7 @@ namespace fs = std::experimental::filesystem;
void void
test01() test01()
{ {
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
std::error_code ec; std::error_code ec;
// Test non-existent path. // Test non-existent path.
...@@ -37,15 +38,19 @@ test01() ...@@ -37,15 +38,19 @@ test01()
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
// Test empty directory. // Test empty directory.
ec = bad_ec;
create_directory(p, fs::current_path(), ec); create_directory(p, fs::current_path(), ec);
VERIFY( !ec ); VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
// Test non-empty directory. // Test non-empty directory.
create_directories(p / "d1/d2"); ec = bad_ec;
create_directories(p / "d1/d2", ec);
VERIFY( !ec ); VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != end(iter) ); VERIFY( iter != end(iter) );
...@@ -56,6 +61,7 @@ test01() ...@@ -56,6 +61,7 @@ test01()
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
// Test inaccessible directory. // Test inaccessible directory.
ec = bad_ec;
permissions(p, fs::perms::none, ec); permissions(p, fs::perms::none, ec);
VERIFY( !ec ); VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
...@@ -64,15 +70,19 @@ test01() ...@@ -64,15 +70,19 @@ test01()
// Test inaccessible directory, skipping permission denied. // Test inaccessible directory, skipping permission denied.
const auto opts = fs::directory_options::skip_permission_denied; const auto opts = fs::directory_options::skip_permission_denied;
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, opts, ec); iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
// Test inaccessible sub-directory. // Test inaccessible sub-directory.
ec = bad_ec;
permissions(p, fs::perms::owner_all, ec); permissions(p, fs::perms::owner_all, ec);
VERIFY( !ec ); VERIFY( !ec );
ec = bad_ec;
permissions(p/"d1/d2", fs::perms::none, ec); permissions(p/"d1/d2", fs::perms::none, ec);
VERIFY( !ec ); VERIFY( !ec );
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != end(iter) ); VERIFY( iter != end(iter) );
...@@ -84,12 +94,14 @@ test01() ...@@ -84,12 +94,14 @@ test01()
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
// Test inaccessible sub-directory, skipping permission denied. // Test inaccessible sub-directory, skipping permission denied.
ec = bad_ec;
iter = fs::recursive_directory_iterator(p, opts, ec); iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != end(iter) ); VERIFY( iter != end(iter) );
VERIFY( iter->path() == p/"d1" ); VERIFY( iter->path() == p/"d1" );
++iter; // should recurse into d1 ++iter; // should recurse into d1
VERIFY( iter->path() == p/"d1/d2" ); VERIFY( iter->path() == p/"d1/d2" );
ec = bad_ec;
iter.increment(ec); // should fail to recurse into p/d1/d2, so skip it iter.increment(ec); // should fail to recurse into p/d1/d2, so skip it
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == end(iter) ); VERIFY( iter == end(iter) );
...@@ -101,12 +113,15 @@ test01() ...@@ -101,12 +113,15 @@ test01()
void void
test02() test02()
{ {
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
std::error_code ec; std::error_code ec;
const auto p = __gnu_test::nonexistent_path(); const auto p = __gnu_test::nonexistent_path();
ec = bad_ec;
create_directories(p / "d1/d2", ec); create_directories(p / "d1/d2", ec);
VERIFY( !ec ); VERIFY( !ec );
// Test post-increment (libstdc++/71005) // Test post-increment (libstdc++/71005)
ec = bad_ec;
auto iter = fs::recursive_directory_iterator(p, ec); auto iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != end(iter) ); VERIFY( iter != end(iter) );
...@@ -126,7 +141,7 @@ test02() ...@@ -126,7 +141,7 @@ test02()
void void
test03() test03()
{ {
std::error_code ec; std::error_code ec = make_error_code(std::errc::invalid_argument);
const auto p = __gnu_test::nonexistent_path(); const auto p = __gnu_test::nonexistent_path();
create_directories(p / "longer_than_small_string_buffer", ec); create_directories(p / "longer_than_small_string_buffer", ec);
VERIFY( !ec ); VERIFY( !ec );
......
...@@ -50,7 +50,6 @@ test01() ...@@ -50,7 +50,6 @@ test01()
VERIFY( !ec ); VERIFY( !ec );
VERIFY( !b ); VERIFY( !b );
b = create_directory(p); b = create_directory(p);
VERIFY( !ec );
VERIFY( !b ); VERIFY( !b );
remove_all(p, ec); remove_all(p, ec);
......
...@@ -43,7 +43,7 @@ test01() ...@@ -43,7 +43,7 @@ test01()
if (!fs::exists("/tmp")) if (!fs::exists("/tmp"))
return; // just give up 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); fs::path p1 = fs::temp_directory_path(ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( exists(p1) ); VERIFY( exists(p1) );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment