blob: c7c3e72bb8abff1918b7e26f5ecbd74624389187 [file] [log] [blame]
Barry Warsaw50f0e161999-06-10 22:53:10 +00001from test_support import verbose
2import string, sys
3
Barry Warsaw6e1d78a1999-06-15 16:49:11 +00004# XXX: kludge... short circuit if strings don't have methods
5try:
6 ''.join
7except AttributeError:
8 raise ImportError
9
Barry Warsaw50f0e161999-06-10 22:53:10 +000010def test(name, input, output, *args):
11 if verbose:
12 print 'string.%s%s =? %s... ' % (name, (input,) + args, output),
Barry Warsaw50f0e161999-06-10 22:53:10 +000013 try:
Guido van Rossuma831cac2000-03-10 23:23:21 +000014 # Prefer string methods over string module functions
Barry Warsaw8a9514a1999-06-11 17:48:07 +000015 try:
Barry Warsaw8a9514a1999-06-11 17:48:07 +000016 f = getattr(input, name)
17 value = apply(f, args)
Guido van Rossuma831cac2000-03-10 23:23:21 +000018 except AttributeError:
19 f = getattr(string, name)
20 value = apply(f, (input,) + args)
Barry Warsaw50f0e161999-06-10 22:53:10 +000021 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'
30
31test('atoi', " 1 ", 1)
32test('atoi', " 1x", ValueError)
33test('atoi', " x1 ", ValueError)
34test('atol', " 1 ", 1L)
35test('atol', " 1x ", ValueError)
36test('atol', " x1 ", ValueError)
37test('atof', " 1 ", 1.0)
38test('atof', " 1x ", ValueError)
39test('atof', " x1 ", ValueError)
40
41test('capitalize', ' hello ', ' hello ')
42test('capitalize', 'hello ', 'Hello ')
43test('find', 'abcdefghiabc', 0, 'abc')
44test('find', 'abcdefghiabc', 9, 'abc', 1)
45test('find', 'abcdefghiabc', -1, 'def', 4)
46test('rfind', 'abcdefghiabc', 9, 'abc')
47test('lower', 'HeLLo', 'hello')
48test('lower', 'hello', 'hello')
49test('upper', 'HeLLo', 'HELLO')
50test('upper', 'HELLO', 'HELLO')
51
Guido van Rossuma831cac2000-03-10 23:23:21 +000052test('title', ' hello ', ' Hello ')
53test('title', 'hello ', 'Hello ')
54test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
55test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
56test('title', "getInt", 'Getint')
57
58test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
59test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
60test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
61test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
62
63test('islower', 'a', 1)
64test('islower', 'A', 0)
65test('islower', '\n', 0)
66test('islower', 'abc', 1)
67test('islower', 'aBc', 0)
68test('islower', 'abc\n', 1)
69
70test('isupper', 'a', 0)
71test('isupper', 'A', 1)
72test('isupper', '\n', 0)
73test('isupper', 'ABC', 1)
74test('isupper', 'AbC', 0)
75test('isupper', 'ABC\n', 1)
76
77test('istitle', 'a', 0)
78test('istitle', 'A', 1)
79test('istitle', '\n', 0)
80test('istitle', 'A Titlecased Line', 1)
81test('istitle', 'A\nTitlecased Line', 1)
82test('istitle', 'A Titlecased, Line', 1)
83test('istitle', 'Not a capitalized String', 0)
84test('istitle', 'Not\ta Titlecase String', 0)
85test('istitle', 'Not--a Titlecase String', 0)
86
Marc-André Lemburg9d467412000-07-05 09:46:40 +000087test('isalpha', 'a', 1)
88test('isalpha', 'A', 1)
89test('isalpha', '\n', 0)
90test('isalpha', 'abc', 1)
91test('isalpha', 'aBc123', 0)
92test('isalpha', 'abc\n', 0)
93
94test('isalnum', 'a', 1)
95test('isalnum', 'A', 1)
96test('isalnum', '\n', 0)
97test('isalnum', '123abc456', 1)
98test('isalnum', 'a1b3c', 1)
99test('isalnum', 'aBc000 ', 0)
100test('isalnum', 'abc\n', 0)
101
Guido van Rossuma831cac2000-03-10 23:23:21 +0000102test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
103test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
104test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
105test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
106test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
107test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
Guido van Rossumb28bc8c2000-04-11 15:37:24 +0000108test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000109
Barry Warsaw50f0e161999-06-10 22:53:10 +0000110transtable = '\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'
111
112test('maketrans', 'abc', transtable, 'xyz')
113test('maketrans', 'abc', ValueError, 'xyzq')
114
115test('split', 'this is the split function',
116 ['this', 'is', 'the', 'split', 'function'])
117test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
118test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
119test('split', 'a b c d', ['a', 'b c d'], None, 1)
120test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
121test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
122test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000123test('split', 'a b c d', ['a b c d'], None, 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000124test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000125test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
Barry Warsaw50f0e161999-06-10 22:53:10 +0000126
127# join now works with any sequence type
128class Sequence:
129 def __init__(self): self.seq = 'wxyz'
130 def __len__(self): return len(self.seq)
131 def __getitem__(self, i): return self.seq[i]
132
133test('join', ['a', 'b', 'c', 'd'], 'a b c d')
134test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
135test('join', Sequence(), 'w x y z')
Barry Warsawd5258681999-06-14 18:38:42 +0000136test('join', 7, TypeError)
137
Barry Warsawd5258681999-06-14 18:38:42 +0000138class BadSeq(Sequence):
Guido van Rossuma831cac2000-03-10 23:23:21 +0000139 def __init__(self): self.seq = [7, 'hello', 123L]
Barry Warsawd5258681999-06-14 18:38:42 +0000140
Guido van Rossuma831cac2000-03-10 23:23:21 +0000141test('join', BadSeq(), TypeError)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000142
143# try a few long ones
144print string.join(['x' * 100] * 100, ':')
145print string.join(('x' * 100,) * 100, ':')
146
147test('strip', ' hello ', 'hello')
148test('lstrip', ' hello ', 'hello ')
149test('rstrip', ' hello ', ' hello')
150test('strip', 'hello', 'hello')
151
152test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
153test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
154
155table = string.maketrans('a', 'A')
156test('translate', 'abc', 'Abc', table)
157test('translate', 'xyz', 'xyz', table)
158
159test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
Barry Warsaw51ac5802000-03-20 16:36:48 +0000160test('replace', 'one!two!three!', 'onetwothree', '!', '')
Barry Warsaw50f0e161999-06-10 22:53:10 +0000161test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
162test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
163test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000164test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000165test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
166test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
167test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
168
169test('startswith', 'hello', 1, 'he')
170test('startswith', 'hello', 1, 'hello')
171test('startswith', 'hello', 0, 'hello world')
172test('startswith', 'hello', 1, '')
173test('startswith', 'hello', 0, 'ello')
174test('startswith', 'hello', 1, 'ello', 1)
175test('startswith', 'hello', 1, 'o', 4)
176test('startswith', 'hello', 0, 'o', 5)
177test('startswith', 'hello', 1, '', 5)
178test('startswith', 'hello', 0, 'lo', 6)
Barry Warsaw122473f1999-06-11 17:51:13 +0000179test('startswith', 'helloworld', 1, 'lowo', 3)
180test('startswith', 'helloworld', 1, 'lowo', 3, 7)
181test('startswith', 'helloworld', 0, 'lowo', 3, 6)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000182
183test('endswith', 'hello', 1, 'lo')
184test('endswith', 'hello', 0, 'he')
185test('endswith', 'hello', 1, '')
186test('endswith', 'hello', 0, 'hello world')
Barry Warsaw8a9514a1999-06-11 17:48:07 +0000187test('endswith', 'helloworld', 0, 'worl')
188test('endswith', 'helloworld', 1, 'worl', 3, 9)
189test('endswith', 'helloworld', 1, 'world', 3, 12)
190test('endswith', 'helloworld', 1, 'lowo', 1, 7)
191test('endswith', 'helloworld', 1, 'lowo', 2, 7)
192test('endswith', 'helloworld', 1, 'lowo', 3, 7)
193test('endswith', 'helloworld', 0, 'lowo', 4, 7)
194test('endswith', 'helloworld', 0, 'lowo', 3, 8)
Barry Warsaw6e1d78a1999-06-15 16:49:11 +0000195test('endswith', 'ab', 0, 'ab', 0, 1)
196test('endswith', 'ab', 0, 'ab', 0, 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000197
198string.whitespace
199string.lowercase
200string.uppercase