blob: a408ef331867d5b8ff517b9d51b61a37046f7a44 [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
Jeremy Hylton20f41b62000-07-11 03:31:55 +00007from UserList import UserList
8
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +00009class Sequence:
10 def __init__(self): self.seq = 'wxyz'
11 def __len__(self): return len(self.seq)
12 def __getitem__(self, i): return self.seq[i]
13
14class BadSeq1(Sequence):
15 def __init__(self): self.seq = [7, 'hello', 123L]
16
17class BadSeq2(Sequence):
18 def __init__(self): self.seq = ['a', 'b', 'c']
19 def __len__(self): return 8
20
21def run_module_tests(test):
22 """Run all tests that exercise a function in the string module"""
23
24 test('atoi', " 1 ", 1)
25 test('atoi', " 1x", ValueError)
26 test('atoi', " x1 ", ValueError)
27 test('atol', " 1 ", 1L)
28 test('atol', " 1x ", ValueError)
29 test('atol', " x1 ", ValueError)
30 test('atof', " 1 ", 1.0)
31 test('atof', " 1x ", ValueError)
32 test('atof', " x1 ", ValueError)
33
34 test('maketrans', 'abc', transtable, 'xyz')
35 test('maketrans', 'abc', ValueError, 'xyzq')
36
37 # join now works with any sequence type
38 test('join', ['a', 'b', 'c', 'd'], 'a b c d')
39 test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
40 test('join', Sequence(), 'w x y z')
41 test('join', 7, TypeError)
42
43 test('join', BadSeq1(), TypeError)
Jeremy Hylton20f41b62000-07-11 03:31:55 +000044 test('join', BadSeq2(), 'a b c')
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +000045
46 # try a few long ones
Eric S. Raymondfc170b12001-02-09 11:51:27 +000047 print ":".join(['x' * 100] * 100)
48 print ":".join(('x' * 100,) * 100)
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +000049
50
51def run_method_tests(test):
52 """Run all tests that exercise a method of a string object"""
53
54 test('capitalize', ' hello ', ' hello ')
55 test('capitalize', 'hello ', 'Hello ')
Marc-André Lemburgfde66e12001-01-29 11:14:16 +000056 test('capitalize', 'aaaa', 'Aaaa')
57 test('capitalize', 'AaAa', 'Aaaa')
Marc-André Lemburg3a645e42001-01-16 11:54:12 +000058
59 test('count', 'aaa', 3, 'a')
60 test('count', 'aaa', 0, 'b')
Tim Petersd2bf3b72001-01-18 02:22:22 +000061
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +000062 test('find', 'abcdefghiabc', 0, 'abc')
63 test('find', 'abcdefghiabc', 9, 'abc', 1)
64 test('find', 'abcdefghiabc', -1, 'def', 4)
65 test('rfind', 'abcdefghiabc', 9, 'abc')
66 test('lower', 'HeLLo', 'hello')
67 test('lower', 'hello', 'hello')
68 test('upper', 'HeLLo', 'HELLO')
69 test('upper', 'HELLO', 'HELLO')
70
71 test('title', ' hello ', ' Hello ')
72 test('title', 'hello ', 'Hello ')
73 test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
74 test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
75 test('title', "getInt", 'Getint')
76
77 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
78 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
79 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
80 test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
81
82 test('islower', 'a', 1)
83 test('islower', 'A', 0)
84 test('islower', '\n', 0)
85 test('islower', 'abc', 1)
86 test('islower', 'aBc', 0)
87 test('islower', 'abc\n', 1)
88
89 test('isupper', 'a', 0)
90 test('isupper', 'A', 1)
91 test('isupper', '\n', 0)
92 test('isupper', 'ABC', 1)
93 test('isupper', 'AbC', 0)
94 test('isupper', 'ABC\n', 1)
95
96 test('istitle', 'a', 0)
97 test('istitle', 'A', 1)
98 test('istitle', '\n', 0)
99 test('istitle', 'A Titlecased Line', 1)
100 test('istitle', 'A\nTitlecased Line', 1)
101 test('istitle', 'A Titlecased, Line', 1)
102 test('istitle', 'Not a capitalized String', 0)
103 test('istitle', 'Not\ta Titlecase String', 0)
104 test('istitle', 'Not--a Titlecase String', 0)
105
106 test('isalpha', 'a', 1)
107 test('isalpha', 'A', 1)
108 test('isalpha', '\n', 0)
109 test('isalpha', 'abc', 1)
110 test('isalpha', 'aBc123', 0)
111 test('isalpha', 'abc\n', 0)
112
113 test('isalnum', 'a', 1)
114 test('isalnum', 'A', 1)
115 test('isalnum', '\n', 0)
116 test('isalnum', '123abc456', 1)
117 test('isalnum', 'a1b3c', 1)
118 test('isalnum', 'aBc000 ', 0)
119 test('isalnum', 'abc\n', 0)
120
121 # join now works with any sequence type
122 test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
123 test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
124 test('join', ' ', 'w x y z', Sequence())
Jeremy Hylton20f41b62000-07-11 03:31:55 +0000125 test('join', 'a', 'abc', ('abc',))
126 test('join', 'a', 'z', UserList(['z']))
127 test('join', u'.', u'a.b.c', ['a', 'b', 'c'])
128 test('join', '.', u'a.b.c', [u'a', 'b', 'c'])
129 test('join', '.', u'a.b.c', ['a', u'b', 'c'])
130 test('join', '.', u'a.b.c', ['a', 'b', u'c'])
131 test('join', '.', TypeError, ['a', u'b', 3])
Jeremy Hylton88887aa2000-07-11 20:55:38 +0000132 for i in [5, 25, 125]:
133 test('join', '-', ((('a' * i) + '-') * i)[:-1],
134 ['a' * i] * i)
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +0000135
136 test('join', ' ', TypeError, BadSeq1())
Jeremy Hylton20f41b62000-07-11 03:31:55 +0000137 test('join', ' ', 'a b c', BadSeq2())
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +0000138
139 test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
140 test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
141 test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
142 test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
143 test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
144 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
145 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
146
147 test('split', 'this is the split function',
148 ['this', 'is', 'the', 'split', 'function'])
149 test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
150 test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
151 test('split', 'a b c d', ['a', 'b c d'], None, 1)
152 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
153 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
154 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
155 test('split', 'a b c d', ['a b c d'], None, 0)
156 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
157 test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
158
159 test('strip', ' hello ', 'hello')
160 test('lstrip', ' hello ', 'hello ')
161 test('rstrip', ' hello ', ' hello')
162 test('strip', 'hello', 'hello')
163
164 test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
165 test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
166
167 table = string.maketrans('a', 'A')
168 test('translate', 'abc', 'Abc', table)
169 test('translate', 'xyz', 'xyz', table)
170
171 test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
172 test('replace', 'one!two!three!', 'onetwothree', '!', '')
173 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
174 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
175 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
176 test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
177 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
178 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
179 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
180
181 test('startswith', 'hello', 1, 'he')
182 test('startswith', 'hello', 1, 'hello')
183 test('startswith', 'hello', 0, 'hello world')
184 test('startswith', 'hello', 1, '')
185 test('startswith', 'hello', 0, 'ello')
186 test('startswith', 'hello', 1, 'ello', 1)
187 test('startswith', 'hello', 1, 'o', 4)
188 test('startswith', 'hello', 0, 'o', 5)
189 test('startswith', 'hello', 1, '', 5)
190 test('startswith', 'hello', 0, 'lo', 6)
191 test('startswith', 'helloworld', 1, 'lowo', 3)
192 test('startswith', 'helloworld', 1, 'lowo', 3, 7)
193 test('startswith', 'helloworld', 0, 'lowo', 3, 6)
194
195 test('endswith', 'hello', 1, 'lo')
196 test('endswith', 'hello', 0, 'he')
197 test('endswith', 'hello', 1, '')
198 test('endswith', 'hello', 0, 'hello world')
199 test('endswith', 'helloworld', 0, 'worl')
200 test('endswith', 'helloworld', 1, 'worl', 3, 9)
201 test('endswith', 'helloworld', 1, 'world', 3, 12)
202 test('endswith', 'helloworld', 1, 'lowo', 1, 7)
203 test('endswith', 'helloworld', 1, 'lowo', 2, 7)
204 test('endswith', 'helloworld', 1, 'lowo', 3, 7)
205 test('endswith', 'helloworld', 0, 'lowo', 4, 7)
206 test('endswith', 'helloworld', 0, 'lowo', 3, 8)
207 test('endswith', 'ab', 0, 'ab', 0, 1)
208 test('endswith', 'ab', 0, 'ab', 0, 0)