Added test suite for the complete Unicode database. The test previously · python/cpython@6a20ee7 (original) (raw)
1
1
`""" Test script for the unicodedata module.
`
2
2
``
3
``
`-
Written by Marc-Andre Lemburg (mal@lemburg.com).
`
``
3
`+
Written by Marc-Andre Lemburg (mal@lemburg.com).
`
4
4
``
5
``
`-
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
`
``
5
`+
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
`
6
6
``
7
7
`"""#"
`
8
``
`-
from test_support import verbose
`
9
``
`-
import sys
`
``
8
`+
import sha
`
10
9
``
11
``
`-
Test Unicode database APIs
`
``
10
`+
def test_methods():
`
``
11
+
``
12
`+
h = sha.sha()
`
``
13
`+
for i in range(65536):
`
``
14
`+
char = unichr(i)
`
``
15
`+
data = [
`
``
16
+
``
17
`+
Predicates (single char)
`
``
18
`+
char.isalnum() and u'1' or u'0',
`
``
19
`+
char.isalpha() and u'1' or u'0',
`
``
20
`+
char.isdecimal() and u'1' or u'0',
`
``
21
`+
char.isdigit() and u'1' or u'0',
`
``
22
`+
char.islower() and u'1' or u'0',
`
``
23
`+
char.isnumeric() and u'1' or u'0',
`
``
24
`+
char.isspace() and u'1' or u'0',
`
``
25
`+
char.istitle() and u'1' or u'0',
`
``
26
`+
char.isupper() and u'1' or u'0',
`
``
27
+
``
28
`+
Predicates (multiple chars)
`
``
29
`+
(char + u'abc').isalnum() and u'1' or u'0',
`
``
30
`+
(char + u'abc').isalpha() and u'1' or u'0',
`
``
31
`+
(char + u'123').isdecimal() and u'1' or u'0',
`
``
32
`+
(char + u'123').isdigit() and u'1' or u'0',
`
``
33
`+
(char + u'abc').islower() and u'1' or u'0',
`
``
34
`+
(char + u'123').isnumeric() and u'1' or u'0',
`
``
35
`+
(char + u' \t').isspace() and u'1' or u'0',
`
``
36
`+
(char + u'abc').istitle() and u'1' or u'0',
`
``
37
`+
(char + u'ABC').isupper() and u'1' or u'0',
`
``
38
+
``
39
`+
Mappings (single char)
`
``
40
`+
char.lower(),
`
``
41
`+
char.upper(),
`
``
42
`+
char.title(),
`
``
43
+
``
44
`+
Mappings (multiple chars)
`
``
45
`+
(char + u'abc').lower(),
`
``
46
`+
(char + u'ABC').upper(),
`
``
47
`+
(char + u'abc').title(),
`
``
48
`+
(char + u'ABC').title(),
`
``
49
+
``
50
`+
]
`
``
51
`+
h.update(u''.join(data).encode('unicode-internal'))
`
``
52
`+
return h.hexdigest()
`
``
53
+
``
54
`+
def test_unicodedata():
`
``
55
+
``
56
`+
h = sha.sha()
`
``
57
`+
for i in range(65536):
`
``
58
`+
char = unichr(i)
`
``
59
`+
data = [
`
``
60
`+
Properties
`
``
61
`+
str(unicodedata.digit(char, -1)),
`
``
62
`+
str(unicodedata.numeric(char, -1)),
`
``
63
`+
str(unicodedata.decimal(char, -1)),
`
``
64
`+
unicodedata.category(char),
`
``
65
`+
unicodedata.bidirectional(char),
`
``
66
`+
unicodedata.decomposition(char),
`
``
67
`+
str(unicodedata.mirrored(char)),
`
``
68
`+
str(unicodedata.combining(char)),
`
``
69
`+
]
`
``
70
`+
h.update(''.join(data))
`
``
71
`+
return h.hexdigest()
`
``
72
+
``
73
`+
Run tests
`
``
74
+
``
75
`+
print 'Testing Unicode Database...'
`
``
76
`+
print 'Methods:',
`
``
77
`+
print test_methods()
`
``
78
+
``
79
`+
In case unicodedata is not available, this will raise an ImportError,
`
``
80
`+
but still test the above cases...
`
12
81
`import unicodedata
`
``
82
`+
print 'Functions:',
`
``
83
`+
print test_unicodedata()
`
13
84
``
14
``
`-
print 'Testing unicodedata module...',
`
``
85
`+
Some additional checks of the API:
`
``
86
`+
print 'API:',
`
15
87
``
16
88
`assert unicodedata.digit(u'A',None) is None
`
17
89
`assert unicodedata.digit(u'9') == 9
`
47
119
`assert unicodedata.combining(u'a') == 0
`
48
120
`assert unicodedata.combining(u'\u20e1') == 230
`
49
121
``
50
``
`-
print 'done.'
`
``
122
`+
print 'ok'
`