blob: ec57c2684d7f01579ef47a02fd9ba511663632e4 [file] [log] [blame]
Guido van Rossum228b8e81997-04-02 06:13:34 +00001from test_support import verbose
Guido van Rossum3e06ab12000-06-29 19:35:29 +00002import string, sys
3
4# XXX: kludge... short circuit if strings don't have methods
5try:
6 ''.join
7except AttributeError:
8 raise ImportError
Guido van Rossum28d4ba21996-09-11 19:07:45 +00009
Guido van Rossumf1e63541997-05-22 20:48:03 +000010def test(name, input, output, *args):
Guido van Rossum228b8e81997-04-02 06:13:34 +000011 if verbose:
Guido van Rossum548703a1998-03-26 22:14:20 +000012 print 'string.%s%s =? %s... ' % (name, (input,) + args, output),
Guido van Rossumf1e63541997-05-22 20:48:03 +000013 try:
Guido van Rossum3e06ab12000-06-29 19:35:29 +000014 # Prefer string methods over string module functions
15 try:
16 f = getattr(input, name)
17 value = apply(f, args)
18 except AttributeError:
19 f = getattr(string, name)
20 value = apply(f, (input,) + args)
Guido van Rossumf1e63541997-05-22 20:48:03 +000021 except:
Guido van Rossum548703a1998-03-26 22:14:20 +000022 value = sys.exc_type
Guido van Rossumf1e63541997-05-22 20:48:03 +000023 if value != output:
Guido van Rossum548703a1998-03-26 22:14:20 +000024 if verbose:
25 print 'no'
26 print f, `input`, `output`, `value`
Guido van Rossumf1e63541997-05-22 20:48:03 +000027 else:
Guido van Rossum548703a1998-03-26 22:14:20 +000028 if verbose:
29 print 'yes'
Guido van Rossum28d4ba21996-09-11 19:07:45 +000030
Guido van Rossumf1e63541997-05-22 20:48:03 +000031test('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)
Guido van Rossum5de1f8d1996-12-10 16:02:14 +000040
Guido van Rossumf1e63541997-05-22 20:48:03 +000041test('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')
Guido van Rossum3e06ab12000-06-29 19:35:29 +000048test('lower', 'hello', 'hello')
Guido van Rossumf1e63541997-05-22 20:48:03 +000049test('upper', 'HeLLo', 'HELLO')
Guido van Rossum3e06ab12000-06-29 19:35:29 +000050test('upper', 'HELLO', 'HELLO')
51
52test('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", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
Guido van Rossum5de1f8d1996-12-10 16:02:14 +000094
Guido van Rossumf1e63541997-05-22 20:48:03 +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'
Guido van Rossum5de1f8d1996-12-10 16:02:14 +000096
Guido van Rossumf1e63541997-05-22 20:48:03 +000097test('maketrans', 'abc', transtable, 'xyz')
98test('maketrans', 'abc', ValueError, 'xyzq')
Guido van Rossum5de1f8d1996-12-10 16:02:14 +000099
Guido van Rossumf1e63541997-05-22 20:48:03 +0000100test('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)
Guido van Rossumb978d181997-12-09 16:56:41 +0000104test('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 Rossum3e06ab12000-06-29 19:35:29 +0000108test('split', 'a b c d', ['a b c d'], None, 0)
Guido van Rossumb978d181997-12-09 16:56:41 +0000109test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000110test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
Guido van Rossum5de1f8d1996-12-10 16:02:14 +0000111
Guido van Rossumf1e63541997-05-22 20:48:03 +0000112# 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]
Guido van Rossum228b8e81997-04-02 06:13:34 +0000117
Guido van Rossumf1e63541997-05-22 20:48:03 +0000118test('join', ['a', 'b', 'c', 'd'], 'a b c d')
119test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
120test('join', Sequence(), 'w x y z')
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000121test('join', 7, TypeError)
122
123class BadSeq(Sequence):
124 def __init__(self): self.seq = [7, 'hello', 123L]
125
126test('join', BadSeq(), TypeError)
Guido van Rossum228b8e81997-04-02 06:13:34 +0000127
Guido van Rossumf1e63541997-05-22 20:48:03 +0000128# try a few long ones
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000129print string.join(['x' * 100] * 100, ':')
130print string.join(('x' * 100,) * 100, ':')
Guido van Rossum5de1f8d1996-12-10 16:02:14 +0000131
Guido van Rossumf1e63541997-05-22 20:48:03 +0000132test('strip', ' hello ', 'hello')
133test('lstrip', ' hello ', 'hello ')
134test('rstrip', ' hello ', ' hello')
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000135test('strip', 'hello', 'hello')
Guido van Rossum5de1f8d1996-12-10 16:02:14 +0000136
Guido van Rossumf1e63541997-05-22 20:48:03 +0000137test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
138test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
Guido van Rossum5de1f8d1996-12-10 16:02:14 +0000139
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000140table = string.maketrans('a', 'A')
141test('translate', 'abc', 'Abc', table)
142test('translate', 'xyz', 'xyz', table)
143
Guido van Rossumb978d181997-12-09 16:56:41 +0000144test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000145test('replace', 'one!two!three!', 'onetwothree', '!', '')
Guido van Rossumb978d181997-12-09 16:56:41 +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 Rossum3e06ab12000-06-29 19:35:29 +0000149test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
Guido van Rossumb978d181997-12-09 16:56:41 +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
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000154test('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)
164test('startswith', 'helloworld', 1, 'lowo', 3)
165test('startswith', 'helloworld', 1, 'lowo', 3, 7)
166test('startswith', 'helloworld', 0, 'lowo', 3, 6)
167
168test('endswith', 'hello', 1, 'lo')
169test('endswith', 'hello', 0, 'he')
170test('endswith', 'hello', 1, '')
171test('endswith', 'hello', 0, 'hello world')
172test('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)
180test('endswith', 'ab', 0, 'ab', 0, 1)
181test('endswith', 'ab', 0, 'ab', 0, 0)
182
183string.whitespace
184string.lowercase
185string.uppercase