mirror of
https://github.com/python/cpython.git
synced 2025-10-26 00:08:32 +00:00
Fix test_codecs for Windows: check size of wchar_t, not sys.maxunicode
This commit is contained in:
parent
734e159b12
commit
182d90d9ee
1 changed files with 43 additions and 40 deletions
|
|
@ -3,6 +3,9 @@ import unittest
|
||||||
import codecs
|
import codecs
|
||||||
import locale
|
import locale
|
||||||
import sys, _testcapi, io
|
import sys, _testcapi, io
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
SIZEOF_WCHAR_T = ctypes.sizeof(ctypes.c_wchar)
|
||||||
|
|
||||||
class Queue(object):
|
class Queue(object):
|
||||||
"""
|
"""
|
||||||
|
|
@ -888,53 +891,53 @@ class PunycodeTest(unittest.TestCase):
|
||||||
self.assertEqual(uni, puny.decode("punycode"))
|
self.assertEqual(uni, puny.decode("punycode"))
|
||||||
|
|
||||||
class UnicodeInternalTest(unittest.TestCase):
|
class UnicodeInternalTest(unittest.TestCase):
|
||||||
|
@unittest.skipUnless(SIZEOF_WCHAR_T == 4, 'specific to 32-bit wchar_t')
|
||||||
def test_bug1251300(self):
|
def test_bug1251300(self):
|
||||||
# Decoding with unicode_internal used to not correctly handle "code
|
# Decoding with unicode_internal used to not correctly handle "code
|
||||||
# points" above 0x10ffff on UCS-4 builds.
|
# points" above 0x10ffff on UCS-4 builds.
|
||||||
if sys.maxunicode > 0xffff:
|
ok = [
|
||||||
ok = [
|
(b"\x00\x10\xff\xff", "\U0010ffff"),
|
||||||
(b"\x00\x10\xff\xff", "\U0010ffff"),
|
(b"\x00\x00\x01\x01", "\U00000101"),
|
||||||
(b"\x00\x00\x01\x01", "\U00000101"),
|
(b"", ""),
|
||||||
(b"", ""),
|
]
|
||||||
]
|
not_ok = [
|
||||||
not_ok = [
|
b"\x7f\xff\xff\xff",
|
||||||
b"\x7f\xff\xff\xff",
|
b"\x80\x00\x00\x00",
|
||||||
b"\x80\x00\x00\x00",
|
b"\x81\x00\x00\x00",
|
||||||
b"\x81\x00\x00\x00",
|
b"\x00",
|
||||||
b"\x00",
|
b"\x00\x00\x00\x00\x00",
|
||||||
b"\x00\x00\x00\x00\x00",
|
]
|
||||||
]
|
for internal, uni in ok:
|
||||||
for internal, uni in ok:
|
if sys.byteorder == "little":
|
||||||
if sys.byteorder == "little":
|
internal = bytes(reversed(internal))
|
||||||
internal = bytes(reversed(internal))
|
self.assertEqual(uni, internal.decode("unicode_internal"))
|
||||||
self.assertEqual(uni, internal.decode("unicode_internal"))
|
for internal in not_ok:
|
||||||
for internal in not_ok:
|
if sys.byteorder == "little":
|
||||||
if sys.byteorder == "little":
|
internal = bytes(reversed(internal))
|
||||||
internal = bytes(reversed(internal))
|
self.assertRaises(UnicodeDecodeError, internal.decode,
|
||||||
self.assertRaises(UnicodeDecodeError, internal.decode,
|
"unicode_internal")
|
||||||
"unicode_internal")
|
|
||||||
|
|
||||||
|
@unittest.skipUnless(SIZEOF_WCHAR_T == 4, 'specific to 32-bit wchar_t')
|
||||||
def test_decode_error_attributes(self):
|
def test_decode_error_attributes(self):
|
||||||
if sys.maxunicode > 0xffff:
|
try:
|
||||||
try:
|
b"\x00\x00\x00\x00\x00\x11\x11\x00".decode("unicode_internal")
|
||||||
b"\x00\x00\x00\x00\x00\x11\x11\x00".decode("unicode_internal")
|
except UnicodeDecodeError as ex:
|
||||||
except UnicodeDecodeError as ex:
|
self.assertEqual("unicode_internal", ex.encoding)
|
||||||
self.assertEqual("unicode_internal", ex.encoding)
|
self.assertEqual(b"\x00\x00\x00\x00\x00\x11\x11\x00", ex.object)
|
||||||
self.assertEqual(b"\x00\x00\x00\x00\x00\x11\x11\x00", ex.object)
|
self.assertEqual(4, ex.start)
|
||||||
self.assertEqual(4, ex.start)
|
self.assertEqual(8, ex.end)
|
||||||
self.assertEqual(8, ex.end)
|
else:
|
||||||
else:
|
self.fail()
|
||||||
self.fail()
|
|
||||||
|
|
||||||
|
@unittest.skipUnless(SIZEOF_WCHAR_T == 4, 'specific to 32-bit wchar_t')
|
||||||
def test_decode_callback(self):
|
def test_decode_callback(self):
|
||||||
if sys.maxunicode > 0xffff:
|
codecs.register_error("UnicodeInternalTest", codecs.ignore_errors)
|
||||||
codecs.register_error("UnicodeInternalTest", codecs.ignore_errors)
|
decoder = codecs.getdecoder("unicode_internal")
|
||||||
decoder = codecs.getdecoder("unicode_internal")
|
ab = "ab".encode("unicode_internal").decode()
|
||||||
ab = "ab".encode("unicode_internal").decode()
|
ignored = decoder(bytes("%s\x22\x22\x22\x22%s" % (ab[:4], ab[4:]),
|
||||||
ignored = decoder(bytes("%s\x22\x22\x22\x22%s" % (ab[:4], ab[4:]),
|
"ascii"),
|
||||||
"ascii"),
|
"UnicodeInternalTest")
|
||||||
"UnicodeInternalTest")
|
self.assertEqual(("ab", 12), ignored)
|
||||||
self.assertEqual(("ab", 12), ignored)
|
|
||||||
|
|
||||||
def test_encode_length(self):
|
def test_encode_length(self):
|
||||||
# Issue 3739
|
# Issue 3739
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue