blob: db03d35708e18f58d601a61a188d6a1c1f49819b [file] [log] [blame]
Guido van Rossum24bdb042000-03-28 20:29:59 +00001""" Test script for the unicodedata module.
2
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +00003 Written by Marc-Andre Lemburg (mal@lemburg.com).
Guido van Rossum24bdb042000-03-28 20:29:59 +00004
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +00005 (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
Guido van Rossum24bdb042000-03-28 20:29:59 +00006
7"""#"
Marc-André Lemburg36619082001-01-17 19:11:13 +00008from test_support import verify, verbose
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +00009import sha
Guido van Rossum24bdb042000-03-28 20:29:59 +000010
Marc-André Lemburg67ceca72000-09-27 12:24:34 +000011encoding = 'utf-8'
12
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000013def test_methods():
14
15 h = sha.sha()
16 for i in range(65536):
17 char = unichr(i)
18 data = [
Fred Drake004d5e62000-10-23 17:22:08 +000019
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000020 # Predicates (single char)
21 char.isalnum() and u'1' or u'0',
22 char.isalpha() and u'1' or u'0',
23 char.isdecimal() and u'1' or u'0',
24 char.isdigit() and u'1' or u'0',
25 char.islower() and u'1' or u'0',
26 char.isnumeric() and u'1' or u'0',
27 char.isspace() and u'1' or u'0',
28 char.istitle() and u'1' or u'0',
29 char.isupper() and u'1' or u'0',
Fred Drake004d5e62000-10-23 17:22:08 +000030
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000031 # Predicates (multiple chars)
32 (char + u'abc').isalnum() and u'1' or u'0',
33 (char + u'abc').isalpha() and u'1' or u'0',
34 (char + u'123').isdecimal() and u'1' or u'0',
35 (char + u'123').isdigit() and u'1' or u'0',
36 (char + u'abc').islower() and u'1' or u'0',
37 (char + u'123').isnumeric() and u'1' or u'0',
38 (char + u' \t').isspace() and u'1' or u'0',
39 (char + u'abc').istitle() and u'1' or u'0',
40 (char + u'ABC').isupper() and u'1' or u'0',
41
42 # Mappings (single char)
43 char.lower(),
44 char.upper(),
45 char.title(),
Fred Drake004d5e62000-10-23 17:22:08 +000046
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000047 # Mappings (multiple chars)
48 (char + u'abc').lower(),
49 (char + u'ABC').upper(),
50 (char + u'abc').title(),
51 (char + u'ABC').title(),
Fred Drake004d5e62000-10-23 17:22:08 +000052
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000053 ]
Marc-André Lemburg67ceca72000-09-27 12:24:34 +000054 h.update(u''.join(data).encode(encoding))
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000055 return h.hexdigest()
56
57def test_unicodedata():
58
59 h = sha.sha()
60 for i in range(65536):
61 char = unichr(i)
62 data = [
63 # Properties
64 str(unicodedata.digit(char, -1)),
65 str(unicodedata.numeric(char, -1)),
66 str(unicodedata.decimal(char, -1)),
67 unicodedata.category(char),
68 unicodedata.bidirectional(char),
69 unicodedata.decomposition(char),
70 str(unicodedata.mirrored(char)),
71 str(unicodedata.combining(char)),
Fred Drake004d5e62000-10-23 17:22:08 +000072 ]
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000073 h.update(''.join(data))
74 return h.hexdigest()
75
76### Run tests
77
78print 'Testing Unicode Database...'
79print 'Methods:',
80print test_methods()
81
82# In case unicodedata is not available, this will raise an ImportError,
83# but still test the above cases...
Guido van Rossum24bdb042000-03-28 20:29:59 +000084import unicodedata
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000085print 'Functions:',
86print test_unicodedata()
Guido van Rossum24bdb042000-03-28 20:29:59 +000087
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +000088# Some additional checks of the API:
89print 'API:',
Guido van Rossum24bdb042000-03-28 20:29:59 +000090
Marc-André Lemburg36619082001-01-17 19:11:13 +000091verify(unicodedata.digit(u'A',None) is None)
92verify(unicodedata.digit(u'9') == 9)
93verify(unicodedata.digit(u'\u215b',None) is None)
94verify(unicodedata.digit(u'\u2468') == 9)
Guido van Rossum24bdb042000-03-28 20:29:59 +000095
Marc-André Lemburg36619082001-01-17 19:11:13 +000096verify(unicodedata.numeric(u'A',None) is None)
97verify(unicodedata.numeric(u'9') == 9)
98verify(unicodedata.numeric(u'\u215b') == 0.125)
99verify(unicodedata.numeric(u'\u2468') == 9.0)
Guido van Rossum24bdb042000-03-28 20:29:59 +0000100
Marc-André Lemburg36619082001-01-17 19:11:13 +0000101verify(unicodedata.decimal(u'A',None) is None)
102verify(unicodedata.decimal(u'9') == 9)
103verify(unicodedata.decimal(u'\u215b',None) is None)
104verify(unicodedata.decimal(u'\u2468',None) is None)
Guido van Rossum24bdb042000-03-28 20:29:59 +0000105
Marc-André Lemburg36619082001-01-17 19:11:13 +0000106verify(unicodedata.category(u'\uFFFE') == 'Cn')
107verify(unicodedata.category(u'a') == 'Ll')
108verify(unicodedata.category(u'A') == 'Lu')
Guido van Rossum24bdb042000-03-28 20:29:59 +0000109
Marc-André Lemburg36619082001-01-17 19:11:13 +0000110verify(unicodedata.bidirectional(u'\uFFFE') == '')
111verify(unicodedata.bidirectional(u' ') == 'WS')
112verify(unicodedata.bidirectional(u'A') == 'L')
Guido van Rossum24bdb042000-03-28 20:29:59 +0000113
Marc-André Lemburg36619082001-01-17 19:11:13 +0000114verify(unicodedata.decomposition(u'\uFFFE') == '')
115verify(unicodedata.decomposition(u'\u00bc') == '<fraction> 0031 2044 0034')
Guido van Rossum24bdb042000-03-28 20:29:59 +0000116
Marc-André Lemburg36619082001-01-17 19:11:13 +0000117verify(unicodedata.mirrored(u'\uFFFE') == 0)
118verify(unicodedata.mirrored(u'a') == 0)
119verify(unicodedata.mirrored(u'\u2201') == 1)
Guido van Rossum24bdb042000-03-28 20:29:59 +0000120
Marc-André Lemburg36619082001-01-17 19:11:13 +0000121verify(unicodedata.combining(u'\uFFFE') == 0)
122verify(unicodedata.combining(u'a') == 0)
123verify(unicodedata.combining(u'\u20e1') == 230)
Guido van Rossum24bdb042000-03-28 20:29:59 +0000124
Marc-André Lemburg6a20ee72000-09-26 16:18:58 +0000125print 'ok'