blob: 3c3cbeb3b58af2b1f6ecfd115f93838f177d1e20 [file] [log] [blame]
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +00001"""Common tests shared by test_string and test_userstring"""
2
3import string
4
5transtable = '\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'
6
7class Sequence:
8 def __init__(self): self.seq = 'wxyz'
9 def __len__(self): return len(self.seq)
10 def __getitem__(self, i): return self.seq[i]
11
12class BadSeq1(Sequence):
13 def __init__(self): self.seq = [7, 'hello', 123L]
14
15class BadSeq2(Sequence):
16 def __init__(self): self.seq = ['a', 'b', 'c']
17 def __len__(self): return 8
18
19def run_module_tests(test):
20 """Run all tests that exercise a function in the string module"""
21
22 test('atoi', " 1 ", 1)
23 test('atoi', " 1x", ValueError)
24 test('atoi', " x1 ", ValueError)
25 test('atol', " 1 ", 1L)
26 test('atol', " 1x ", ValueError)
27 test('atol', " x1 ", ValueError)
28 test('atof', " 1 ", 1.0)
29 test('atof', " 1x ", ValueError)
30 test('atof', " x1 ", ValueError)
31
32 test('maketrans', 'abc', transtable, 'xyz')
33 test('maketrans', 'abc', ValueError, 'xyzq')
34
35 # join now works with any sequence type
36 test('join', ['a', 'b', 'c', 'd'], 'a b c d')
37 test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
38 test('join', Sequence(), 'w x y z')
39 test('join', 7, TypeError)
40
41 test('join', BadSeq1(), TypeError)
42 test('join', BadSeq2(), IndexError)
43# XXX should this test really raise an exception; lots of other core
44# code will just ignore the lying __len__ method.
45# test('join', BadSeq2(), 'a b c')
46
47 # try a few long ones
48 print string.join(['x' * 100] * 100, ':')
49 print string.join(('x' * 100,) * 100, ':')
50
51
52def 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('find', 'abcdefghiabc', 0, 'abc')
58 test('find', 'abcdefghiabc', 9, 'abc', 1)
59 test('find', 'abcdefghiabc', -1, 'def', 4)
60 test('rfind', 'abcdefghiabc', 9, 'abc')
61 test('lower', 'HeLLo', 'hello')
62 test('lower', 'hello', 'hello')
63 test('upper', 'HeLLo', 'HELLO')
64 test('upper', 'HELLO', 'HELLO')
65
66 test('title', ' hello ', ' Hello ')
67 test('title', 'hello ', 'Hello ')
68 test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
69 test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
70 test('title', "getInt", 'Getint')
71
72 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
73 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
74 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
75 test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
76
77 test('islower', 'a', 1)
78 test('islower', 'A', 0)
79 test('islower', '\n', 0)
80 test('islower', 'abc', 1)
81 test('islower', 'aBc', 0)
82 test('islower', 'abc\n', 1)
83
84 test('isupper', 'a', 0)
85 test('isupper', 'A', 1)
86 test('isupper', '\n', 0)
87 test('isupper', 'ABC', 1)
88 test('isupper', 'AbC', 0)
89 test('isupper', 'ABC\n', 1)
90
91 test('istitle', 'a', 0)
92 test('istitle', 'A', 1)
93 test('istitle', '\n', 0)
94 test('istitle', 'A Titlecased Line', 1)
95 test('istitle', 'A\nTitlecased Line', 1)
96 test('istitle', 'A Titlecased, Line', 1)
97 test('istitle', 'Not a capitalized String', 0)
98 test('istitle', 'Not\ta Titlecase String', 0)
99 test('istitle', 'Not--a Titlecase String', 0)
100
101 test('isalpha', 'a', 1)
102 test('isalpha', 'A', 1)
103 test('isalpha', '\n', 0)
104 test('isalpha', 'abc', 1)
105 test('isalpha', 'aBc123', 0)
106 test('isalpha', 'abc\n', 0)
107
108 test('isalnum', 'a', 1)
109 test('isalnum', 'A', 1)
110 test('isalnum', '\n', 0)
111 test('isalnum', '123abc456', 1)
112 test('isalnum', 'a1b3c', 1)
113 test('isalnum', 'aBc000 ', 0)
114 test('isalnum', 'abc\n', 0)
115
116 # join now works with any sequence type
117 test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
118 test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
119 test('join', ' ', 'w x y z', Sequence())
120
121 test('join', ' ', TypeError, BadSeq1())
122 test('join', ' ', IndexError, BadSeq2())
123# XXX should this test really raise an exception; lots of other core
124# code will just ignore the lying __len__ method.
125# test('join', BadSeq2(), 'a b c')
126
127 test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
128 test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
129 test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
130 test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
131 test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
132 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
133 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
134
135 test('split', 'this is the split function',
136 ['this', 'is', 'the', 'split', 'function'])
137 test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
138 test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
139 test('split', 'a b c d', ['a', 'b c d'], None, 1)
140 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
141 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
142 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
143 test('split', 'a b c d', ['a b c d'], None, 0)
144 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
145 test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
146
147 test('strip', ' hello ', 'hello')
148 test('lstrip', ' hello ', 'hello ')
149 test('rstrip', ' hello ', ' hello')
150 test('strip', 'hello', 'hello')
151
152 test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
153 test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
154
155 table = string.maketrans('a', 'A')
156 test('translate', 'abc', 'Abc', table)
157 test('translate', 'xyz', 'xyz', table)
158
159 test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
160 test('replace', 'one!two!three!', 'onetwothree', '!', '')
161 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
162 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
163 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
164 test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
165 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
166 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
167 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
168
169 test('startswith', 'hello', 1, 'he')
170 test('startswith', 'hello', 1, 'hello')
171 test('startswith', 'hello', 0, 'hello world')
172 test('startswith', 'hello', 1, '')
173 test('startswith', 'hello', 0, 'ello')
174 test('startswith', 'hello', 1, 'ello', 1)
175 test('startswith', 'hello', 1, 'o', 4)
176 test('startswith', 'hello', 0, 'o', 5)
177 test('startswith', 'hello', 1, '', 5)
178 test('startswith', 'hello', 0, 'lo', 6)
179 test('startswith', 'helloworld', 1, 'lowo', 3)
180 test('startswith', 'helloworld', 1, 'lowo', 3, 7)
181 test('startswith', 'helloworld', 0, 'lowo', 3, 6)
182
183 test('endswith', 'hello', 1, 'lo')
184 test('endswith', 'hello', 0, 'he')
185 test('endswith', 'hello', 1, '')
186 test('endswith', 'hello', 0, 'hello world')
187 test('endswith', 'helloworld', 0, 'worl')
188 test('endswith', 'helloworld', 1, 'worl', 3, 9)
189 test('endswith', 'helloworld', 1, 'world', 3, 12)
190 test('endswith', 'helloworld', 1, 'lowo', 1, 7)
191 test('endswith', 'helloworld', 1, 'lowo', 2, 7)
192 test('endswith', 'helloworld', 1, 'lowo', 3, 7)
193 test('endswith', 'helloworld', 0, 'lowo', 4, 7)
194 test('endswith', 'helloworld', 0, 'lowo', 3, 8)
195 test('endswith', 'ab', 0, 'ab', 0, 1)
196 test('endswith', 'ab', 0, 'ab', 0, 0)