@@ -791,12 +791,8 @@ class WalkTests(unittest.TestCase):
791791
792792 # Wrapper to hide minor differences between os.walk and os.fwalk
793793 # to tests both functions with the same code base
794- def walk (self , directory , topdown = True , follow_symlinks = False ):
795- walk_it = os .walk (directory ,
796- topdown = topdown ,
797- followlinks = follow_symlinks )
798- for root , dirs , files in walk_it :
799- yield (root , dirs , files )
794+ def walk (self , directory , ** kwargs ):
795+ return os .walk (directory , ** kwargs )
800796
801797 def setUp (self ):
802798 join = os .path .join
@@ -926,16 +922,29 @@ def tearDown(self):
926922 os .remove (dirname )
927923 os .rmdir (support .TESTFN )
928924
925+ def test_walk_bad_dir (self ):
926+ # Walk top-down.
927+ errors = []
928+ walk_it = self .walk (self .walk_path , onerror = errors .append )
929+ root , dirs , files = next (walk_it )
930+ self .assertFalse (errors )
931+ dir1 = dirs [0 ]
932+ dir1new = dir1 + '.new'
933+ os .rename (os .path .join (root , dir1 ), os .path .join (root , dir1new ))
934+ roots = [r for r , d , f in walk_it ]
935+ self .assertTrue (errors )
936+ self .assertNotIn (os .path .join (root , dir1 ), roots )
937+ self .assertNotIn (os .path .join (root , dir1new ), roots )
938+ for dir2 in dirs [1 :]:
939+ self .assertIn (os .path .join (root , dir2 ), roots )
940+
929941
930942@unittest .skipUnless (hasattr (os , 'fwalk' ), "Test needs os.fwalk()" )
931943class FwalkTests (WalkTests ):
932944 """Tests for os.fwalk()."""
933945
934- def walk (self , directory , topdown = True , follow_symlinks = False ):
935- walk_it = os .fwalk (directory ,
936- topdown = topdown ,
937- follow_symlinks = follow_symlinks )
938- for root , dirs , files , root_fd in walk_it :
946+ def walk (self , directory , ** kwargs ):
947+ for root , dirs , files , root_fd in os .fwalk (directory , ** kwargs ):
939948 yield (root , dirs , files )
940949
941950
0 commit comments