diff options
author | Guido van Rossum <guido@python.org> | 2007-09-10 22:02:25 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-09-10 22:02:25 (GMT) |
commit | 1ff91d95a280449cfd9c723a081cb7b19a52e758 (patch) | |
tree | c537822cc870185f7042767b7ed5ca40b7d5da50 /Lib/test/test_re.py | |
parent | 98d19dafd9c9d95338887b9e53c77ec6960918e0 (diff) | |
download | cpython-1ff91d95a280449cfd9c723a081cb7b19a52e758.zip cpython-1ff91d95a280449cfd9c723a081cb7b19a52e758.tar.gz cpython-1ff91d95a280449cfd9c723a081cb7b19a52e758.tar.bz2 |
Patch # 1140 (my code, approved by Effbot).
Make sure the type of the return value of re.sub(x, y, z) is the type
of y+x (i.e. unicode if either is unicode, str if they are both str)
even if there are no substitutions or if x==z (which triggered various
special cases in join_list()).
Could be backported to 2.5; no need to port to 3.0.
Diffstat (limited to 'Lib/test/test_re.py')
-rw-r--r-- | Lib/test/test_re.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index cfb949c..aa403ba 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -83,6 +83,31 @@ class ReTests(unittest.TestCase): self.assertEqual(re.sub('\r\n', '\n', 'abc\r\ndef\r\n'), 'abc\ndef\n') + def test_bug_1140(self): + # re.sub(x, y, u'') should return u'', not '', and + # re.sub(x, y, '') should return '', not u''. + # Also: + # re.sub(x, y, unicode(x)) should return unicode(y), and + # re.sub(x, y, str(x)) should return + # str(y) if isinstance(y, str) else unicode(y). + for x in 'x', u'x': + for y in 'y', u'y': + z = re.sub(x, y, u'') + self.assertEqual(z, u'') + self.assertEqual(type(z), unicode) + # + z = re.sub(x, y, '') + self.assertEqual(z, '') + self.assertEqual(type(z), str) + # + z = re.sub(x, y, unicode(x)) + self.assertEqual(z, y) + self.assertEqual(type(z), unicode) + # + z = re.sub(x, y, str(x)) + self.assertEqual(z, y) + self.assertEqual(type(z), type(y)) + def test_sub_template_numeric_escape(self): # bug 776311 and friends self.assertEqual(re.sub('x', r'\0', 'x'), '\0') |