mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Support/FileSystem: Implement recursive_directory_iterator and make
directory_iterator preserve InputIterator semantics on copy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146200 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -223,6 +223,57 @@ TEST_F(FileSystemTest, DirectoryIteration) {
|
||||
error_code ec;
|
||||
for (fs::directory_iterator i(".", ec), e; i != e; i.increment(ec))
|
||||
ASSERT_NO_ERROR(ec);
|
||||
|
||||
// Create a known hierarchy to recurse over.
|
||||
bool existed;
|
||||
ASSERT_NO_ERROR(fs::create_directories(Twine(TestDirectory)
|
||||
+ "/recursive/a0/aa1", existed));
|
||||
ASSERT_NO_ERROR(fs::create_directories(Twine(TestDirectory)
|
||||
+ "/recursive/a0/ab1", existed));
|
||||
ASSERT_NO_ERROR(fs::create_directories(Twine(TestDirectory)
|
||||
+ "/recursive/dontlookhere/da1", existed));
|
||||
ASSERT_NO_ERROR(fs::create_directories(Twine(TestDirectory)
|
||||
+ "/recursive/z0/za1", existed));
|
||||
ASSERT_NO_ERROR(fs::create_directories(Twine(TestDirectory)
|
||||
+ "/recursive/pop/p1", existed));
|
||||
typedef std::vector<std::string> v_t;
|
||||
v_t visited;
|
||||
for (fs::recursive_directory_iterator i(Twine(TestDirectory)
|
||||
+ "/recursive", ec), e; i != e; i.increment(ec)){
|
||||
ASSERT_NO_ERROR(ec);
|
||||
if (path::filename(i->path()) == "dontlookhere")
|
||||
i.no_push();
|
||||
if (path::filename(i->path()) == "p1")
|
||||
i.pop();
|
||||
visited.push_back(path::filename(i->path()));
|
||||
}
|
||||
v_t::const_iterator a0 = std::find(visited.begin(), visited.end(), "a0");
|
||||
v_t::const_iterator aa1 = std::find(visited.begin(), visited.end(), "aa1");
|
||||
v_t::const_iterator ab1 = std::find(visited.begin(), visited.end(), "ab1");
|
||||
v_t::const_iterator dontlookhere = std::find(visited.begin(), visited.end(),
|
||||
"dontlookhere");
|
||||
v_t::const_iterator da1 = std::find(visited.begin(), visited.end(), "da1");
|
||||
v_t::const_iterator z0 = std::find(visited.begin(), visited.end(), "z0");
|
||||
v_t::const_iterator za1 = std::find(visited.begin(), visited.end(), "za1");
|
||||
v_t::const_iterator pop = std::find(visited.begin(), visited.end(), "pop");
|
||||
v_t::const_iterator p1 = std::find(visited.begin(), visited.end(), "p1");
|
||||
|
||||
// Make sure that each path was visited correctly.
|
||||
ASSERT_NE(a0, visited.end());
|
||||
ASSERT_NE(aa1, visited.end());
|
||||
ASSERT_NE(ab1, visited.end());
|
||||
ASSERT_NE(dontlookhere, visited.end());
|
||||
ASSERT_EQ(da1, visited.end()); // Not visited.
|
||||
ASSERT_NE(z0, visited.end());
|
||||
ASSERT_NE(za1, visited.end());
|
||||
ASSERT_NE(pop, visited.end());
|
||||
ASSERT_EQ(p1, visited.end()); // Not visited.
|
||||
|
||||
// Make sure that parents were visited before children. No other ordering
|
||||
// guarantees can be made across siblings.
|
||||
ASSERT_LT(a0, aa1);
|
||||
ASSERT_LT(a0, ab1);
|
||||
ASSERT_LT(z0, za1);
|
||||
}
|
||||
|
||||
TEST_F(FileSystemTest, Magic) {
|
||||
|
Reference in New Issue
Block a user