GH-103517: Improve tests for pathlib.Path.walk() (GH-103518)

This commit is contained in:
Barney Gale 2023-04-15 17:35:17 +01:00 committed by GitHub
parent 2b6f5c3483
commit 0097c36e07
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2702,20 +2702,20 @@ class WalkTests(unittest.TestCase):
del self.sub2_tree[1][:1] del self.sub2_tree[1][:1]
def test_walk_topdown(self): def test_walk_topdown(self):
all = list(self.walk_path.walk()) walker = self.walk_path.walk()
entry = next(walker)
self.assertEqual(len(all), 4) entry[1].sort() # Ensure we visit SUB1 before SUB2
# We can't know which order SUB1 and SUB2 will appear in. self.assertEqual(entry, (self.walk_path, ["SUB1", "SUB2"], ["tmp1"]))
# Not flipped: TESTFN, SUB1, SUB11, SUB2 entry = next(walker)
# flipped: TESTFN, SUB2, SUB1, SUB11 self.assertEqual(entry, (self.sub1_path, ["SUB11"], ["tmp2"]))
flipped = all[0][1][0] != "SUB1" entry = next(walker)
all[0][1].sort() self.assertEqual(entry, (self.sub11_path, [], []))
all[3 - 2 * flipped][-1].sort() entry = next(walker)
all[3 - 2 * flipped][1].sort() entry[1].sort()
self.assertEqual(all[0], (self.walk_path, ["SUB1", "SUB2"], ["tmp1"])) entry[2].sort()
self.assertEqual(all[1 + flipped], (self.sub1_path, ["SUB11"], ["tmp2"])) self.assertEqual(entry, self.sub2_tree)
self.assertEqual(all[2 + flipped], (self.sub11_path, [], [])) with self.assertRaises(StopIteration):
self.assertEqual(all[3 - 2 * flipped], self.sub2_tree) next(walker)
def test_walk_prune(self, walk_path=None): def test_walk_prune(self, walk_path=None):
if walk_path is None: if walk_path is None:
@ -2739,24 +2739,37 @@ class WalkTests(unittest.TestCase):
self.test_walk_prune(FakePath(self.walk_path).__fspath__()) self.test_walk_prune(FakePath(self.walk_path).__fspath__())
def test_walk_bottom_up(self): def test_walk_bottom_up(self):
all = list(self.walk_path.walk( top_down=False)) seen_testfn = seen_sub1 = seen_sub11 = seen_sub2 = False
for path, dirnames, filenames in self.walk_path.walk(top_down=False):
self.assertEqual(len(all), 4, all) if path == self.walk_path:
# We can't know which order SUB1 and SUB2 will appear in. self.assertFalse(seen_testfn)
# Not flipped: SUB11, SUB1, SUB2, TESTFN self.assertTrue(seen_sub1)
# flipped: SUB2, SUB11, SUB1, TESTFN self.assertTrue(seen_sub2)
flipped = all[3][1][0] != "SUB1" self.assertEqual(sorted(dirnames), ["SUB1", "SUB2"])
all[3][1].sort() self.assertEqual(filenames, ["tmp1"])
all[2 - 2 * flipped][-1].sort() seen_testfn = True
all[2 - 2 * flipped][1].sort() elif path == self.sub1_path:
self.assertEqual(all[3], self.assertFalse(seen_testfn)
(self.walk_path, ["SUB1", "SUB2"], ["tmp1"])) self.assertFalse(seen_sub1)
self.assertEqual(all[flipped], self.assertTrue(seen_sub11)
(self.sub11_path, [], [])) self.assertEqual(dirnames, ["SUB11"])
self.assertEqual(all[flipped + 1], self.assertEqual(filenames, ["tmp2"])
(self.sub1_path, ["SUB11"], ["tmp2"])) seen_sub1 = True
self.assertEqual(all[2 - 2 * flipped], elif path == self.sub11_path:
self.sub2_tree) self.assertFalse(seen_sub1)
self.assertFalse(seen_sub11)
self.assertEqual(dirnames, [])
self.assertEqual(filenames, [])
seen_sub11 = True
elif path == self.sub2_path:
self.assertFalse(seen_testfn)
self.assertFalse(seen_sub2)
self.assertEqual(sorted(dirnames), sorted(self.sub2_tree[1]))
self.assertEqual(sorted(filenames), sorted(self.sub2_tree[2]))
seen_sub2 = True
else:
raise AssertionError(f"Unexpected path: {path}")
self.assertTrue(seen_testfn)
@os_helper.skip_unless_symlink @os_helper.skip_unless_symlink
def test_walk_follow_symlinks(self): def test_walk_follow_symlinks(self):