mirror of
https://github.com/python/cpython.git
synced 2025-10-21 14:12:27 +00:00
pathlib ABCs: tighten up resolve()
and absolute()
(#126611)
In `PathBase.resolve()`, raise `UnsupportedOperation` if a non-POSIX path parser is used (our implementation uses `posixpath._realpath()`, which produces incorrect results for non-POSIX path flavours.) Also tweak code to call `self.absolute()` upfront rather than supplying an emulated `getcwd()` function. Adjust `PathBase.absolute()` to work somewhat like `resolve()`. If a POSIX path parser is used, we treat the root directory as the current directory. This is the simplest useful behaviour for concrete path types without a current directory cursor.
This commit is contained in:
parent
0f47a3199c
commit
266328552e
3 changed files with 53 additions and 32 deletions
|
@ -861,6 +861,28 @@ class PathTest(test_pathlib_abc.DummyPathTest, PurePathTest):
|
|||
def test_move_into_empty_name_other_os(self):
|
||||
self.test_move_into_empty_name()
|
||||
|
||||
def _check_complex_symlinks(self, link0_target):
|
||||
super()._check_complex_symlinks(link0_target)
|
||||
P = self.cls(self.base)
|
||||
# Resolve relative paths.
|
||||
old_path = os.getcwd()
|
||||
os.chdir(self.base)
|
||||
try:
|
||||
p = self.cls('link0').resolve()
|
||||
self.assertEqual(p, P)
|
||||
self.assertEqualNormCase(str(p), self.base)
|
||||
p = self.cls('link1').resolve()
|
||||
self.assertEqual(p, P)
|
||||
self.assertEqualNormCase(str(p), self.base)
|
||||
p = self.cls('link2').resolve()
|
||||
self.assertEqual(p, P)
|
||||
self.assertEqualNormCase(str(p), self.base)
|
||||
p = self.cls('link3').resolve()
|
||||
self.assertEqual(p, P)
|
||||
self.assertEqualNormCase(str(p), self.base)
|
||||
finally:
|
||||
os.chdir(old_path)
|
||||
|
||||
def test_resolve_nonexist_relative_issue38671(self):
|
||||
p = self.cls('non', 'exist')
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue