[Python-checkins] CVS: python/dist/src/Lib/test string_tests.py,NONE,1.1 test_string.py,1.9,1.10 test_userstring.py,1.1,1.2

Jeremy Hylton python-dev@python.org
Mon, 10 Jul 2000 10:08:44 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7964/test

Modified Files:
	test_string.py test_userstring.py 
Added Files:
	string_tests.py 
Log Message:
factor out test definitions to string_tests module
test_string and test_userstring run same tests for string methods


--- NEW FILE ---
"""Common tests shared by test_string and test_userstring"""

import string

transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'

class Sequence:
    def __init__(self): self.seq = 'wxyz'
    def __len__(self): return len(self.seq)
    def __getitem__(self, i): return self.seq[i]

class BadSeq1(Sequence):
    def __init__(self): self.seq = [7, 'hello', 123L]

class BadSeq2(Sequence):
    def __init__(self): self.seq = ['a', 'b', 'c']
    def __len__(self): return 8

def run_module_tests(test):
    """Run all tests that exercise a function in the string module"""

    test('atoi', " 1 ", 1)
    test('atoi', " 1x", ValueError)
    test('atoi', " x1 ", ValueError)
    test('atol', "  1  ", 1L)
    test('atol', "  1x ", ValueError)
    test('atol', "  x1 ", ValueError)
    test('atof', "  1  ", 1.0)
    test('atof', "  1x ", ValueError)
    test('atof', "  x1 ", ValueError)

    test('maketrans', 'abc', transtable, 'xyz')
    test('maketrans', 'abc', ValueError, 'xyzq')

    # join now works with any sequence type
    test('join', ['a', 'b', 'c', 'd'], 'a b c d')
    test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
    test('join', Sequence(), 'w x y z')
    test('join', 7, TypeError)

    test('join', BadSeq1(), TypeError)
    test('join', BadSeq2(), IndexError)
#   XXX should this test really raise an exception; lots of other core
#   code will just ignore the lying __len__ method. 
#   test('join', BadSeq2(), 'a b c')

    # try a few long ones
    print string.join(['x' * 100] * 100, ':')
    print string.join(('x' * 100,) * 100, ':')


def run_method_tests(test):
    """Run all tests that exercise a method of a string object"""

    test('capitalize', ' hello ', ' hello ')
    test('capitalize', 'hello ', 'Hello ')
    test('find', 'abcdefghiabc', 0, 'abc')
    test('find', 'abcdefghiabc', 9, 'abc', 1)
    test('find', 'abcdefghiabc', -1, 'def', 4)
    test('rfind', 'abcdefghiabc', 9, 'abc')
    test('lower', 'HeLLo', 'hello')
    test('lower', 'hello', 'hello')
    test('upper', 'HeLLo', 'HELLO')
    test('upper', 'HELLO', 'HELLO')

    test('title', ' hello ', ' Hello ')
    test('title', 'hello ', 'Hello ')
    test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
    test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
    test('title', "getInt", 'Getint')

    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi')
    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi', 8)
    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab  def\ng   hi', 4)
    test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab  def\ng   hi', 4)

    test('islower', 'a', 1)
    test('islower', 'A', 0)
    test('islower', '\n', 0)
    test('islower', 'abc', 1)
    test('islower', 'aBc', 0)
    test('islower', 'abc\n', 1)

    test('isupper', 'a', 0)
    test('isupper', 'A', 1)
    test('isupper', '\n', 0)
    test('isupper', 'ABC', 1)
    test('isupper', 'AbC', 0)
    test('isupper', 'ABC\n', 1)

    test('istitle', 'a', 0)
    test('istitle', 'A', 1)
    test('istitle', '\n', 0)
    test('istitle', 'A Titlecased Line', 1)
    test('istitle', 'A\nTitlecased Line', 1)
    test('istitle', 'A Titlecased, Line', 1)
    test('istitle', 'Not a capitalized String', 0)
    test('istitle', 'Not\ta Titlecase String', 0)
    test('istitle', 'Not--a Titlecase String', 0)

    test('isalpha', 'a', 1)
    test('isalpha', 'A', 1)
    test('isalpha', '\n', 0)
    test('isalpha', 'abc', 1)
    test('isalpha', 'aBc123', 0)
    test('isalpha', 'abc\n', 0)

    test('isalnum', 'a', 1)
    test('isalnum', 'A', 1)
    test('isalnum', '\n', 0)
    test('isalnum', '123abc456', 1)
    test('isalnum', 'a1b3c', 1)
    test('isalnum', 'aBc000 ', 0)
    test('isalnum', 'abc\n', 0)

    # join now works with any sequence type
    test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
    test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
    test('join', ' ', 'w x y z', Sequence())

    test('join', ' ', TypeError, BadSeq1())
    test('join', ' ', IndexError, BadSeq2())
#   XXX should this test really raise an exception; lots of other core
#   code will just ignore the lying __len__ method. 
#   test('join', BadSeq2(), 'a b c')

    test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
    test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
    test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
    test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
    test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
    test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
    test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)

    test('split', 'this is the split function',
         ['this', 'is', 'the', 'split', 'function'])
    test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
    test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
    test('split', 'a b c d', ['a', 'b c d'], None, 1)
    test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
    test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
    test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
    test('split', 'a b c d', ['a b c d'], None, 0)
    test('split', 'a  b  c  d', ['a', 'b', 'c  d'], None, 2)
    test('split', 'a b c d ', ['a', 'b', 'c', 'd'])

    test('strip', '   hello   ', 'hello')
    test('lstrip', '   hello   ', 'hello   ')
    test('rstrip', '   hello   ', '   hello')
    test('strip', 'hello', 'hello')

    test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
    test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')

    table = string.maketrans('a', 'A')
    test('translate', 'abc', 'Abc', table)
    test('translate', 'xyz', 'xyz', table)

    test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
    test('replace', 'one!two!three!', 'onetwothree', '!', '')
    test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
    test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
    test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
    test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
    test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
    test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
    test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)

    test('startswith', 'hello', 1, 'he')
    test('startswith', 'hello', 1, 'hello')
    test('startswith', 'hello', 0, 'hello world')
    test('startswith', 'hello', 1, '')
    test('startswith', 'hello', 0, 'ello')
    test('startswith', 'hello', 1, 'ello', 1)
    test('startswith', 'hello', 1, 'o', 4)
    test('startswith', 'hello', 0, 'o', 5)
    test('startswith', 'hello', 1, '', 5)
    test('startswith', 'hello', 0, 'lo', 6)
    test('startswith', 'helloworld', 1, 'lowo', 3)
    test('startswith', 'helloworld', 1, 'lowo', 3, 7)
    test('startswith', 'helloworld', 0, 'lowo', 3, 6)

    test('endswith', 'hello', 1, 'lo')
    test('endswith', 'hello', 0, 'he')
    test('endswith', 'hello', 1, '')
    test('endswith', 'hello', 0, 'hello world')
    test('endswith', 'helloworld', 0, 'worl')
    test('endswith', 'helloworld', 1, 'worl', 3, 9)
    test('endswith', 'helloworld', 1, 'world', 3, 12)
    test('endswith', 'helloworld', 1, 'lowo', 1, 7)
    test('endswith', 'helloworld', 1, 'lowo', 2, 7)
    test('endswith', 'helloworld', 1, 'lowo', 3, 7)
    test('endswith', 'helloworld', 0, 'lowo', 4, 7)
    test('endswith', 'helloworld', 0, 'lowo', 3, 8)
    test('endswith', 'ab', 0, 'ab', 0, 1)
    test('endswith', 'ab', 0, 'ab', 0, 0)

Index: test_string.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_string.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** test_string.py	2000/07/05 09:46:26	1.9
--- test_string.py	2000/07/10 17:08:42	1.10
***************
*** 1,3 ****
--- 1,4 ----
  from test_support import verbose
+ import string_tests
  import string, sys
  
***************
*** 29,200 ****
              print 'yes'
  
! test('atoi', " 1 ", 1)
! test('atoi', " 1x", ValueError)
! test('atoi', " x1 ", ValueError)
! test('atol', "  1  ", 1L)
! test('atol', "  1x ", ValueError)
! test('atol', "  x1 ", ValueError)
! test('atof', "  1  ", 1.0)
! test('atof', "  1x ", ValueError)
! test('atof', "  x1 ", ValueError)
  
- test('capitalize', ' hello ', ' hello ')
- test('capitalize', 'hello ', 'Hello ')
- test('find', 'abcdefghiabc', 0, 'abc')
- test('find', 'abcdefghiabc', 9, 'abc', 1)
- test('find', 'abcdefghiabc', -1, 'def', 4)
- test('rfind', 'abcdefghiabc', 9, 'abc')
- test('lower', 'HeLLo', 'hello')
- test('lower', 'hello', 'hello')
- test('upper', 'HeLLo', 'HELLO')
- test('upper', 'HELLO', 'HELLO')
- 
- test('title', ' hello ', ' Hello ')
- test('title', 'hello ', 'Hello ')
- test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
- test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
- test('title', "getInt", 'Getint')
- 
- test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi')
- test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi', 8)
- test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab  def\ng   hi', 4)
- test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab  def\ng   hi', 4)
- 
- test('islower', 'a', 1)
- test('islower', 'A', 0)
- test('islower', '\n', 0)
- test('islower', 'abc', 1)
- test('islower', 'aBc', 0)
- test('islower', 'abc\n', 1)
- 
- test('isupper', 'a', 0)
- test('isupper', 'A', 1)
- test('isupper', '\n', 0)
- test('isupper', 'ABC', 1)
- test('isupper', 'AbC', 0)
- test('isupper', 'ABC\n', 1)
- 
- test('istitle', 'a', 0)
- test('istitle', 'A', 1)
- test('istitle', '\n', 0)
- test('istitle', 'A Titlecased Line', 1)
- test('istitle', 'A\nTitlecased Line', 1)
- test('istitle', 'A Titlecased, Line', 1)
- test('istitle', 'Not a capitalized String', 0)
- test('istitle', 'Not\ta Titlecase String', 0)
- test('istitle', 'Not--a Titlecase String', 0)
- 
- test('isalpha', 'a', 1)
- test('isalpha', 'A', 1)
- test('isalpha', '\n', 0)
- test('isalpha', 'abc', 1)
- test('isalpha', 'aBc123', 0)
- test('isalpha', 'abc\n', 0)
- 
- test('isalnum', 'a', 1)
- test('isalnum', 'A', 1)
- test('isalnum', '\n', 0)
- test('isalnum', '123abc456', 1)
- test('isalnum', 'a1b3c', 1)
- test('isalnum', 'aBc000 ', 0)
- test('isalnum', 'abc\n', 0)
- 
- test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
- test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
- test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
- test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
- test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
- test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
- test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
- 
- transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
- 
- test('maketrans', 'abc', transtable, 'xyz')
- test('maketrans', 'abc', ValueError, 'xyzq')
- 
- test('split', 'this is the split function',
-      ['this', 'is', 'the', 'split', 'function'])
- test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
- test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
- test('split', 'a b c d', ['a', 'b c d'], None, 1)
- test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
- test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
- test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
- test('split', 'a b c d', ['a b c d'], None, 0)
- test('split', 'a  b  c  d', ['a', 'b', 'c  d'], None, 2)
- test('split', 'a b c d ', ['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'], 'a b c d')
- test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
- test('join', Sequence(), 'w x y z')
- test('join', 7, TypeError)
- 
- class BadSeq(Sequence):
-     def __init__(self): self.seq = [7, 'hello', 123L]
- 
- test('join', BadSeq(), TypeError)
- 
- # try a few long ones
- print string.join(['x' * 100] * 100, ':')
- print string.join(('x' * 100,) * 100, ':')
- 
- test('strip', '   hello   ', 'hello')
- test('lstrip', '   hello   ', 'hello   ')
- test('rstrip', '   hello   ', '   hello')
- test('strip', 'hello', 'hello')
- 
- test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
- test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
- 
- table = string.maketrans('a', 'A')
- test('translate', 'abc', 'Abc', table)
- test('translate', 'xyz', 'xyz', table)
- 
- test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
- test('replace', 'one!two!three!', 'onetwothree', '!', '')
- test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
- test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
- test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
- test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
- test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
- test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
- test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
- 
- test('startswith', 'hello', 1, 'he')
- test('startswith', 'hello', 1, 'hello')
- test('startswith', 'hello', 0, 'hello world')
- test('startswith', 'hello', 1, '')
- test('startswith', 'hello', 0, 'ello')
- test('startswith', 'hello', 1, 'ello', 1)
- test('startswith', 'hello', 1, 'o', 4)
- test('startswith', 'hello', 0, 'o', 5)
- test('startswith', 'hello', 1, '', 5)
- test('startswith', 'hello', 0, 'lo', 6)
- test('startswith', 'helloworld', 1, 'lowo', 3)
- test('startswith', 'helloworld', 1, 'lowo', 3, 7)
- test('startswith', 'helloworld', 0, 'lowo', 3, 6)
- 
- test('endswith', 'hello', 1, 'lo')
- test('endswith', 'hello', 0, 'he')
- test('endswith', 'hello', 1, '')
- test('endswith', 'hello', 0, 'hello world')
- test('endswith', 'helloworld', 0, 'worl')
- test('endswith', 'helloworld', 1, 'worl', 3, 9)
- test('endswith', 'helloworld', 1, 'world', 3, 12)
- test('endswith', 'helloworld', 1, 'lowo', 1, 7)
- test('endswith', 'helloworld', 1, 'lowo', 2, 7)
- test('endswith', 'helloworld', 1, 'lowo', 3, 7)
- test('endswith', 'helloworld', 0, 'lowo', 4, 7)
- test('endswith', 'helloworld', 0, 'lowo', 3, 8)
- test('endswith', 'ab', 0, 'ab', 0, 1)
- test('endswith', 'ab', 0, 'ab', 0, 0)
- 
  string.whitespace
  string.lowercase
  string.uppercase
--- 30,38 ----
              print 'yes'
  
! string_tests.run_module_tests(test)
! string_tests.run_method_tests(test)
  
  string.whitespace
  string.lowercase
  string.uppercase
+ 

Index: test_userstring.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_userstring.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** test_userstring.py	2000/04/03 03:51:50	1.1
--- test_userstring.py	2000/07/10 17:08:42	1.2
***************
*** 2,5 ****
--- 2,6 ----
  import sys, string
  from test_support import verbose
+ import string_tests
  # UserString is a wrapper around the native builtin string type.
  # UserString instances should behave similar to builtin string objects.
***************
*** 42,227 ****
              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+"'"
--- 43,45 ----
              print 'yes'
  
! string_tests.run_method_tests(test)