blob: b994fb2c83fb553f32aae59bcf31efb394602dea [file] [log] [blame]
Guido van Rossuma831cac2000-03-10 23:23:21 +00001""" Test script for the Unicode implementation.
2
3
4Written by Marc-Andre Lemburg (mal@lemburg.com).
5
6(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
7
8"""
9from test_support import verbose
10import sys
11
12def test(method, input, output, *args):
13 if verbose:
14 print '%s.%s%s =? %s... ' % (repr(input), method, args, output),
15 try:
16 f = getattr(input, method)
17 value = apply(f, args)
18 except:
19 value = sys.exc_type
20 exc = sys.exc_info()
21 else:
22 exc = None
23 if value != output:
24 if verbose:
25 print 'no'
26 print '*',f, `input`, `output`, `value`
27 if exc:
28 print ' value == %s: %s' % (exc[:2])
29 else:
30 if verbose:
31 print 'yes'
32
33test('capitalize', u' hello ', u' hello ')
34test('capitalize', u'hello ', u'Hello ')
35
36test('title', u' hello ', u' Hello ')
37test('title', u'hello ', u'Hello ')
38test('title', u"fOrMaT thIs aS titLe String", u'Format This As Title String')
39test('title', u"fOrMaT,thIs-aS*titLe;String", u'Format,This-As*Title;String')
40test('title', u"getInt", u'Getint')
41
42test('find', u'abcdefghiabc', 0, u'abc')
43test('find', u'abcdefghiabc', 9, u'abc', 1)
44test('find', u'abcdefghiabc', -1, u'def', 4)
45
46test('rfind', u'abcdefghiabc', 9, u'abc')
47
48test('lower', u'HeLLo', u'hello')
49test('lower', u'hello', u'hello')
50
51test('upper', u'HeLLo', u'HELLO')
52test('upper', u'HELLO', u'HELLO')
53
54if 0:
55 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'
56
57 test('maketrans', u'abc', transtable, u'xyz')
58 test('maketrans', u'abc', ValueError, u'xyzq')
59
60test('split', u'this is the split function',
61 [u'this', u'is', u'the', u'split', u'function'])
62test('split', u'a|b|c|d', [u'a', u'b', u'c', u'd'], u'|')
63test('split', u'a|b|c|d', [u'a', u'b', u'c|d'], u'|', 2)
64test('split', u'a b c d', [u'a', u'b c d'], None, 1)
65test('split', u'a b c d', [u'a', u'b', u'c d'], None, 2)
66test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 3)
67test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 4)
68test('split', u'a b c d', [u'a b c d'], None, 0)
69test('split', u'a b c d', [u'a', u'b', u'c d'], None, 2)
70test('split', u'a b c d ', [u'a', u'b', u'c', u'd'])
71
72# join now works with any sequence type
73class Sequence:
74 def __init__(self): self.seq = 'wxyz'
75 def __len__(self): return len(self.seq)
76 def __getitem__(self, i): return self.seq[i]
77
78test('join', u' ', u'a b c d', [u'a', u'b', u'c', u'd'])
79test('join', u'', u'abcd', (u'a', u'b', u'c', u'd'))
80test('join', u' ', u'w x y z', Sequence())
81test('join', u' ', TypeError, 7)
82
83class BadSeq(Sequence):
84 def __init__(self): self.seq = [7, u'hello', 123L]
85
86test('join', u' ', TypeError, BadSeq())
87
88result = u''
89for i in range(10):
90 if i > 0:
91 result = result + u':'
92 result = result + u'x'*10
93test('join', u':', result, [u'x' * 10] * 10)
94test('join', u':', result, (u'x' * 10,) * 10)
95
96test('strip', u' hello ', u'hello')
97test('lstrip', u' hello ', u'hello ')
98test('rstrip', u' hello ', u' hello')
99test('strip', u'hello', u'hello')
100
101test('swapcase', u'HeLLo cOmpUteRs', u'hEllO CoMPuTErS')
102
103if 0:
104 test('translate', u'xyzabcdef', u'xyzxyz', transtable, u'def')
105
106 table = string.maketrans('a', u'A')
107 test('translate', u'abc', u'Abc', table)
108 test('translate', u'xyz', u'xyz', table)
109
110test('replace', u'one!two!three!', u'one@two!three!', u'!', u'@', 1)
111test('replace', u'one!two!three!', u'one@two@three!', u'!', u'@', 2)
112test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 3)
113test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 4)
114test('replace', u'one!two!three!', u'one!two!three!', u'!', u'@', 0)
115test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@')
116test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@')
117test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@', 2)
118
119test('startswith', u'hello', 1, u'he')
120test('startswith', u'hello', 1, u'hello')
121test('startswith', u'hello', 0, u'hello world')
122test('startswith', u'hello', 1, u'')
123test('startswith', u'hello', 0, u'ello')
124test('startswith', u'hello', 1, u'ello', 1)
125test('startswith', u'hello', 1, u'o', 4)
126test('startswith', u'hello', 0, u'o', 5)
127test('startswith', u'hello', 1, u'', 5)
128test('startswith', u'hello', 0, u'lo', 6)
129test('startswith', u'helloworld', 1, u'lowo', 3)
130test('startswith', u'helloworld', 1, u'lowo', 3, 7)
131test('startswith', u'helloworld', 0, u'lowo', 3, 6)
132
133test('endswith', u'hello', 1, u'lo')
134test('endswith', u'hello', 0, u'he')
135test('endswith', u'hello', 1, u'')
136test('endswith', u'hello', 0, u'hello world')
137test('endswith', u'helloworld', 0, u'worl')
138test('endswith', u'helloworld', 1, u'worl', 3, 9)
139test('endswith', u'helloworld', 1, u'world', 3, 12)
140test('endswith', u'helloworld', 1, u'lowo', 1, 7)
141test('endswith', u'helloworld', 1, u'lowo', 2, 7)
142test('endswith', u'helloworld', 1, u'lowo', 3, 7)
143test('endswith', u'helloworld', 0, u'lowo', 4, 7)
144test('endswith', u'helloworld', 0, u'lowo', 3, 8)
145test('endswith', u'ab', 0, u'ab', 0, 1)
146test('endswith', u'ab', 0, u'ab', 0, 0)
147
148test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi')
149test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 8)
150test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 4)
151test('expandtabs', u'abc\r\nab\tdef\ng\thi', u'abc\r\nab def\ng hi', 4)
152
153if 0:
154 test('capwords', u'abc def ghi', u'Abc Def Ghi')
155 test('capwords', u'abc\tdef\nghi', u'Abc Def Ghi')
156 test('capwords', u'abc\t def \nghi', u'Abc Def Ghi')
157
158# Comparisons:
159print 'Testing Unicode comparisons...',
160assert u'abc' == 'abc'
161assert 'abc' == u'abc'
162assert u'abc' == u'abc'
163assert u'abcd' > 'abc'
164assert 'abcd' > u'abc'
165assert u'abcd' > u'abc'
166assert u'abc' < 'abcd'
167assert 'abc' < u'abcd'
168assert u'abc' < u'abcd'
169print 'done.'
170
171test('ljust', u'abc', u'abc ', 10)
172test('rjust', u'abc', u' abc', 10)
173test('center', u'abc', u' abc ', 10)
174test('ljust', u'abc', u'abc ', 6)
175test('rjust', u'abc', u' abc', 6)
176test('center', u'abc', u' abc ', 6)
177test('ljust', u'abc', u'abc', 2)
178test('rjust', u'abc', u'abc', 2)
179test('center', u'abc', u'abc', 2)
180
181test('islower', u'a', 1)
182test('islower', u'A', 0)
183test('islower', u'\n', 0)
184test('islower', u'\u1FFc', 0)
185test('islower', u'abc', 1)
186test('islower', u'aBc', 0)
187test('islower', u'abc\n', 1)
188
189test('isupper', u'a', 0)
190test('isupper', u'A', 1)
191test('isupper', u'\n', 0)
192test('isupper', u'\u1FFc', 0)
193test('isupper', u'ABC', 1)
194test('isupper', u'AbC', 0)
195test('isupper', u'ABC\n', 1)
196
197test('istitle', u'a', 0)
198test('istitle', u'A', 1)
199test('istitle', u'\n', 0)
200test('istitle', u'\u1FFc', 1)
201test('istitle', u'A Titlecased Line', 1)
202test('istitle', u'A\nTitlecased Line', 1)
203test('istitle', u'A Titlecased, Line', 1)
204test('istitle', u'Greek \u1FFcitlecases ...', 1)
205test('istitle', u'Not a capitalized String', 0)
206test('istitle', u'Not\ta Titlecase String', 0)
207test('istitle', u'Not--a Titlecase String', 0)
208
209test('splitlines', u"abc\ndef\n\rghi", [u'abc', u'def', u'', u'ghi'])
210test('splitlines', u"abc\ndef\n\r\nghi", [u'abc', u'def', u'', u'ghi'])
211test('splitlines', u"abc\ndef\r\nghi", [u'abc', u'def', u'ghi'])
212test('splitlines', u"abc\ndef\r\nghi\n", [u'abc', u'def', u'ghi'])
213test('splitlines', u"abc\ndef\r\nghi\n\r", [u'abc', u'def', u'ghi', u''])
214test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'', u'abc', u'def', u'ghi', u''])
215test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'', u'abc\012def\015\012ghi\012\015'], 1)
216test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'', u'abc', u'def\015\012ghi\012\015'], 2)
217
218test('translate', u"abababc", u'bbbc', {ord('a'):None})
219test('translate', u"abababc", u'iiic', {ord('a'):None, ord('b'):ord('i')})
220test('translate', u"abababc", u'iiix', {ord('a'):None, ord('b'):ord('i'), ord('c'):u'x'})
221
222# Formatting:
223print 'Testing Unicode formatting strings...',
224assert u"%s, %s" % (u"abc", "abc") == u'abc, abc'
225assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, 2, 3) == u'abc, abc, 1, 2.000000, 3.00'
226assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, -2, 3) == u'abc, abc, 1, -2.000000, 3.00'
227assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.5) == u'abc, abc, -1, -2.000000, 3.50'
228assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.57) == u'abc, abc, -1, -2.000000, 3.57'
229assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 1003.57) == u'abc, abc, -1, -2.000000, 1003.57'
230assert u"%c" % (u"abc",) == u'a'
231assert u"%c" % ("abc",) == u'a'
232assert u"%c" % (34,) == u'"'
233assert u"%c" % (36,) == u'$'
234assert u"%r, %r" % (u"abc", "abc") == u"u'abc', 'abc'"
235assert u"%(x)s, %(y)s" % {'x':u"abc", 'y':"def"} == u'abc, def'
236assert u"%(x)s, %(ä)s" % {'x':u"abc", u'ä'.encode('utf-8'):"def"} == u'abc, def'
237print 'done.'
238
239# Test Unicode database APIs
240try:
241 import unicodedata
242except ImportError:
243 pass
244else:
245 print 'Testing unicodedata module...',
246
247 assert unicodedata.digit(u'A',None) is None
248 assert unicodedata.digit(u'9') == 9
249 assert unicodedata.digit(u'\u215b',None) is None
250 assert unicodedata.digit(u'\u2468') == 9
251
252 assert unicodedata.numeric(u'A',None) is None
253 assert unicodedata.numeric(u'9') == 9
254 assert unicodedata.numeric(u'\u215b') == 0.125
255 assert unicodedata.numeric(u'\u2468') == 9.0
256
257 assert unicodedata.decimal(u'A',None) is None
258 assert unicodedata.decimal(u'9') == 9
259 assert unicodedata.decimal(u'\u215b',None) is None
260 assert unicodedata.decimal(u'\u2468',None) is None
261
262 assert unicodedata.category(u'\uFFFE') == 'Cn'
263 assert unicodedata.category(u'a') == 'Ll'
264 assert unicodedata.category(u'A') == 'Lu'
265
266 assert unicodedata.bidirectional(u'\uFFFE') == ''
267 assert unicodedata.bidirectional(u' ') == 'WS'
268 assert unicodedata.bidirectional(u'A') == 'L'
269
270 assert unicodedata.decomposition(u'\uFFFE') == ''
271 assert unicodedata.decomposition(u'\u00bc') == '<fraction> 0031 2044 0034'
272
273 assert unicodedata.mirrored(u'\uFFFE') == 0
274 assert unicodedata.mirrored(u'a') == 0
275 assert unicodedata.mirrored(u'\u2201') == 1
276
277 assert unicodedata.combining(u'\uFFFE') == 0
278 assert unicodedata.combining(u'a') == 0
279 assert unicodedata.combining(u'\u20e1') == 230
280
281 print 'done.'