Fix text failures when ctypes is not available

(followup to Victor's 85d11cf67aa8 and 7a50e549bd11)
This commit is contained in:
Antoine Pitrou 2011-10-05 13:01:41 +02:00
parent 4637309ee6
commit 00b2c86d09
2 changed files with 39 additions and 28 deletions

View file

@ -1,8 +1,13 @@
import test.support, unittest import test.support, unittest
import sys, codecs, html.entities, unicodedata import sys, codecs, html.entities, unicodedata
import ctypes
SIZEOF_WCHAR_T = ctypes.sizeof(ctypes.c_wchar) try:
import ctypes
except ImportError:
ctypes = None
SIZEOF_WCHAR_T = -1
else:
SIZEOF_WCHAR_T = ctypes.sizeof(ctypes.c_wchar)
class PosReturn: class PosReturn:
# this can be used for configurable callbacks # this can be used for configurable callbacks
@ -572,33 +577,34 @@ class CodecCallbackTest(unittest.TestCase):
UnicodeEncodeError("ascii", "\uffff", 0, 1, "ouch")), UnicodeEncodeError("ascii", "\uffff", 0, 1, "ouch")),
("\\uffff", 1) ("\\uffff", 1)
) )
if ctypes.sizeof(ctypes.c_wchar) == 2: if SIZEOF_WCHAR_T == 2:
len_wide = 2 len_wide = 2
else: else:
len_wide = 1 len_wide = 1
self.assertEqual( if SIZEOF_WCHAR_T > 0:
codecs.backslashreplace_errors( self.assertEqual(
UnicodeEncodeError("ascii", "\U00010000", codecs.backslashreplace_errors(
0, len_wide, "ouch")), UnicodeEncodeError("ascii", "\U00010000",
("\\U00010000", len_wide) 0, len_wide, "ouch")),
) ("\\U00010000", len_wide)
self.assertEqual( )
codecs.backslashreplace_errors( self.assertEqual(
UnicodeEncodeError("ascii", "\U0010ffff", codecs.backslashreplace_errors(
0, len_wide, "ouch")), UnicodeEncodeError("ascii", "\U0010ffff",
("\\U0010ffff", len_wide) 0, len_wide, "ouch")),
) ("\\U0010ffff", len_wide)
# Lone surrogates (regardless of unicode width) )
self.assertEqual( # Lone surrogates (regardless of unicode width)
codecs.backslashreplace_errors( self.assertEqual(
UnicodeEncodeError("ascii", "\ud800", 0, 1, "ouch")), codecs.backslashreplace_errors(
("\\ud800", 1) UnicodeEncodeError("ascii", "\ud800", 0, 1, "ouch")),
) ("\\ud800", 1)
self.assertEqual( )
codecs.backslashreplace_errors( self.assertEqual(
UnicodeEncodeError("ascii", "\udfff", 0, 1, "ouch")), codecs.backslashreplace_errors(
("\\udfff", 1) UnicodeEncodeError("ascii", "\udfff", 0, 1, "ouch")),
) ("\\udfff", 1)
)
def test_badhandlerresults(self): def test_badhandlerresults(self):
results = ( 42, "foo", (1,2,3), ("foo", 1, 3), ("foo", None), ("foo",), ("foo", 1, 3), ("foo", None), ("foo",) ) results = ( 42, "foo", (1,2,3), ("foo", 1, 3), ("foo", None), ("foo",), ("foo", 1, 3), ("foo", None), ("foo",) )

View file

@ -3,9 +3,14 @@ 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) try:
import ctypes
except ImportError:
ctypes = None
SIZEOF_WCHAR_T = -1
else:
SIZEOF_WCHAR_T = ctypes.sizeof(ctypes.c_wchar)
class Queue(object): class Queue(object):
""" """