summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/collections/__init__.py8
-rw-r--r--Lib/test/string_tests.py36
-rw-r--r--Lib/test/test_doctest.py2
3 files changed, 45 insertions, 1 deletions
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index e198406..bb9a605 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -1239,6 +1239,14 @@ class UserString(_collections_abc.Sequence):
if isinstance(sub, UserString):
sub = sub.data
return self.data.count(sub, start, end)
+ def removeprefix(self, prefix, /):
+ if isinstance(prefix, UserString):
+ prefix = prefix.data
+ return self.__class__(self.data.removeprefix(prefix))
+ def removesuffix(self, suffix, /):
+ if isinstance(suffix, UserString):
+ suffix = suffix.data
+ return self.__class__(self.data.removesuffix(suffix))
def encode(self, encoding='utf-8', errors='strict'):
encoding = 'utf-8' if encoding is None else encoding
errors = 'strict' if errors is None else errors
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 948e2a3..527f505 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -682,6 +682,42 @@ class BaseTest:
self.checkraises(OverflowError, A2_16, "replace", "A", A2_16)
self.checkraises(OverflowError, A2_16, "replace", "AA", A2_16+A2_16)
+ def test_removeprefix(self):
+ self.checkequal('am', 'spam', 'removeprefix', 'sp')
+ self.checkequal('spamspam', 'spamspamspam', 'removeprefix', 'spam')
+ self.checkequal('spam', 'spam', 'removeprefix', 'python')
+ self.checkequal('spam', 'spam', 'removeprefix', 'spider')
+ self.checkequal('spam', 'spam', 'removeprefix', 'spam and eggs')
+
+ self.checkequal('', '', 'removeprefix', '')
+ self.checkequal('', '', 'removeprefix', 'abcde')
+ self.checkequal('abcde', 'abcde', 'removeprefix', '')
+ self.checkequal('', 'abcde', 'removeprefix', 'abcde')
+
+ self.checkraises(TypeError, 'hello', 'removeprefix')
+ self.checkraises(TypeError, 'hello', 'removeprefix', 42)
+ self.checkraises(TypeError, 'hello', 'removeprefix', 42, 'h')
+ self.checkraises(TypeError, 'hello', 'removeprefix', 'h', 42)
+ self.checkraises(TypeError, 'hello', 'removeprefix', ("he", "l"))
+
+ def test_removesuffix(self):
+ self.checkequal('sp', 'spam', 'removesuffix', 'am')
+ self.checkequal('spamspam', 'spamspamspam', 'removesuffix', 'spam')
+ self.checkequal('spam', 'spam', 'removesuffix', 'python')
+ self.checkequal('spam', 'spam', 'removesuffix', 'blam')
+ self.checkequal('spam', 'spam', 'removesuffix', 'eggs and spam')
+
+ self.checkequal('', '', 'removesuffix', '')
+ self.checkequal('', '', 'removesuffix', 'abcde')
+ self.checkequal('abcde', 'abcde', 'removesuffix', '')
+ self.checkequal('', 'abcde', 'removesuffix', 'abcde')
+
+ self.checkraises(TypeError, 'hello', 'removesuffix')
+ self.checkraises(TypeError, 'hello', 'removesuffix', 42)
+ self.checkraises(TypeError, 'hello', 'removesuffix', 42, 'h')
+ self.checkraises(TypeError, 'hello', 'removesuffix', 'h', 42)
+ self.checkraises(TypeError, 'hello', 'removesuffix', ("lo", "l"))
+
def test_capitalize(self):
self.checkequal(' hello ', ' hello ', 'capitalize')
self.checkequal('Hello ', 'Hello ','capitalize')
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 7142627..16196fe 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -665,7 +665,7 @@ plain ol' Python and is guaranteed to be available.
>>> import builtins
>>> tests = doctest.DocTestFinder().find(builtins)
- >>> 810 < len(tests) < 830 # approximate number of objects with docstrings
+ >>> 816 < len(tests) < 836 # approximate number of objects with docstrings
True
>>> real_tests = [t for t in tests if len(t.examples) > 0]
>>> len(real_tests) # objects that actually have doctests