https://github.com/python/cpython/commit/5a484714c3497dd5c67a1469c0cc246bf1452892
commit: 5a484714c3497dd5c67a1469c0cc246bf1452892
branch: main
author: Barney Gale <[email protected]>
committer: barneygale <[email protected]>
date: 2025-03-10T17:59:10Z
summary:
GH-130614: pathlib ABCs: revise test suite for Posix path joining (#131017)
Test Posix-flavoured `pathlib.types._JoinablePath` in a dedicated test
module. These tests cover `LexicalPosixPath`, `PurePosixPath` and
`PosixPath`, where `LexicalPosixPath` is a simple implementation of
`_JoinablePath` for use in tests.
files:
A Lib/test/test_pathlib/test_join_posix.py
M Lib/test/test_pathlib/support/lexical_path.py
M Lib/test/test_pathlib/test_pathlib_abc.py
diff --git a/Lib/test/test_pathlib/support/lexical_path.py
b/Lib/test/test_pathlib/support/lexical_path.py
index 687d76f64532f2..27dec30d0bdd5a 100644
--- a/Lib/test/test_pathlib/support/lexical_path.py
+++ b/Lib/test/test_pathlib/support/lexical_path.py
@@ -4,6 +4,7 @@
import os.path
import pathlib.types
+import posixpath
class LexicalPath(pathlib.types._JoinablePath):
@@ -31,3 +32,8 @@ def __repr__(self):
def with_segments(self, *pathsegments):
return type(self)(*pathsegments)
+
+
+class LexicalPosixPath(LexicalPath):
+ __slots__ = ()
+ parser = posixpath
diff --git a/Lib/test/test_pathlib/test_join_posix.py
b/Lib/test/test_pathlib/test_join_posix.py
new file mode 100644
index 00000000000000..7f657c2565d5ec
--- /dev/null
+++ b/Lib/test/test_pathlib/test_join_posix.py
@@ -0,0 +1,49 @@
+"""
+Tests for Posix-flavoured pathlib.types._JoinablePath
+"""
+
+import os
+import unittest
+
+from pathlib import PurePosixPath, PosixPath
+from test.test_pathlib.support.lexical_path import LexicalPosixPath
+
+
+class JoinTestBase:
+ def test_join(self):
+ P = self.cls
+ p = P('//a')
+ pp = p.joinpath('b')
+ self.assertEqual(pp, P('//a/b'))
+ pp = P('/a').joinpath('//c')
+ self.assertEqual(pp, P('//c'))
+ pp = P('//a').joinpath('/c')
+ self.assertEqual(pp, P('/c'))
+
+ def test_div(self):
+ # Basically the same as joinpath().
+ P = self.cls
+ p = P('//a')
+ pp = p / 'b'
+ self.assertEqual(pp, P('//a/b'))
+ pp = P('/a') / '//c'
+ self.assertEqual(pp, P('//c'))
+ pp = P('//a') / '/c'
+ self.assertEqual(pp, P('/c'))
+
+
+class LexicalPosixPathJoinTest(JoinTestBase, unittest.TestCase):
+ cls = LexicalPosixPath
+
+
+class PurePosixPathJoinTest(JoinTestBase, unittest.TestCase):
+ cls = PurePosixPath
+
+
+if os.name != 'nt':
+ class PosixPathJoinTest(JoinTestBase, unittest.TestCase):
+ cls = PosixPath
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/Lib/test/test_pathlib/test_pathlib_abc.py
b/Lib/test/test_pathlib/test_pathlib_abc.py
index 1b9db475138ff1..779c8a60bece82 100644
--- a/Lib/test/test_pathlib/test_pathlib_abc.py
+++ b/Lib/test/test_pathlib/test_pathlib_abc.py
@@ -108,17 +108,6 @@ def test_str_subclass_windows(self):
self._check_str_subclass('\\\\some\\share\\a')
self._check_str_subclass('\\\\some\\share\\a\\b.txt')
- @needs_posix
- def test_join_posix(self):
- P = self.cls
- p = P('//a')
- pp = p.joinpath('b')
- self.assertEqual(pp, P('//a/b'))
- pp = P('/a').joinpath('//c')
- self.assertEqual(pp, P('//c'))
- pp = P('//a').joinpath('/c')
- self.assertEqual(pp, P('/c'))
-
@needs_windows
def test_join_windows(self):
P = self.cls
@@ -157,18 +146,6 @@ def test_join_windows(self):
pp = P('//./BootPartition').joinpath('Windows')
self.assertEqual(pp, P('//./BootPartition/Windows'))
- @needs_posix
- def test_div_posix(self):
- # Basically the same as joinpath().
- P = self.cls
- p = P('//a')
- pp = p / 'b'
- self.assertEqual(pp, P('//a/b'))
- pp = P('/a') / '//c'
- self.assertEqual(pp, P('//c'))
- pp = P('//a') / '/c'
- self.assertEqual(pp, P('/c'))
-
@needs_windows
def test_div_windows(self):
# Basically the same as joinpath().
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]