| #!/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+"'" |