From 2ee4be077534577eed52c136d10d9f8c0731e864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Walter=20D=C3=B6rwald?= Date: Wed, 17 Apr 2002 21:34:05 +0000 Subject: Apply diff3.txt from SF patch http://www.python.org/sf/536241 If a str or unicode method returns the original object, make sure that for str and unicode subclasses the original will not be returned. This should prevent SF bug http://www.python.org/sf/460020 from reappearing. --- Lib/test/test_string.py | 19 +++++++++++++++++++ Lib/test/test_unicode.py | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/Lib/test/test_string.py b/Lib/test/test_string.py index 4c5a60a..8f0ea47 100644 --- a/Lib/test/test_string.py +++ b/Lib/test/test_string.py @@ -22,6 +22,25 @@ def test(name, input, output, *args): except: value = sys.exc_type f = name + if value == output: + # if the original is returned make sure that + # this doesn't happen with subclasses + if value is input: + class ssub(str): + def __repr__(self): + return 'ssub(%r)' % str.__repr__(self) + input = ssub(input) + try: + f = getattr(input, name) + value = apply(f, args) + except AttributeError: + f = getattr(string, name) + value = apply(f, (input,) + args) + if value is input: + if verbose: + print 'no' + print '*',f, `input`, `output`, `value` + return if value != output: if verbose: print 'no' diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index c04d929..8e8ddf9 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -52,6 +52,25 @@ def test(method, input, output, *args): exc = sys.exc_info()[:2] else: exc = None + if value == output and type(value) is type(output): + # if the original is returned make sure that + # this doesn't happen with subclasses + if value is input: + class usub(unicode): + def __repr__(self): + return 'usub(%r)' % unicode.__repr__(self) + input = usub(input) + try: + f = getattr(input, method) + value = apply(f, args) + except: + value = sys.exc_type + exc = sys.exc_info()[:2] + if value is input: + if verbose: + print 'no' + print '*',f, `input`, `output`, `value` + return if value != output or type(value) is not type(output): if verbose: print 'no' @@ -63,6 +82,7 @@ def test(method, input, output, *args): print 'yes' test('capitalize', u' hello ', u' hello ') +test('capitalize', u'Hello ', u'Hello ') test('capitalize', u'hello ', u'Hello ') test('capitalize', u'aaaa', u'Aaaa') test('capitalize', u'AaAa', u'Aaaa') @@ -75,6 +95,7 @@ test('count', u'aaa', 3, 'a') test('count', u'aaa', 0, 'b') test('title', u' hello ', u' Hello ') +test('title', u'Hello ', u'Hello ') test('title', u'hello ', u'Hello ') test('title', u"fOrMaT thIs aS titLe String", u'Format This As Title String') test('title', u"fOrMaT,thIs-aS*titLe;String", u'Format,This-As*Title;String') @@ -200,6 +221,7 @@ test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi') test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 8) test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 4) test('expandtabs', u'abc\r\nab\tdef\ng\thi', u'abc\r\nab def\ng hi', 4) +test('expandtabs', u'abc\r\nab\r\ndef\ng\r\nhi', u'abc\r\nab\r\ndef\ng\r\nhi', 4) if 0: test('capwords', u'abc def ghi', u'Abc Def Ghi') -- cgit v0.12