mirror of
https://github.com/python/cpython.git
synced 2024-12-04 15:25:13 +08:00
Added test suite for the complete Unicode database. The test previously
only tested a few cases.
This commit is contained in:
parent
ba90909f2f
commit
6a20ee7dec
@ -1,17 +1,89 @@
|
||||
""" Test script for the unicodedata module.
|
||||
|
||||
Written by Marc-Andre Lemburg (mal@lemburg.com).
|
||||
Written by Marc-Andre Lemburg (mal@lemburg.com).
|
||||
|
||||
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
|
||||
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
|
||||
|
||||
"""#"
|
||||
from test_support import verbose
|
||||
import sys
|
||||
import sha
|
||||
|
||||
# Test Unicode database APIs
|
||||
def test_methods():
|
||||
|
||||
h = sha.sha()
|
||||
for i in range(65536):
|
||||
char = unichr(i)
|
||||
data = [
|
||||
|
||||
# Predicates (single char)
|
||||
char.isalnum() and u'1' or u'0',
|
||||
char.isalpha() and u'1' or u'0',
|
||||
char.isdecimal() and u'1' or u'0',
|
||||
char.isdigit() and u'1' or u'0',
|
||||
char.islower() and u'1' or u'0',
|
||||
char.isnumeric() and u'1' or u'0',
|
||||
char.isspace() and u'1' or u'0',
|
||||
char.istitle() and u'1' or u'0',
|
||||
char.isupper() and u'1' or u'0',
|
||||
|
||||
# Predicates (multiple chars)
|
||||
(char + u'abc').isalnum() and u'1' or u'0',
|
||||
(char + u'abc').isalpha() and u'1' or u'0',
|
||||
(char + u'123').isdecimal() and u'1' or u'0',
|
||||
(char + u'123').isdigit() and u'1' or u'0',
|
||||
(char + u'abc').islower() and u'1' or u'0',
|
||||
(char + u'123').isnumeric() and u'1' or u'0',
|
||||
(char + u' \t').isspace() and u'1' or u'0',
|
||||
(char + u'abc').istitle() and u'1' or u'0',
|
||||
(char + u'ABC').isupper() and u'1' or u'0',
|
||||
|
||||
# Mappings (single char)
|
||||
char.lower(),
|
||||
char.upper(),
|
||||
char.title(),
|
||||
|
||||
# Mappings (multiple chars)
|
||||
(char + u'abc').lower(),
|
||||
(char + u'ABC').upper(),
|
||||
(char + u'abc').title(),
|
||||
(char + u'ABC').title(),
|
||||
|
||||
]
|
||||
h.update(u''.join(data).encode('unicode-internal'))
|
||||
return h.hexdigest()
|
||||
|
||||
def test_unicodedata():
|
||||
|
||||
h = sha.sha()
|
||||
for i in range(65536):
|
||||
char = unichr(i)
|
||||
data = [
|
||||
# Properties
|
||||
str(unicodedata.digit(char, -1)),
|
||||
str(unicodedata.numeric(char, -1)),
|
||||
str(unicodedata.decimal(char, -1)),
|
||||
unicodedata.category(char),
|
||||
unicodedata.bidirectional(char),
|
||||
unicodedata.decomposition(char),
|
||||
str(unicodedata.mirrored(char)),
|
||||
str(unicodedata.combining(char)),
|
||||
]
|
||||
h.update(''.join(data))
|
||||
return h.hexdigest()
|
||||
|
||||
### Run tests
|
||||
|
||||
print 'Testing Unicode Database...'
|
||||
print 'Methods:',
|
||||
print test_methods()
|
||||
|
||||
# In case unicodedata is not available, this will raise an ImportError,
|
||||
# but still test the above cases...
|
||||
import unicodedata
|
||||
print 'Functions:',
|
||||
print test_unicodedata()
|
||||
|
||||
print 'Testing unicodedata module...',
|
||||
# Some additional checks of the API:
|
||||
print 'API:',
|
||||
|
||||
assert unicodedata.digit(u'A',None) is None
|
||||
assert unicodedata.digit(u'9') == 9
|
||||
@ -47,4 +119,4 @@ assert unicodedata.combining(u'\uFFFE') == 0
|
||||
assert unicodedata.combining(u'a') == 0
|
||||
assert unicodedata.combining(u'\u20e1') == 230
|
||||
|
||||
print 'done.'
|
||||
print 'ok'
|
||||
|
Loading…
Reference in New Issue
Block a user