diff options
author | Sam McCall <sam.mccall@gmail.com> | 2018-10-01 12:17:05 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2018-10-01 12:17:05 +0000 |
commit | 79c995c0ccbdf086f765a183eed0da1df580138a (patch) | |
tree | c4aac42858457db9ab5d14ffed00beadbbc7e3f5 /llvm/unittests/Support/Path.cpp | |
parent | 06098849c6e60c78bca9fede296cc8bd0dd1e729 (diff) | |
download | bcm5719-llvm-79c995c0ccbdf086f765a183eed0da1df580138a.tar.gz bcm5719-llvm-79c995c0ccbdf086f765a183eed0da1df580138a.zip |
[Support] Listing a directory containing dangling symlinks is not an error.
Summary:
Reporting this as an error required stat()ing every file, as well as seeming
semantically questionable.
Reviewers: vsk, bkramer
Subscribers: mgrang, kristina, llvm-commits, liaoyuke
Differential Revision: https://reviews.llvm.org/D52648
llvm-svn: 343460
Diffstat (limited to 'llvm/unittests/Support/Path.cpp')
-rw-r--r-- | llvm/unittests/Support/Path.cpp | 67 |
1 files changed, 21 insertions, 46 deletions
diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp index cba6ce94c44..c18eb929e91 100644 --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -883,87 +883,62 @@ TEST_F(FileSystemTest, BrokenSymlinkDirectoryIteration) { v_t VisitedNonBrokenSymlinks; v_t VisitedBrokenSymlinks; std::error_code ec; + using testing::UnorderedElementsAre; + using testing::UnorderedElementsAreArray; // Broken symbol links are expected to throw an error. for (fs::directory_iterator i(Twine(TestDirectory) + "/symlink", ec), e; i != e; i.increment(ec)) { - if (ec == std::make_error_code(std::errc::no_such_file_or_directory)) { + ASSERT_NO_ERROR(ec); + if (i->status().getError() == + std::make_error_code(std::errc::no_such_file_or_directory)) { VisitedBrokenSymlinks.push_back(path::filename(i->path())); continue; } - - ASSERT_NO_ERROR(ec); VisitedNonBrokenSymlinks.push_back(path::filename(i->path())); } - llvm::sort(VisitedNonBrokenSymlinks); - llvm::sort(VisitedBrokenSymlinks); - v_t ExpectedNonBrokenSymlinks = {"b", "d"}; - ASSERT_EQ(ExpectedNonBrokenSymlinks.size(), VisitedNonBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedNonBrokenSymlinks.begin(), - VisitedNonBrokenSymlinks.end(), - ExpectedNonBrokenSymlinks.begin())); + EXPECT_THAT(VisitedNonBrokenSymlinks, UnorderedElementsAre("b", "d")); VisitedNonBrokenSymlinks.clear(); - v_t ExpectedBrokenSymlinks = {"a", "c", "e"}; - ASSERT_EQ(ExpectedBrokenSymlinks.size(), VisitedBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedBrokenSymlinks.begin(), - VisitedBrokenSymlinks.end(), - ExpectedBrokenSymlinks.begin())); + EXPECT_THAT(VisitedBrokenSymlinks, UnorderedElementsAre("a", "c", "e")); VisitedBrokenSymlinks.clear(); // Broken symbol links are expected to throw an error. for (fs::recursive_directory_iterator i( Twine(TestDirectory) + "/symlink", ec), e; i != e; i.increment(ec)) { - if (ec == std::make_error_code(std::errc::no_such_file_or_directory)) { + ASSERT_NO_ERROR(ec); + if (i->status().getError() == + std::make_error_code(std::errc::no_such_file_or_directory)) { VisitedBrokenSymlinks.push_back(path::filename(i->path())); continue; } - - ASSERT_NO_ERROR(ec); VisitedNonBrokenSymlinks.push_back(path::filename(i->path())); } - llvm::sort(VisitedNonBrokenSymlinks); - llvm::sort(VisitedBrokenSymlinks); - ExpectedNonBrokenSymlinks = {"b", "bb", "d", "da", "dd", "ddd", "ddd"}; - ASSERT_EQ(ExpectedNonBrokenSymlinks.size(), VisitedNonBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedNonBrokenSymlinks.begin(), - VisitedNonBrokenSymlinks.end(), - ExpectedNonBrokenSymlinks.begin())); + EXPECT_THAT(VisitedNonBrokenSymlinks, + UnorderedElementsAre("b", "bb", "d", "da", "dd", "ddd", "ddd")); VisitedNonBrokenSymlinks.clear(); - ExpectedBrokenSymlinks = {"a", "ba", "bc", "c", "e"}; - ASSERT_EQ(ExpectedBrokenSymlinks.size(), VisitedBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedBrokenSymlinks.begin(), - VisitedBrokenSymlinks.end(), - ExpectedBrokenSymlinks.begin())); + EXPECT_THAT(VisitedBrokenSymlinks, + UnorderedElementsAre("a", "ba", "bc", "c", "e")); VisitedBrokenSymlinks.clear(); for (fs::recursive_directory_iterator i( Twine(TestDirectory) + "/symlink", ec, /*follow_symlinks=*/false), e; i != e; i.increment(ec)) { - if (ec == std::make_error_code(std::errc::no_such_file_or_directory)) { + ASSERT_NO_ERROR(ec); + if (i->status().getError() == + std::make_error_code(std::errc::no_such_file_or_directory)) { VisitedBrokenSymlinks.push_back(path::filename(i->path())); continue; } - - ASSERT_NO_ERROR(ec); VisitedNonBrokenSymlinks.push_back(path::filename(i->path())); } - llvm::sort(VisitedNonBrokenSymlinks); - llvm::sort(VisitedBrokenSymlinks); - ExpectedNonBrokenSymlinks = {"a", "b", "ba", "bb", "bc", "c", "d", "da", "dd", - "ddd", "e"}; - ASSERT_EQ(ExpectedNonBrokenSymlinks.size(), VisitedNonBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedNonBrokenSymlinks.begin(), - VisitedNonBrokenSymlinks.end(), - ExpectedNonBrokenSymlinks.begin())); + EXPECT_THAT(VisitedNonBrokenSymlinks, + UnorderedElementsAreArray({"a", "b", "ba", "bb", "bc", "c", "d", + "da", "dd", "ddd", "e"})); VisitedNonBrokenSymlinks.clear(); - ExpectedBrokenSymlinks = {}; - ASSERT_EQ(ExpectedBrokenSymlinks.size(), VisitedBrokenSymlinks.size()); - ASSERT_TRUE(std::equal(VisitedBrokenSymlinks.begin(), - VisitedBrokenSymlinks.end(), - ExpectedBrokenSymlinks.begin())); + EXPECT_THAT(VisitedBrokenSymlinks, UnorderedElementsAre()); VisitedBrokenSymlinks.clear(); ASSERT_NO_ERROR(fs::remove_directories(Twine(TestDirectory) + "/symlink")); |