aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_pathlib/test_pathlib.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2024-12-23 17:22:15 +0000
committerGitHub <noreply@github.com>2024-12-23 17:22:15 +0000
commitd61542b5ff1fe64705e5ce1bcc53048f14098dba (patch)
treead512bcc0a38c765b7ae1b0893b4d22ee51858ae /Lib/test/test_pathlib/test_pathlib.py
parentc5b0c90b62f1a10b0742db4bcd17da080d4e9111 (diff)
downloadcpython-d61542b5ff1fe64705e5ce1bcc53048f14098dba.tar.gz
cpython-d61542b5ff1fe64705e5ce1bcc53048f14098dba.zip
pathlib tests: create test hierarchy without using class under test (#128200)
In the pathlib tests, 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`.
Diffstat (limited to 'Lib/test/test_pathlib/test_pathlib.py')
-rw-r--r--Lib/test/test_pathlib/test_pathlib.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py
index ef482c31154..fac8cbdf65a 100644
--- a/Lib/test/test_pathlib/test_pathlib.py
+++ b/Lib/test/test_pathlib/test_pathlib.py
@@ -578,10 +578,44 @@ class PathTest(test_pathlib_abc.DummyPathTest, PurePathTest):
if name in _tests_needing_symlinks and not self.can_symlink:
self.skipTest('requires symlinks')
super().setUp()
- os.chmod(self.parser.join(self.base, 'dirE'), 0)
+
+ def createTestHierarchy(self):
+ os.mkdir(self.base)
+ os.mkdir(os.path.join(self.base, 'dirA'))
+ os.mkdir(os.path.join(self.base, 'dirB'))
+ os.mkdir(os.path.join(self.base, 'dirC'))
+ os.mkdir(os.path.join(self.base, 'dirC', 'dirD'))
+ os.mkdir(os.path.join(self.base, 'dirE'))
+ with open(os.path.join(self.base, 'fileA'), 'wb') as f:
+ f.write(b"this is file A\n")
+ with open(os.path.join(self.base, 'dirB', 'fileB'), 'wb') as f:
+ f.write(b"this is file B\n")
+ with open(os.path.join(self.base, 'dirC', 'fileC'), 'wb') as f:
+ f.write(b"this is file C\n")
+ with open(os.path.join(self.base, 'dirC', 'novel.txt'), 'wb') as f:
+ f.write(b"this is a novel\n")
+ with open(os.path.join(self.base, 'dirC', 'dirD', 'fileD'), 'wb') as f:
+ f.write(b"this is file D\n")
+ os.chmod(os.path.join(self.base, 'dirE'), 0)
+ if self.can_symlink:
+ # Relative symlinks.
+ os.symlink('fileA', os.path.join(self.base, 'linkA'))
+ os.symlink('non-existing', os.path.join(self.base, 'brokenLink'))
+ os.symlink('dirB',
+ os.path.join(self.base, 'linkB'),
+ target_is_directory=True)
+ os.symlink(os.path.join('..', 'dirB'),
+ os.path.join(self.base, 'dirA', 'linkC'),
+ target_is_directory=True)
+ # This one goes upwards, creating a loop.
+ os.symlink(os.path.join('..', 'dirB'),
+ os.path.join(self.base, 'dirB', 'linkD'),
+ target_is_directory=True)
+ # Broken symlink (pointing to itself).
+ os.symlink('brokenLinkLoop', os.path.join(self.base, 'brokenLinkLoop'))
def tearDown(self):
- os.chmod(self.parser.join(self.base, 'dirE'), 0o777)
+ os.chmod(os.path.join(self.base, 'dirE'), 0o777)
os_helper.rmtree(self.base)
def tempdir(self):