summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2025-01-04 15:45:24 (GMT)
committerGitHub <noreply@github.com>2025-01-04 15:45:24 (GMT)
commitfd94c6a8032676d0659aa9e38cdaa7c17093119c (patch)
tree099239f9f06ac55d67e8cab49d8fa175305dacb7
parenta0088b40bb212dc132e147d04f9287cabd72d163 (diff)
downloadcpython-fd94c6a8032676d0659aa9e38cdaa7c17093119c.zip
cpython-fd94c6a8032676d0659aa9e38cdaa7c17093119c.tar.gz
cpython-fd94c6a8032676d0659aa9e38cdaa7c17093119c.tar.bz2
pathlib tests: create `walk()` test hierarchy without using class under test (#128338)
In the tests for `pathlib.Path.walk()`, avoid using the path class under test (`self.cls`) in test setup. Instead we use `os` functions in `test_pathlib`, and direct manipulation of `DummyPath` internal data in `test_pathlib_abc`.
-rw-r--r--Lib/test/test_pathlib/test_pathlib.py38
-rw-r--r--Lib/test/test_pathlib/test_pathlib_abc.py59
2 files changed, 58 insertions, 39 deletions
diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py
index a67a1c5..6548577 100644
--- a/Lib/test/test_pathlib/test_pathlib.py
+++ b/Lib/test/test_pathlib/test_pathlib.py
@@ -3029,6 +3029,42 @@ class PathWalkTest(test_pathlib_abc.DummyPathWalkTest):
if name in _tests_needing_symlinks and not self.can_symlink:
self.skipTest('requires symlinks')
super().setUp()
+
+ def createTestHierarchy(self):
+ # Build:
+ # TESTFN/
+ # TEST1/ a file kid and two directory kids
+ # tmp1
+ # SUB1/ a file kid and a directory kid
+ # tmp2
+ # SUB11/ no kids
+ # SUB2/ a file kid and a dirsymlink kid
+ # tmp3
+ # link/ a symlink to TEST2
+ # broken_link
+ # broken_link2
+ # TEST2/
+ # tmp4 a lone file
+ t2_path = self.cls(self.base, "TEST2")
+ os.makedirs(self.sub11_path)
+ os.makedirs(self.sub2_path)
+ os.makedirs(t2_path)
+
+ tmp1_path = self.walk_path / "tmp1"
+ tmp2_path = self.sub1_path / "tmp2"
+ tmp3_path = self.sub2_path / "tmp3"
+ tmp4_path = self.cls(self.base, "TEST2", "tmp4")
+ for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path:
+ with open(path, "w", encoding='utf-8') as f:
+ f.write(f"I'm {path} and proud of it. Blame test_pathlib.\n")
+
+ if self.can_symlink:
+ broken_link_path = self.sub2_path / "broken_link"
+ broken_link2_path = self.sub2_path / "broken_link2"
+ os.symlink(t2_path, self.link_path, target_is_directory=True)
+ os.symlink('broken', broken_link_path)
+ os.symlink(os.path.join('tmp3', 'broken'), broken_link2_path)
+ self.sub2_tree = (self.sub2_path, [], ["broken_link", "broken_link2", "link", "tmp3"])
sub21_path= self.sub2_path / "SUB21"
tmp5_path = sub21_path / "tmp3"
broken_link3_path = self.sub2_path / "broken_link3"
@@ -3052,7 +3088,7 @@ class PathWalkTest(test_pathlib_abc.DummyPathWalkTest):
def tearDown(self):
if 'SUB21' in self.sub2_tree[1]:
os.chmod(self.sub2_path / "SUB21", stat.S_IRWXU)
- super().tearDown()
+ os_helper.rmtree(self.base)
def test_walk_bad_dir(self):
errors = []
diff --git a/Lib/test/test_pathlib/test_pathlib_abc.py b/Lib/test/test_pathlib/test_pathlib_abc.py
index 0762f22..87aef0c 100644
--- a/Lib/test/test_pathlib/test_pathlib_abc.py
+++ b/Lib/test/test_pathlib/test_pathlib_abc.py
@@ -1580,52 +1580,35 @@ class DummyPathWalkTest(unittest.TestCase):
can_symlink = False
def setUp(self):
- # Build:
- # TESTFN/
- # TEST1/ a file kid and two directory kids
- # tmp1
- # SUB1/ a file kid and a directory kid
- # tmp2
- # SUB11/ no kids
- # SUB2/ a file kid and a dirsymlink kid
- # tmp3
- # link/ a symlink to TEST2
- # broken_link
- # broken_link2
- # TEST2/
- # tmp4 a lone file
self.walk_path = self.cls(self.base, "TEST1")
self.sub1_path = self.walk_path / "SUB1"
self.sub11_path = self.sub1_path / "SUB11"
self.sub2_path = self.walk_path / "SUB2"
- tmp1_path = self.walk_path / "tmp1"
- tmp2_path = self.sub1_path / "tmp2"
- tmp3_path = self.sub2_path / "tmp3"
self.link_path = self.sub2_path / "link"
- t2_path = self.cls(self.base, "TEST2")
- tmp4_path = self.cls(self.base, "TEST2", "tmp4")
- broken_link_path = self.sub2_path / "broken_link"
- broken_link2_path = self.sub2_path / "broken_link2"
-
- self.sub11_path.mkdir(parents=True)
- self.sub2_path.mkdir(parents=True)
- t2_path.mkdir(parents=True)
-
- for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path:
- with path.open("w", encoding='utf-8') as f:
- f.write(f"I'm {path} and proud of it. Blame test_pathlib.\n")
+ self.sub2_tree = (self.sub2_path, [], ["tmp3"])
+ self.createTestHierarchy()
- if self.can_symlink:
- self.link_path.symlink_to(t2_path, target_is_directory=True)
- broken_link_path.symlink_to('broken')
- broken_link2_path.symlink_to(self.cls('tmp3', 'broken'))
- self.sub2_tree = (self.sub2_path, [], ["broken_link", "broken_link2", "link", "tmp3"])
- else:
- self.sub2_tree = (self.sub2_path, [], ["tmp3"])
+ def createTestHierarchy(self):
+ cls = self.cls
+ cls._files = {
+ f'{self.base}/TEST1/tmp1': b'this is tmp1\n',
+ f'{self.base}/TEST1/SUB1/tmp2': b'this is tmp2\n',
+ f'{self.base}/TEST1/SUB2/tmp3': b'this is tmp3\n',
+ f'{self.base}/TEST2/tmp4': b'this is tmp4\n',
+ }
+ cls._directories = {
+ f'{self.base}': {'TEST1', 'TEST2'},
+ f'{self.base}/TEST1': {'SUB1', 'SUB2', 'tmp1'},
+ f'{self.base}/TEST1/SUB1': {'SUB11', 'tmp2'},
+ f'{self.base}/TEST1/SUB1/SUB11': set(),
+ f'{self.base}/TEST1/SUB2': {'tmp3'},
+ f'{self.base}/TEST2': {'tmp4'},
+ }
def tearDown(self):
- base = self.cls(self.base)
- base._delete()
+ cls = self.cls
+ cls._files.clear()
+ cls._directories.clear()
def test_walk_topdown(self):
walker = self.walk_path.walk()