summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_pathlib/support/lexical_path.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2025-03-09 17:02:37 (GMT)
committerGitHub <noreply@github.com>2025-03-09 17:02:37 (GMT)
commit475f933ed8b1c9546f1b5497a2241140c7065b5f (patch)
treed09ed5bdbee1ee536ff46e52ba19ce8ac5889761 /Lib/test/test_pathlib/support/lexical_path.py
parentbbd6d17ef85e5de885cdfab0ae567184ba1550ff (diff)
downloadcpython-475f933ed8b1c9546f1b5497a2241140c7065b5f.zip
cpython-475f933ed8b1c9546f1b5497a2241140c7065b5f.tar.gz
cpython-475f933ed8b1c9546f1b5497a2241140c7065b5f.tar.bz2
GH-130614: pathlib ABCs: revise test suite for path joining (#130988)
Test `pathlib.types._JoinablePath` in a dedicated test module. These tests cover `LexicalPath`, `PurePath` and `Path`, where `LexicalPath` is defined in a new `test.test_pathlib.support` package.
Diffstat (limited to 'Lib/test/test_pathlib/support/lexical_path.py')
-rw-r--r--Lib/test/test_pathlib/support/lexical_path.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/Lib/test/test_pathlib/support/lexical_path.py b/Lib/test/test_pathlib/support/lexical_path.py
new file mode 100644
index 0000000..687d76f
--- /dev/null
+++ b/Lib/test/test_pathlib/support/lexical_path.py
@@ -0,0 +1,33 @@
+"""
+Simple implementation of JoinablePath, for use in pathlib tests.
+"""
+
+import os.path
+import pathlib.types
+
+
+class LexicalPath(pathlib.types._JoinablePath):
+ __slots__ = ('_segments',)
+ parser = os.path
+
+ def __init__(self, *pathsegments):
+ self._segments = pathsegments
+
+ def __hash__(self):
+ return hash(str(self))
+
+ def __eq__(self, other):
+ if not isinstance(other, LexicalPath):
+ return NotImplemented
+ return str(self) == str(other)
+
+ def __str__(self):
+ if not self._segments:
+ return ''
+ return self.parser.join(*self._segments)
+
+ def __repr__(self):
+ return f'{type(self).__name__}({str(self)!r})'
+
+ def with_segments(self, *pathsegments):
+ return type(self)(*pathsegments)