Quick update to the README file. For intros and books we now point to
[python/dscho.git] / Lib / test / test_string.py
blob4a3e474cd87367907581f6f4ccf5c28ee8a8bffb
1 from test_support import verbose
2 import string, sys
4 # XXX: kludge... short circuit if strings don't have methods
5 try:
6 ''.join
7 except AttributeError:
8 raise ImportError
10 def test(name, input, output, *args):
11 if verbose:
12 print 'string.%s%s =? %s... ' % (name, (input,) + args, output),
13 try:
14 # Prefer string methods over string module functions
15 try:
16 f = getattr(input, name)
17 value = apply(f, args)
18 except AttributeError:
19 f = getattr(string, name)
20 value = apply(f, (input,) + args)
21 except:
22 value = sys.exc_type
23 if value != output:
24 if verbose:
25 print 'no'
26 print f, `input`, `output`, `value`
27 else:
28 if verbose:
29 print 'yes'
31 test('atoi', " 1 ", 1)
32 test('atoi', " 1x", ValueError)
33 test('atoi', " x1 ", ValueError)
34 test('atol', " 1 ", 1L)
35 test('atol', " 1x ", ValueError)
36 test('atol', " x1 ", ValueError)
37 test('atof', " 1 ", 1.0)
38 test('atof', " 1x ", ValueError)
39 test('atof', " x1 ", ValueError)
41 test('capitalize', ' hello ', ' hello ')
42 test('capitalize', 'hello ', 'Hello ')
43 test('find', 'abcdefghiabc', 0, 'abc')
44 test('find', 'abcdefghiabc', 9, 'abc', 1)
45 test('find', 'abcdefghiabc', -1, 'def', 4)
46 test('rfind', 'abcdefghiabc', 9, 'abc')
47 test('lower', 'HeLLo', 'hello')
48 test('lower', 'hello', 'hello')
49 test('upper', 'HeLLo', 'HELLO')
50 test('upper', 'HELLO', 'HELLO')
52 test('title', ' hello ', ' Hello ')
53 test('title', 'hello ', 'Hello ')
54 test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
55 test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
56 test('title', "getInt", 'Getint')
58 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
59 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
60 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
61 test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
63 test('islower', 'a', 1)
64 test('islower', 'A', 0)
65 test('islower', '\n', 0)
66 test('islower', 'abc', 1)
67 test('islower', 'aBc', 0)
68 test('islower', 'abc\n', 1)
70 test('isupper', 'a', 0)
71 test('isupper', 'A', 1)
72 test('isupper', '\n', 0)
73 test('isupper', 'ABC', 1)
74 test('isupper', 'AbC', 0)
75 test('isupper', 'ABC\n', 1)
77 test('istitle', 'a', 0)
78 test('istitle', 'A', 1)
79 test('istitle', '\n', 0)
80 test('istitle', 'A Titlecased Line', 1)
81 test('istitle', 'A\nTitlecased Line', 1)
82 test('istitle', 'A Titlecased, Line', 1)
83 test('istitle', 'Not a capitalized String', 0)
84 test('istitle', 'Not\ta Titlecase String', 0)
85 test('istitle', 'Not--a Titlecase String', 0)
87 test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
88 test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
89 test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
90 test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
91 test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
92 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
93 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc\012def\015\012ghi\012\015'], 1)
94 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def\015\012ghi\012\015'], 2)
96 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'
98 test('maketrans', 'abc', transtable, 'xyz')
99 test('maketrans', 'abc', ValueError, 'xyzq')
101 test('split', 'this is the split function',
102 ['this', 'is', 'the', 'split', 'function'])
103 test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
104 test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
105 test('split', 'a b c d', ['a', 'b c d'], None, 1)
106 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
107 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
108 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
109 test('split', 'a b c d', ['a b c d'], None, 0)
110 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
111 test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
113 # join now works with any sequence type
114 class Sequence:
115 def __init__(self): self.seq = 'wxyz'
116 def __len__(self): return len(self.seq)
117 def __getitem__(self, i): return self.seq[i]
119 test('join', ['a', 'b', 'c', 'd'], 'a b c d')
120 test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
121 test('join', Sequence(), 'w x y z')
122 test('join', 7, TypeError)
124 class BadSeq(Sequence):
125 def __init__(self): self.seq = [7, 'hello', 123L]
127 test('join', BadSeq(), TypeError)
129 # try a few long ones
130 print string.join(['x' * 100] * 100, ':')
131 print string.join(('x' * 100,) * 100, ':')
133 test('strip', ' hello ', 'hello')
134 test('lstrip', ' hello ', 'hello ')
135 test('rstrip', ' hello ', ' hello')
136 test('strip', 'hello', 'hello')
138 test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
139 test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
141 table = string.maketrans('a', 'A')
142 test('translate', 'abc', 'Abc', table)
143 test('translate', 'xyz', 'xyz', table)
145 test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
146 test('replace', 'one!two!three!', 'onetwothree', '!', '')
147 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
148 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
149 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
150 test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
151 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
152 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
153 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
155 test('startswith', 'hello', 1, 'he')
156 test('startswith', 'hello', 1, 'hello')
157 test('startswith', 'hello', 0, 'hello world')
158 test('startswith', 'hello', 1, '')
159 test('startswith', 'hello', 0, 'ello')
160 test('startswith', 'hello', 1, 'ello', 1)
161 test('startswith', 'hello', 1, 'o', 4)
162 test('startswith', 'hello', 0, 'o', 5)
163 test('startswith', 'hello', 1, '', 5)
164 test('startswith', 'hello', 0, 'lo', 6)
165 test('startswith', 'helloworld', 1, 'lowo', 3)
166 test('startswith', 'helloworld', 1, 'lowo', 3, 7)
167 test('startswith', 'helloworld', 0, 'lowo', 3, 6)
169 test('endswith', 'hello', 1, 'lo')
170 test('endswith', 'hello', 0, 'he')
171 test('endswith', 'hello', 1, '')
172 test('endswith', 'hello', 0, 'hello world')
173 test('endswith', 'helloworld', 0, 'worl')
174 test('endswith', 'helloworld', 1, 'worl', 3, 9)
175 test('endswith', 'helloworld', 1, 'world', 3, 12)
176 test('endswith', 'helloworld', 1, 'lowo', 1, 7)
177 test('endswith', 'helloworld', 1, 'lowo', 2, 7)
178 test('endswith', 'helloworld', 1, 'lowo', 3, 7)
179 test('endswith', 'helloworld', 0, 'lowo', 4, 7)
180 test('endswith', 'helloworld', 0, 'lowo', 3, 8)
181 test('endswith', 'ab', 0, 'ab', 0, 1)
182 test('endswith', 'ab', 0, 'ab', 0, 0)
184 string.whitespace
185 string.lowercase
186 string.uppercase