blob: d4041bec4af55c3a6a046b1240b07d9f1b5c86b8 [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
47 print string.join(['x' * 100] * 100, ':')
48 print string.join(('x' * 100,) * 100, ':')
49
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 ')
56 test('find', 'abcdefghiabc', 0, 'abc')
57 test('find', 'abcdefghiabc', 9, 'abc', 1)
58 test('find', 'abcdefghiabc', -1, 'def', 4)
59 test('rfind', 'abcdefghiabc', 9, 'abc')
60 test('lower', 'HeLLo', 'hello')
61 test('lower', 'hello', 'hello')
62 test('upper', 'HeLLo', 'HELLO')
63 test('upper', 'HELLO', 'HELLO')
64
65 test('title', ' hello ', ' Hello ')
66 test('title', 'hello ', 'Hello ')
67 test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
68 test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
69 test('title', "getInt", 'Getint')
70
71 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
72 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
73 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
74 test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
75
76 test('islower', 'a', 1)
77 test('islower', 'A', 0)
78 test('islower', '\n', 0)
79 test('islower', 'abc', 1)
80 test('islower', 'aBc', 0)
81 test('islower', 'abc\n', 1)
82
83 test('isupper', 'a', 0)
84 test('isupper', 'A', 1)
85 test('isupper', '\n', 0)
86 test('isupper', 'ABC', 1)
87 test('isupper', 'AbC', 0)
88 test('isupper', 'ABC\n', 1)
89
90 test('istitle', 'a', 0)
91 test('istitle', 'A', 1)
92 test('istitle', '\n', 0)
93 test('istitle', 'A Titlecased Line', 1)
94 test('istitle', 'A\nTitlecased Line', 1)
95 test('istitle', 'A Titlecased, Line', 1)
96 test('istitle', 'Not a capitalized String', 0)
97 test('istitle', 'Not\ta Titlecase String', 0)
98 test('istitle', 'Not--a Titlecase String', 0)
99
100 test('isalpha', 'a', 1)
101 test('isalpha', 'A', 1)
102 test('isalpha', '\n', 0)
103 test('isalpha', 'abc', 1)
104 test('isalpha', 'aBc123', 0)
105 test('isalpha', 'abc\n', 0)
106
107 test('isalnum', 'a', 1)
108 test('isalnum', 'A', 1)
109 test('isalnum', '\n', 0)
110 test('isalnum', '123abc456', 1)
111 test('isalnum', 'a1b3c', 1)
112 test('isalnum', 'aBc000 ', 0)
113 test('isalnum', 'abc\n', 0)
114
115 # join now works with any sequence type
116 test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
117 test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
118 test('join', ' ', 'w x y z', Sequence())
Jeremy Hylton20f41b62000-07-11 03:31:55 +0000119 test('join', 'a', 'abc', ('abc',))
120 test('join', 'a', 'z', UserList(['z']))
121 test('join', u'.', u'a.b.c', ['a', 'b', 'c'])
122 test('join', '.', u'a.b.c', [u'a', 'b', 'c'])
123 test('join', '.', u'a.b.c', ['a', u'b', 'c'])
124 test('join', '.', u'a.b.c', ['a', 'b', u'c'])
125 test('join', '.', TypeError, ['a', u'b', 3])
Jeremy Hylton88887aa2000-07-11 20:55:38 +0000126 for i in [5, 25, 125]:
127 test('join', '-', ((('a' * i) + '-') * i)[:-1],
128 ['a' * i] * i)
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +0000129
130 test('join', ' ', TypeError, BadSeq1())
Jeremy Hylton20f41b62000-07-11 03:31:55 +0000131 test('join', ' ', 'a b c', BadSeq2())
Jeremy Hyltonf82b04e2000-07-10 17:08:42 +0000132
133 test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
134 test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
135 test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
136 test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
137 test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
138 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
139 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
140
141 test('split', 'this is the split function',
142 ['this', 'is', 'the', 'split', 'function'])
143 test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
144 test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
145 test('split', 'a b c d', ['a', 'b c d'], None, 1)
146 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
147 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
148 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
149 test('split', 'a b c d', ['a b c d'], None, 0)
150 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
151 test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
152
153 test('strip', ' hello ', 'hello')
154 test('lstrip', ' hello ', 'hello ')
155 test('rstrip', ' hello ', ' hello')
156 test('strip', 'hello', 'hello')
157
158 test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
159 test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
160
161 table = string.maketrans('a', 'A')
162 test('translate', 'abc', 'Abc', table)
163 test('translate', 'xyz', 'xyz', table)
164
165 test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
166 test('replace', 'one!two!three!', 'onetwothree', '!', '')
167 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
168 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
169 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
170 test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
171 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
172 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
173 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
174
175 test('startswith', 'hello', 1, 'he')
176 test('startswith', 'hello', 1, 'hello')
177 test('startswith', 'hello', 0, 'hello world')
178 test('startswith', 'hello', 1, '')
179 test('startswith', 'hello', 0, 'ello')
180 test('startswith', 'hello', 1, 'ello', 1)
181 test('startswith', 'hello', 1, 'o', 4)
182 test('startswith', 'hello', 0, 'o', 5)
183 test('startswith', 'hello', 1, '', 5)
184 test('startswith', 'hello', 0, 'lo', 6)
185 test('startswith', 'helloworld', 1, 'lowo', 3)
186 test('startswith', 'helloworld', 1, 'lowo', 3, 7)
187 test('startswith', 'helloworld', 0, 'lowo', 3, 6)
188
189 test('endswith', 'hello', 1, 'lo')
190 test('endswith', 'hello', 0, 'he')
191 test('endswith', 'hello', 1, '')
192 test('endswith', 'hello', 0, 'hello world')
193 test('endswith', 'helloworld', 0, 'worl')
194 test('endswith', 'helloworld', 1, 'worl', 3, 9)
195 test('endswith', 'helloworld', 1, 'world', 3, 12)
196 test('endswith', 'helloworld', 1, 'lowo', 1, 7)
197 test('endswith', 'helloworld', 1, 'lowo', 2, 7)
198 test('endswith', 'helloworld', 1, 'lowo', 3, 7)
199 test('endswith', 'helloworld', 0, 'lowo', 4, 7)
200 test('endswith', 'helloworld', 0, 'lowo', 3, 8)
201 test('endswith', 'ab', 0, 'ab', 0, 1)
202 test('endswith', 'ab', 0, 'ab', 0, 0)