https://github.com/python/cpython/commit/5a484714c3497dd5c67a1469c0cc246bf1452892
commit: 5a484714c3497dd5c67a1469c0cc246bf1452892
branch: main
author: Barney Gale <barney.g...@gmail.com>
committer: barneygale <barney.g...@gmail.com>
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 -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to