home *** CD-ROM | disk | FTP | other *** search
/ Freelog 33 / Freelog033.iso / Progr / Python-2.2.1.exe / STRING_TESTS.PY < prev    next >
Encoding:
Python Source  |  2001-08-17  |  9.8 KB  |  235 lines

  1. """Common tests shared by test_string and test_userstring"""
  2.  
  3. import string
  4. from test_support import verify, verbose, TestFailed, have_unicode
  5.  
  6. 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'
  7.  
  8. from UserList import UserList
  9.  
  10. class Sequence:
  11.     def __init__(self): self.seq = 'wxyz'
  12.     def __len__(self): return len(self.seq)
  13.     def __getitem__(self, i): return self.seq[i]
  14.  
  15. class BadSeq1(Sequence):
  16.     def __init__(self): self.seq = [7, 'hello', 123L]
  17.  
  18. class BadSeq2(Sequence):
  19.     def __init__(self): self.seq = ['a', 'b', 'c']
  20.     def __len__(self): return 8
  21.  
  22. def run_module_tests(test):
  23.     """Run all tests that exercise a function in the string module"""
  24.  
  25.     test('atoi', " 1 ", 1)
  26.     test('atoi', " 1x", ValueError)
  27.     test('atoi', " x1 ", ValueError)
  28.     test('atol', "  1  ", 1L)
  29.     test('atol', "  1x ", ValueError)
  30.     test('atol', "  x1 ", ValueError)
  31.     test('atof', "  1  ", 1.0)
  32.     test('atof', "  1x ", ValueError)
  33.     test('atof', "  x1 ", ValueError)
  34.  
  35.     test('maketrans', 'abc', transtable, 'xyz')
  36.     test('maketrans', 'abc', ValueError, 'xyzq')
  37.  
  38.     # join now works with any sequence type
  39.     test('join', ['a', 'b', 'c', 'd'], 'a b c d')
  40.     test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
  41.     test('join', Sequence(), 'w x y z')
  42.     test('join', 7, TypeError)
  43.  
  44.     test('join', BadSeq1(), TypeError)
  45.     test('join', BadSeq2(), 'a b c')
  46.  
  47.     # try a few long ones
  48.     print ":".join(['x' * 100] * 100)
  49.     print ":".join(('x' * 100,) * 100)
  50.  
  51.  
  52. def run_method_tests(test):
  53.     """Run all tests that exercise a method of a string object"""
  54.  
  55.     test('capitalize', ' hello ', ' hello ')
  56.     test('capitalize', 'hello ', 'Hello ')
  57.     test('capitalize', 'aaaa', 'Aaaa')
  58.     test('capitalize', 'AaAa', 'Aaaa')
  59.  
  60.     test('count', 'aaa', 3, 'a')
  61.     test('count', 'aaa', 0, 'b')
  62.  
  63.     test('find', 'abcdefghiabc', 0, 'abc')
  64.     test('find', 'abcdefghiabc', 9, 'abc', 1)
  65.     test('find', 'abcdefghiabc', -1, 'def', 4)
  66.     test('rfind', 'abcdefghiabc', 9, 'abc')
  67.     test('lower', 'HeLLo', 'hello')
  68.     test('lower', 'hello', 'hello')
  69.     test('upper', 'HeLLo', 'HELLO')
  70.     test('upper', 'HELLO', 'HELLO')
  71.  
  72.     test('title', ' hello ', ' Hello ')
  73.     test('title', 'hello ', 'Hello ')
  74.     test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
  75.     test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
  76.     test('title', "getInt", 'Getint')
  77.  
  78.     test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi')
  79.     test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi', 8)
  80.     test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab  def\ng   hi', 4)
  81.     test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab  def\ng   hi', 4)
  82.  
  83.     test('islower', 'a', 1)
  84.     test('islower', 'A', 0)
  85.     test('islower', '\n', 0)
  86.     test('islower', 'abc', 1)
  87.     test('islower', 'aBc', 0)
  88.     test('islower', 'abc\n', 1)
  89.  
  90.     test('isupper', 'a', 0)
  91.     test('isupper', 'A', 1)
  92.     test('isupper', '\n', 0)
  93.     test('isupper', 'ABC', 1)
  94.     test('isupper', 'AbC', 0)
  95.     test('isupper', 'ABC\n', 1)
  96.  
  97.     test('istitle', 'a', 0)
  98.     test('istitle', 'A', 1)
  99.     test('istitle', '\n', 0)
  100.     test('istitle', 'A Titlecased Line', 1)
  101.     test('istitle', 'A\nTitlecased Line', 1)
  102.     test('istitle', 'A Titlecased, Line', 1)
  103.     test('istitle', 'Not a capitalized String', 0)
  104.     test('istitle', 'Not\ta Titlecase String', 0)
  105.     test('istitle', 'Not--a Titlecase String', 0)
  106.  
  107.     test('isalpha', 'a', 1)
  108.     test('isalpha', 'A', 1)
  109.     test('isalpha', '\n', 0)
  110.     test('isalpha', 'abc', 1)
  111.     test('isalpha', 'aBc123', 0)
  112.     test('isalpha', 'abc\n', 0)
  113.  
  114.     test('isalnum', 'a', 1)
  115.     test('isalnum', 'A', 1)
  116.     test('isalnum', '\n', 0)
  117.     test('isalnum', '123abc456', 1)
  118.     test('isalnum', 'a1b3c', 1)
  119.     test('isalnum', 'aBc000 ', 0)
  120.     test('isalnum', 'abc\n', 0)
  121.  
  122.     # join now works with any sequence type
  123.     test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
  124.     test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
  125.     test('join', ' ', 'w x y z', Sequence())
  126.     test('join', 'a', 'abc', ('abc',))
  127.     test('join', 'a', 'z', UserList(['z']))
  128.     if have_unicode:
  129.         test('join', unicode('.'), unicode('a.b.c'), ['a', 'b', 'c'])
  130.         test('join', '.', unicode('a.b.c'), [unicode('a'), 'b', 'c'])
  131.         test('join', '.', unicode('a.b.c'), ['a', unicode('b'), 'c'])
  132.         test('join', '.', unicode('a.b.c'), ['a', 'b', unicode('c')])
  133.         test('join', '.', TypeError, ['a', unicode('b'), 3])
  134.     for i in [5, 25, 125]:
  135.         test('join', '-', ((('a' * i) + '-') * i)[:-1],
  136.              ['a' * i] * i)
  137.  
  138.     test('join', ' ', TypeError, BadSeq1())
  139.     test('join', ' ', 'a b c', BadSeq2())
  140.  
  141.     test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
  142.     test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
  143.     test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
  144.     test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
  145.     test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
  146.     test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
  147.     test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
  148.  
  149.     test('split', 'this is the split function',
  150.          ['this', 'is', 'the', 'split', 'function'])
  151.     test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
  152.     test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
  153.     test('split', 'a b c d', ['a', 'b c d'], None, 1)
  154.     test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
  155.     test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
  156.     test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
  157.     test('split', 'a b c d', ['a b c d'], None, 0)
  158.     test('split', 'a  b  c  d', ['a', 'b', 'c  d'], None, 2)
  159.     test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
  160.  
  161.     test('strip', '   hello   ', 'hello')
  162.     test('lstrip', '   hello   ', 'hello   ')
  163.     test('rstrip', '   hello   ', '   hello')
  164.     test('strip', 'hello', 'hello')
  165.  
  166.     test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
  167.     test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
  168.  
  169.     table = string.maketrans('a', 'A')
  170.     test('translate', 'abc', 'Abc', table)
  171.     test('translate', 'xyz', 'xyz', table)
  172.  
  173.     test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
  174.     test('replace', 'one!two!three!', 'onetwothree', '!', '')
  175.     test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
  176.     test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
  177.     test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
  178.     test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
  179.     test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
  180.     test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
  181.     test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
  182.     # Next three for SF bug 422088: [OSF1 alpha] string.replace(); died with
  183.     # MemoryError due to empty result (platform malloc issue when requesting
  184.     # 0 bytes).
  185.     test('replace', '123', '', '123', '')
  186.     test('replace', '123123', '', '123', '')
  187.     test('replace', '123x123', 'x', '123', '')
  188.  
  189.     test('startswith', 'hello', 1, 'he')
  190.     test('startswith', 'hello', 1, 'hello')
  191.     test('startswith', 'hello', 0, 'hello world')
  192.     test('startswith', 'hello', 1, '')
  193.     test('startswith', 'hello', 0, 'ello')
  194.     test('startswith', 'hello', 1, 'ello', 1)
  195.     test('startswith', 'hello', 1, 'o', 4)
  196.     test('startswith', 'hello', 0, 'o', 5)
  197.     test('startswith', 'hello', 1, '', 5)
  198.     test('startswith', 'hello', 0, 'lo', 6)
  199.     test('startswith', 'helloworld', 1, 'lowo', 3)
  200.     test('startswith', 'helloworld', 1, 'lowo', 3, 7)
  201.     test('startswith', 'helloworld', 0, 'lowo', 3, 6)
  202.  
  203.     test('endswith', 'hello', 1, 'lo')
  204.     test('endswith', 'hello', 0, 'he')
  205.     test('endswith', 'hello', 1, '')
  206.     test('endswith', 'hello', 0, 'hello world')
  207.     test('endswith', 'helloworld', 0, 'worl')
  208.     test('endswith', 'helloworld', 1, 'worl', 3, 9)
  209.     test('endswith', 'helloworld', 1, 'world', 3, 12)
  210.     test('endswith', 'helloworld', 1, 'lowo', 1, 7)
  211.     test('endswith', 'helloworld', 1, 'lowo', 2, 7)
  212.     test('endswith', 'helloworld', 1, 'lowo', 3, 7)
  213.     test('endswith', 'helloworld', 0, 'lowo', 4, 7)
  214.     test('endswith', 'helloworld', 0, 'lowo', 3, 8)
  215.     test('endswith', 'ab', 0, 'ab', 0, 1)
  216.     test('endswith', 'ab', 0, 'ab', 0, 0)
  217.  
  218.     # Encoding/decoding
  219.     codecs = [('rot13', 'uryyb jbeyq'),
  220.               ('base64', 'aGVsbG8gd29ybGQ=\n'),
  221.               ('hex', '68656c6c6f20776f726c64'),
  222.               ('uu', 'begin 666 <data>\n+:&5L;&\\@=V]R;&0 \n \nend\n')]
  223.     for encoding, data in codecs:
  224.         test('encode', 'hello world', data, encoding)
  225.         test('decode', data, 'hello world', encoding)
  226.     # zlib is optional, so we make the test optional too...
  227.     try:
  228.         import zlib
  229.     except ImportError:
  230.         pass
  231.     else:
  232.         data = 'x\x9c\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x1a\x0b\x04]'
  233.         verify('hello world'.encode('zlib') == data)
  234.         verify(data.decode('zlib') == 'hello world')
  235.