1 from test
.test_support
import run_unittest
, open_urlresource
6 from unicodedata
import normalize
, unidata_version
8 TESTDATAFILE
= "NormalizationTest" + os
.extsep
+ "txt"
9 TESTDATAURL
= "http://www.unicode.org/Public/" + unidata_version
+ "/ucd/" + TESTDATAFILE
11 if os
.path
.exists(TESTDATAFILE
):
12 f
= open(TESTDATAFILE
)
15 if not unidata_version
in l
:
16 os
.unlink(TESTDATAFILE
)
18 class RangeError(Exception):
22 return normalize("NFC", str)
25 return normalize("NFKC", str)
28 return normalize("NFD", str)
31 return normalize("NFKD", str)
34 data
= [int(x
, 16) for x
in data
.split(" ")]
36 if x
> sys
.maxunicode
:
38 return u
"".join([unichr(x
) for x
in data
])
40 class NormalizationTest(unittest
.TestCase
):
43 # Hit the exception early
45 open_urlresource(TESTDATAURL
)
47 self
.skipTest("Could not retrieve " + TESTDATAURL
)
48 for line
in open_urlresource(TESTDATAURL
):
50 line
= line
.split('#')[0]
54 if line
.startswith("@Part"):
55 part
= line
.split()[0]
58 # XXX we don't support PRI #29 yet, so skip these tests for now
61 c1
,c2
,c3
,c4
,c5
= [unistr(x
) for x
in line
.split(';')[:-1]]
63 # Skip unsupported characters;
64 # try atleast adding c1 if we are in part1
67 c1
= unistr(line
.split(';')[0])
75 self
.assertTrue(c2
== NFC(c1
) == NFC(c2
) == NFC(c3
), line
)
76 self
.assertTrue(c4
== NFC(c4
) == NFC(c5
), line
)
77 self
.assertTrue(c3
== NFD(c1
) == NFD(c2
) == NFD(c3
), line
)
78 self
.assertTrue(c5
== NFD(c4
) == NFD(c5
), line
)
79 self
.assertTrue(c4
== NFKC(c1
) == NFKC(c2
) == \
80 NFKC(c3
) == NFKC(c4
) == NFKC(c5
),
82 self
.assertTrue(c5
== NFKD(c1
) == NFKD(c2
) == \
83 NFKD(c3
) == NFKD(c4
) == NFKD(c5
),
90 # Perform tests for all other data
91 for c
in range(sys
.maxunicode
+1):
95 self
.assertTrue(X
== NFC(X
) == NFD(X
) == NFKC(X
) == NFKD(X
), c
)
97 def test_bug_834676(self
):
98 # Check for bug 834676
99 normalize('NFC', u
'\ud55c\uae00')
103 run_unittest(NormalizationTest
)
105 if __name__
== "__main__":