]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-130614: pathlib ABCs: revise test suite for Posix path joining (#131017)
authorBarney Gale <barney.gale@gmail.com>
Mon, 10 Mar 2025 17:59:10 +0000 (17:59 +0000)
committerGitHub <noreply@github.com>
Mon, 10 Mar 2025 17:59:10 +0000 (17:59 +0000)
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.

Lib/test/test_pathlib/support/lexical_path.py
Lib/test/test_pathlib/test_join_posix.py [new file with mode: 0644]
Lib/test/test_pathlib/test_pathlib_abc.py

index 687d76f64532f2bb2aa3454c661187b51f59765a..27dec30d0bdd5ad7e8f5d996f29b0d364e057478 100644 (file)
@@ -4,6 +4,7 @@ Simple implementation of JoinablePath, for use in pathlib tests.
 
 import os.path
 import pathlib.types
+import posixpath
 
 
 class LexicalPath(pathlib.types._JoinablePath):
@@ -31,3 +32,8 @@ class LexicalPath(pathlib.types._JoinablePath):
 
     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 (file)
index 0000000..7f657c2
--- /dev/null
@@ -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()
index 1b9db475138ff124a78ce6fe5d9a4e1c25d24fe5..779c8a60bece82010df56ec0ce10dbc00b514ccd 100644 (file)
@@ -108,17 +108,6 @@ class JoinablePathTest(unittest.TestCase):
         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 @@ class JoinablePathTest(unittest.TestCase):
         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().