blob: ec57c2684d7f01579ef47a02fd9ba511663632e4 [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', ''])
Guido van Rossumb28bc8c2000-04-11 15:37:24 +000093test('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 +000094
Barry Warsaw50f0e161999-06-10 22:53:10 +000095transtable = '\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'
96
97test('maketrans', 'abc', transtable, 'xyz')
98test('maketrans', 'abc', ValueError, 'xyzq')
99
100test('split', 'this is the split function',
101 ['this', 'is', 'the', 'split', 'function'])
102test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
103test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
104test('split', 'a b c d', ['a', 'b c d'], None, 1)
105test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
106test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
107test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000108test('split', 'a b c d', ['a b c d'], None, 0)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000109test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
Guido van Rossuma831cac2000-03-10 23:23:21 +0000110test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
Barry Warsaw50f0e161999-06-10 22:53:10 +0000111
112# join now works with any sequence type
113class Sequence:
114 def __init__(self): self.seq = 'wxyz'
115 def __len__(self): return len(self.seq)
116 def __getitem__(self, i): return self.seq[i]
117
118test('join', ['a', 'b', 'c', 'd'], 'a b c d')
119test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
120test('join', Sequence(), 'w x y z')
Barry Warsawd5258681999-06-14 18:38:42 +0000121test('join', 7, TypeError)
122
Barry Warsawd5258681999-06-14 18:38:42 +0000123class BadSeq(Sequence):
Guido van Rossuma831cac2000-03-10 23:23:21 +0000124 def __init__(self): self.seq = [7, 'hello', 123L]
Barry Warsawd5258681999-06-14 18:38:42 +0000125
Guido van Rossuma831cac2000-03-10 23:23:21 +0000126test('join', BadSeq(), TypeError)
Barry Warsaw50f0e161999-06-10 22:53:10 +0000127
128# try a few long ones
129print string.join(['x' * 100] * 100, ':')
130print string.join(('x' * 100,) * 100, ':')
131
132test('strip', ' hello ', 'hello')
133test('lstrip', ' hello ', 'hello ')
134test('rstrip', ' hello ', ' hello')
135test('strip', 'hello', 'hello')
136
137test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
138test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
139
140table = string.maketrans('a', 'A')
141test('translate', 'abc', 'Abc', table)
142test('translate', 'xyz', 'xyz', table)
143
144test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
Barry Warsaw51ac5802000-03-20 16:36:48 +0000145test('replace', 'one!two!three!', 'onetwothree', '!', '')
Barry Warsaw50f0e161999-06-10 22:53:10 +0000146test('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