summaryrefslogtreecommitdiff
path: root/Lib/test/test_unicode.py
diff options
context:
space:
mode:
authorMartijn Pieters <github.com@zopatista.com>2017-02-23 13:38:04 +0000
committerSerhiy Storchaka <storchaka@gmail.com>2017-02-23 15:38:04 +0200
commitd7e64337ef45085792b382a09f5b3a45d3687c8c (patch)
treee564cb5e7c44b866630e0de6550b6862f82a3a68 /Lib/test/test_unicode.py
parent2771304357607aa62801a67acc1e3c7c8ec489ce (diff)
downloadcpython-git-d7e64337ef45085792b382a09f5b3a45d3687c8c.tar.gz
bpo-28598: Support __rmod__ for RHS subclasses of str in % string formatting operations (#51)
When you use `'%s' % SubClassOfStr()`, where `SubClassOfStr.__rmod__` exists, the reverse operation is ignored as normally such string formatting operations use the `PyUnicode_Format()` fast path. This patch tests for subclasses of `str` first and picks the slow path in that case. Patch by Martijn Pieters.
Diffstat (limited to 'Lib/test/test_unicode.py')
-rw-r--r--Lib/test/test_unicode.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index b1f7c8966a..f70504c11a 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1448,6 +1448,15 @@ class UnicodeTest(string_tests.CommonTest,
with self.assertRaises(ValueError):
result = format_string % 2.34
+ def test_issue28598_strsubclass_rhs(self):
+ # A subclass of str with an __rmod__ method should be able to hook
+ # into the % operator
+ class SubclassedStr(str):
+ def __rmod__(self, other):
+ return 'Success, self.__rmod__({!r}) was called'.format(other)
+ self.assertEqual('lhs %% %r' % SubclassedStr('rhs'),
+ "Success, self.__rmod__('lhs %% %r') was called")
+
@support.cpython_only
def test_formatting_huge_precision_c_limits(self):
from _testcapi import INT_MAX