blob: bb6d035f9b6c78d9b77741213dc1b20211b3c0fe [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
87test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
88test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
89test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
90test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
91test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
92test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
93test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc\012def\015\012ghi\012\015'], 1)
94test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def\015\012ghi\012\015'], 2)
95
Barry Warsaw50f0e161999-06-10 22:53:10 +000096transtable = '\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'
97
98test('maketrans', 'abc', transtable, 'xyz')
99test('maketrans', 'abc', ValueError, 'xyzq')
100
101test('split', 'this is the split function',
102 ['this', 'is', 'the', 'split', 'function'])
103test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
104test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
105test('split', 'a b c d', ['a', 'b c d'], None, 1)
106test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
107test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
108test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000109test('split', 'a b c d', ['a b c d'], None, 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000110test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000111test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
Barry Warsaw50f0e161999-06-10 22:53:10 +0000112
113# join now works with any sequence type
114class 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]
118
119test('join', ['a', 'b', 'c', 'd'], 'a b c d')
120test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
121test('join', Sequence(), 'w x y z')
Barry Warsawd5258681999-06-14 18:38:42 +0000122test('join', 7, TypeError)
123
Barry Warsawd5258681999-06-14 18:38:42 +0000124class BadSeq(Sequence):
Guido van Rossuma831cac2000-03-10 23:23:21 +0000125 def __init__(self): self.seq = [7, 'hello', 123L]
Barry Warsawd5258681999-06-14 18:38:42 +0000126
Guido van Rossuma831cac2000-03-10 23:23:21 +0000127test('join', BadSeq(), TypeError)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000128
129# try a few long ones
130print string.join(['x' * 100] * 100, ':')
131print string.join(('x' * 100,) * 100, ':')
132
133test('strip', ' hello ', 'hello')
134test('lstrip', ' hello ', 'hello ')
135test('rstrip', ' hello ', ' hello')
136test('strip', 'hello', 'hello')
137
138test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
139test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
140
141table = string.maketrans('a', 'A')
142test('translate', 'abc', 'Abc', table)
143test('translate', 'xyz', 'xyz', table)
144
145test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
146test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
147test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
148test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000149test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000150test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
151test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
152test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
153
154test('startswith', 'hello', 1, 'he')
155test('startswith', 'hello', 1, 'hello')
156test('startswith', 'hello', 0, 'hello world')
157test('startswith', 'hello', 1, '')
158test('startswith', 'hello', 0, 'ello')
159test('startswith', 'hello', 1, 'ello', 1)
160test('startswith', 'hello', 1, 'o', 4)
161test('startswith', 'hello', 0, 'o', 5)
162test('startswith', 'hello', 1, '', 5)
163test('startswith', 'hello', 0, 'lo', 6)
Barry Warsaw122473f1999-06-11 17:51:13 +0000164test('startswith', 'helloworld', 1, 'lowo', 3)
165test('startswith', 'helloworld', 1, 'lowo', 3, 7)
166test('startswith', 'helloworld', 0, 'lowo', 3, 6)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000167
168test('endswith', 'hello', 1, 'lo')
169test('endswith', 'hello', 0, 'he')
170test('endswith', 'hello', 1, '')
171test('endswith', 'hello', 0, 'hello world')
Barry Warsaw8a9514a1999-06-11 17:48:07 +0000172test('endswith', 'helloworld', 0, 'worl')
173test('endswith', 'helloworld', 1, 'worl', 3, 9)
174test('endswith', 'helloworld', 1, 'world', 3, 12)
175test('endswith', 'helloworld', 1, 'lowo', 1, 7)
176test('endswith', 'helloworld', 1, 'lowo', 2, 7)
177test('endswith', 'helloworld', 1, 'lowo', 3, 7)
178test('endswith', 'helloworld', 0, 'lowo', 4, 7)
179test('endswith', 'helloworld', 0, 'lowo', 3, 8)
Barry Warsaw6e1d78a1999-06-15 16:49:11 +0000180test('endswith', 'ab', 0, 'ab', 0, 1)
181test('endswith', 'ab', 0, 'ab', 0, 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000182
183string.whitespace
184string.lowercase
185string.uppercase