diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-22 22:08:24 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-22 22:08:24 (GMT) |
commit | 0bddc9eb15b88b22676aa516740f3ebd20fb8bb1 (patch) | |
tree | d91365013fc0bfbe21c9cb53a0b6d22a72c22d06 /Lib/test | |
parent | 0ce7a3a34cec0e625f63d46390a8c1d2e167494f (diff) | |
download | cpython-0bddc9eb15b88b22676aa516740f3ebd20fb8bb1.zip cpython-0bddc9eb15b88b22676aa516740f3ebd20fb8bb1.tar.gz cpython-0bddc9eb15b88b22676aa516740f3ebd20fb8bb1.tar.bz2 |
Issue #25860: os.fwalk() no longer skips remaining directories when error occurs.
Original patch by Samson Lee.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_os.py | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 618c18a..6c95ec7 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -791,12 +791,8 @@ class WalkTests(unittest.TestCase): # Wrapper to hide minor differences between os.walk and os.fwalk # to tests both functions with the same code base - def walk(self, directory, topdown=True, follow_symlinks=False): - walk_it = os.walk(directory, - topdown=topdown, - followlinks=follow_symlinks) - for root, dirs, files in walk_it: - yield (root, dirs, files) + def walk(self, directory, **kwargs): + return os.walk(directory, **kwargs) def setUp(self): join = os.path.join @@ -926,16 +922,29 @@ class WalkTests(unittest.TestCase): os.remove(dirname) os.rmdir(support.TESTFN) + def test_walk_bad_dir(self): + # Walk top-down. + errors = [] + walk_it = self.walk(self.walk_path, onerror=errors.append) + root, dirs, files = next(walk_it) + self.assertFalse(errors) + dir1 = dirs[0] + dir1new = dir1 + '.new' + os.rename(os.path.join(root, dir1), os.path.join(root, dir1new)) + roots = [r for r, d, f in walk_it] + self.assertTrue(errors) + self.assertNotIn(os.path.join(root, dir1), roots) + self.assertNotIn(os.path.join(root, dir1new), roots) + for dir2 in dirs[1:]: + self.assertIn(os.path.join(root, dir2), roots) + @unittest.skipUnless(hasattr(os, 'fwalk'), "Test needs os.fwalk()") class FwalkTests(WalkTests): """Tests for os.fwalk().""" - def walk(self, directory, topdown=True, follow_symlinks=False): - walk_it = os.fwalk(directory, - topdown=topdown, - follow_symlinks=follow_symlinks) - for root, dirs, files, root_fd in walk_it: + def walk(self, directory, **kwargs): + for root, dirs, files, root_fd in os.fwalk(directory, **kwargs): yield (root, dirs, files) |