1 from test_support
import verbose
4 # XXX: kludge... short circuit if strings don't have methods
10 def test(name
, input, output
, *args
):
12 print 'string.%s%s =? %s... ' % (name
, (input,) + args
, output
),
14 # Prefer string methods over string module functions
16 f
= getattr(input, name
)
17 value
= apply(f
, args
)
18 except AttributeError:
19 f
= getattr(string
, name
)
20 value
= apply(f
, (input,) + args
)
26 print f
, `
input`
, `output`
, `value`
31 test('atoi', " 1 ", 1)
32 test('atoi', " 1x", ValueError)
33 test('atoi', " x1 ", ValueError)
34 test('atol', " 1 ", 1L)
35 test('atol', " 1x ", ValueError)
36 test('atol', " x1 ", ValueError)
37 test('atof', " 1 ", 1.0)
38 test('atof', " 1x ", ValueError)
39 test('atof', " x1 ", ValueError)
41 test('capitalize', ' hello ', ' hello ')
42 test('capitalize', 'hello ', 'Hello ')
43 test('find', 'abcdefghiabc', 0, 'abc')
44 test('find', 'abcdefghiabc', 9, 'abc', 1)
45 test('find', 'abcdefghiabc', -1, 'def', 4)
46 test('rfind', 'abcdefghiabc', 9, 'abc')
47 test('lower', 'HeLLo', 'hello')
48 test('lower', 'hello', 'hello')
49 test('upper', 'HeLLo', 'HELLO')
50 test('upper', 'HELLO', 'HELLO')
52 test('title', ' hello ', ' Hello ')
53 test('title', 'hello ', 'Hello ')
54 test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
55 test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
56 test('title', "getInt", 'Getint')
58 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi')
59 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 8)
60 test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab def\ng hi', 4)
61 test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab def\ng hi', 4)
63 test('islower', 'a', 1)
64 test('islower', 'A', 0)
65 test('islower', '\n', 0)
66 test('islower', 'abc', 1)
67 test('islower', 'aBc', 0)
68 test('islower', 'abc\n', 1)
70 test('isupper', 'a', 0)
71 test('isupper', 'A', 1)
72 test('isupper', '\n', 0)
73 test('isupper', 'ABC', 1)
74 test('isupper', 'AbC', 0)
75 test('isupper', 'ABC\n', 1)
77 test('istitle', 'a', 0)
78 test('istitle', 'A', 1)
79 test('istitle', '\n', 0)
80 test('istitle', 'A Titlecased Line', 1)
81 test('istitle', 'A\nTitlecased Line', 1)
82 test('istitle', 'A Titlecased, Line', 1)
83 test('istitle', 'Not a capitalized String', 0)
84 test('istitle', 'Not\ta Titlecase String', 0)
85 test('istitle', 'Not--a Titlecase String', 0)
87 test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
88 test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
89 test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
90 test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
91 test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
92 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
93 test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
95 transtable
= '\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 test('maketrans', 'abc', transtable
, 'xyz')
98 test('maketrans', 'abc', ValueError, 'xyzq')
100 test('split', 'this is the split function',
101 ['this', 'is', 'the', 'split', 'function'])
102 test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
103 test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
104 test('split', 'a b c d', ['a', 'b c d'], None, 1)
105 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
106 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
107 test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
108 test('split', 'a b c d', ['a b c d'], None, 0)
109 test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
110 test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
112 # join now works with any sequence type
114 def __init__(self
): self
.seq
= 'wxyz'
115 def __len__(self
): return len(self
.seq
)
116 def __getitem__(self
, i
): return self
.seq
[i
]
118 test('join', ['a', 'b', 'c', 'd'], 'a b c d')
119 test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
120 test('join', Sequence(), 'w x y z')
121 test('join', 7, TypeError)
123 class BadSeq(Sequence
):
124 def __init__(self
): self
.seq
= [7, 'hello', 123L]
126 test('join', BadSeq(), TypeError)
128 # try a few long ones
129 print string
.join(['x' * 100] * 100, ':')
130 print string
.join(('x' * 100,) * 100, ':')
132 test('strip', ' hello ', 'hello')
133 test('lstrip', ' hello ', 'hello ')
134 test('rstrip', ' hello ', ' hello')
135 test('strip', 'hello', 'hello')
137 test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
138 test('translate', 'xyzabcdef', 'xyzxyz', transtable
, 'def')
140 table
= string
.maketrans('a', 'A')
141 test('translate', 'abc', 'Abc', table
)
142 test('translate', 'xyz', 'xyz', table
)
144 test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
145 test('replace', 'one!two!three!', 'onetwothree', '!', '')
146 test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
147 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
148 test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
149 test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
150 test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
151 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
152 test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
154 test('startswith', 'hello', 1, 'he')
155 test('startswith', 'hello', 1, 'hello')
156 test('startswith', 'hello', 0, 'hello world')
157 test('startswith', 'hello', 1, '')
158 test('startswith', 'hello', 0, 'ello')
159 test('startswith', 'hello', 1, 'ello', 1)
160 test('startswith', 'hello', 1, 'o', 4)
161 test('startswith', 'hello', 0, 'o', 5)
162 test('startswith', 'hello', 1, '', 5)
163 test('startswith', 'hello', 0, 'lo', 6)
164 test('startswith', 'helloworld', 1, 'lowo', 3)
165 test('startswith', 'helloworld', 1, 'lowo', 3, 7)
166 test('startswith', 'helloworld', 0, 'lowo', 3, 6)
168 test('endswith', 'hello', 1, 'lo')
169 test('endswith', 'hello', 0, 'he')
170 test('endswith', 'hello', 1, '')
171 test('endswith', 'hello', 0, 'hello world')
172 test('endswith', 'helloworld', 0, 'worl')
173 test('endswith', 'helloworld', 1, 'worl', 3, 9)
174 test('endswith', 'helloworld', 1, 'world', 3, 12)
175 test('endswith', 'helloworld', 1, 'lowo', 1, 7)
176 test('endswith', 'helloworld', 1, 'lowo', 2, 7)
177 test('endswith', 'helloworld', 1, 'lowo', 3, 7)
178 test('endswith', 'helloworld', 0, 'lowo', 4, 7)
179 test('endswith', 'helloworld', 0, 'lowo', 3, 8)
180 test('endswith', 'ab', 0, 'ab', 0, 1)
181 test('endswith', 'ab', 0, 'ab', 0, 0)