diff options
Diffstat (limited to 'Lib/test/test_userstring.py')
-rwxr-xr-x | Lib/test/test_userstring.py | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py new file mode 100755 index 0000000..c12f1e2 --- /dev/null +++ b/Lib/test/test_userstring.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python +import sys, string +from test_support import verbose +# UserString is a wrapper around the native builtin string type. +# UserString instances should behave similar to builtin string objects. +# The test cases were in part derived from 'test_string.py'. +from UserString import UserString + +if __name__ == "__main__": + verbose = 0 + +tested_methods = {} + +def test(methodname, input, *args): + global tested_methods + tested_methods[methodname] = 1 + if verbose: + print '%s.%s(%s) ' % (input, methodname, args), + u = UserString(input) + objects = [input, u, UserString(u)] + res = [""] * 3 + for i in range(3): + object = objects[i] + try: + f = getattr(object, methodname) + res[i] = apply(f, args) + except: + res[i] = sys.exc_type + if res[0] != res[1]: + if verbose: + print 'no' + print `input`, f, `res[0]`, "<>", `res[1]` + else: + if verbose: + print 'yes' + if res[1] != res[2]: + if verbose: + print 'no' + print `input`, f, `res[1]`, "<>", `res[2]` + else: + if verbose: + print 'yes' + +test('capitalize', ' hello ') +test('capitalize', 'hello ') + +test('center', 'foo', 0) +test('center', 'foo', 3) +test('center', 'foo', 16) + +test('ljust', 'foo', 0) +test('ljust', 'foo', 3) +test('ljust', 'foo', 16) + +test('rjust', 'foo', 0) +test('rjust', 'foo', 3) +test('rjust', 'foo', 16) + +test('count', 'abcabcabc', 'abc') +test('count', 'abcabcabc', 'abc', 1) +test('count', 'abcabcabc', 'abc', -1) +test('count', 'abcabcabc', 'abc', 7) +test('count', 'abcabcabc', 'abc', 0, 3) +test('count', 'abcabcabc', 'abc', 0, 333) + +test('find', 'abcdefghiabc', 'abc') +test('find', 'abcdefghiabc', 'abc', 1) +test('find', 'abcdefghiabc', 'def', 4) +test('rfind', 'abcdefghiabc', 'abc') + +test('index', 'abcabcabc', 'abc') +test('index', 'abcabcabc', 'abc', 1) +test('index', 'abcabcabc', 'abc', -1) +test('index', 'abcabcabc', 'abc', 7) +test('index', 'abcabcabc', 'abc', 0, 3) +test('index', 'abcabcabc', 'abc', 0, 333) + +test('rindex', 'abcabcabc', 'abc') +test('rindex', 'abcabcabc', 'abc', 1) +test('rindex', 'abcabcabc', 'abc', -1) +test('rindex', 'abcabcabc', 'abc', 7) +test('rindex', 'abcabcabc', 'abc', 0, 3) +test('rindex', 'abcabcabc', 'abc', 0, 333) + + +test('lower', 'HeLLo') +test('lower', 'hello') +test('upper', 'HeLLo') +test('upper', 'HELLO') + +test('title', ' hello ') +test('title', 'hello ') +test('title', "fOrMaT thIs aS titLe String") +test('title', "fOrMaT,thIs-aS*titLe;String") +test('title', "getInt") + +test('expandtabs', 'abc\rab\tdef\ng\thi') +test('expandtabs', 'abc\rab\tdef\ng\thi', 8) +test('expandtabs', 'abc\rab\tdef\ng\thi', 4) +test('expandtabs', 'abc\r\nab\tdef\ng\thi', 4) + +test('islower', 'a') +test('islower', 'A') +test('islower', '\n') +test('islower', 'abc') +test('islower', 'aBc') +test('islower', 'abc\n') + +test('isupper', 'a') +test('isupper', 'A') +test('isupper', '\n') +test('isupper', 'ABC') +test('isupper', 'AbC') +test('isupper', 'ABC\n') + +test('isdigit', ' 0123456789') +test('isdigit', '56789') +test('isdigit', '567.89') +test('isdigit', '0123456789abc') + +test('isspace', '') +test('isspace', ' ') +test('isspace', ' \t') +test('isspace', ' \t\f\n') + +test('istitle', 'a') +test('istitle', 'A') +test('istitle', '\n') +test('istitle', 'A Titlecased Line') +test('istitle', 'A\nTitlecased Line') +test('istitle', 'A Titlecased, Line') +test('istitle', 'Not a capitalized String') +test('istitle', 'Not\ta Titlecase String') +test('istitle', 'Not--a Titlecase String') + +test('splitlines', "abc\ndef\n\rghi") +test('splitlines', "abc\ndef\n\r\nghi") +test('splitlines', "abc\ndef\r\nghi") +test('splitlines', "abc\ndef\r\nghi\n") +test('splitlines', "abc\ndef\r\nghi\n\r") +test('splitlines', "\nabc\ndef\r\nghi\n\r") +test('splitlines', "\nabc\ndef\r\nghi\n\r") +test('splitlines', "\nabc\ndef\r\nghi\n\r") + +test('split', 'this is the split function') +test('split', 'a|b|c|d', '|') +test('split', 'a|b|c|d', '|', 2) +test('split', 'a b c d', None, 1) +test('split', 'a b c d', None, 2) +test('split', 'a b c d', None, 3) +test('split', 'a b c d', None, 4) +test('split', 'a b c d', None, 0) +test('split', 'a b c d', None, 2) +test('split', 'a b c d ') + +# join now works with any sequence type +class Sequence: + def __init__(self): self.seq = 'wxyz' + def __len__(self): return len(self.seq) + def __getitem__(self, i): return self.seq[i] + +test('join', '', ('a', 'b', 'c', 'd')) +test('join', '', Sequence()) +test('join', '', 7) + +class BadSeq(Sequence): + def __init__(self): self.seq = [7, 'hello', 123L] + +test('join', '', BadSeq()) + +test('strip', ' hello ') +test('lstrip', ' hello ') +test('rstrip', ' hello ') +test('strip', 'hello') + +test('swapcase', 'HeLLo cOmpUteRs') +transtable = string.maketrans("abc", "xyz") +test('translate', 'xyzabcdef', transtable, 'def') + +transtable = string.maketrans('a', 'A') +test('translate', 'abc', transtable) +test('translate', 'xyz', transtable) + +test('replace', 'one!two!three!', '!', '@', 1) +test('replace', 'one!two!three!', '!', '') +test('replace', 'one!two!three!', '!', '@', 2) +test('replace', 'one!two!three!', '!', '@', 3) +test('replace', 'one!two!three!', '!', '@', 4) +test('replace', 'one!two!three!', '!', '@', 0) +test('replace', 'one!two!three!', '!', '@') +test('replace', 'one!two!three!', 'x', '@') +test('replace', 'one!two!three!', 'x', '@', 2) + +test('startswith', 'hello', 'he') +test('startswith', 'hello', 'hello') +test('startswith', 'hello', 'hello world') +test('startswith', 'hello', '') +test('startswith', 'hello', 'ello') +test('startswith', 'hello', 'ello', 1) +test('startswith', 'hello', 'o', 4) +test('startswith', 'hello', 'o', 5) +test('startswith', 'hello', '', 5) +test('startswith', 'hello', 'lo', 6) +test('startswith', 'helloworld', 'lowo', 3) +test('startswith', 'helloworld', 'lowo', 3, 7) +test('startswith', 'helloworld', 'lowo', 3, 6) + +test('endswith', 'hello', 'lo') +test('endswith', 'hello', 'he') +test('endswith', 'hello', '') +test('endswith', 'hello', 'hello world') +test('endswith', 'helloworld', 'worl') +test('endswith', 'helloworld', 'worl', 3, 9) +test('endswith', 'helloworld', 'world', 3, 12) +test('endswith', 'helloworld', 'lowo', 1, 7) +test('endswith', 'helloworld', 'lowo', 2, 7) +test('endswith', 'helloworld', 'lowo', 3, 7) +test('endswith', 'helloworld', 'lowo', 4, 7) +test('endswith', 'helloworld', 'lowo', 3, 8) +test('endswith', 'ab', 'ab', 0, 1) +test('endswith', 'ab', 'ab', 0, 0) + +# TODO: test cases for: int, long, float, complex, +, * and cmp +s = "" +for builtin_method in dir(s): + if not tested_methods.has_key(builtin_method): + print "no regression test case for method '"+builtin_method+"'" |