[Python-checkins] r83191 - in python/branches/py3k/Lib/ctypes/test: test_arrays.py test_bitfields.py test_buffers.py test_bytes.py test_cast.py test_cfuncs.py test_errno.py test_internals.py test_keeprefs.py test_libc.py test_objects.py test_parameters.py test_prototypes.py test_python_api.py test_random_things.py test_repr.py test_returnfuncptrs.py test_stringptr.py test_strings.py test_structures.py

victor.stinner python-checkins at python.org
Wed Jul 28 01:36:41 CEST 2010


Author: victor.stinner
Date: Wed Jul 28 01:36:41 2010
New Revision: 83191

Log:
Fix ctypes tests to avoid implicit bytes-unicode conversion


Modified:
   python/branches/py3k/Lib/ctypes/test/test_arrays.py
   python/branches/py3k/Lib/ctypes/test/test_bitfields.py
   python/branches/py3k/Lib/ctypes/test/test_buffers.py
   python/branches/py3k/Lib/ctypes/test/test_bytes.py
   python/branches/py3k/Lib/ctypes/test/test_cast.py
   python/branches/py3k/Lib/ctypes/test/test_cfuncs.py
   python/branches/py3k/Lib/ctypes/test/test_errno.py
   python/branches/py3k/Lib/ctypes/test/test_internals.py
   python/branches/py3k/Lib/ctypes/test/test_keeprefs.py
   python/branches/py3k/Lib/ctypes/test/test_libc.py
   python/branches/py3k/Lib/ctypes/test/test_objects.py
   python/branches/py3k/Lib/ctypes/test/test_parameters.py
   python/branches/py3k/Lib/ctypes/test/test_prototypes.py
   python/branches/py3k/Lib/ctypes/test/test_python_api.py
   python/branches/py3k/Lib/ctypes/test/test_random_things.py
   python/branches/py3k/Lib/ctypes/test/test_repr.py
   python/branches/py3k/Lib/ctypes/test/test_returnfuncptrs.py
   python/branches/py3k/Lib/ctypes/test/test_stringptr.py
   python/branches/py3k/Lib/ctypes/test/test_strings.py
   python/branches/py3k/Lib/ctypes/test/test_structures.py

Modified: python/branches/py3k/Lib/ctypes/test/test_arrays.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_arrays.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_arrays.py	Wed Jul 28 01:36:41 2010
@@ -42,7 +42,7 @@
 
         CharArray = ARRAY(c_char, 3)
 
-        ca = CharArray("a", "b", "c")
+        ca = CharArray(b"a", b"b", b"c")
 
         # Should this work? It doesn't:
         # CharArray("abc")
@@ -89,7 +89,7 @@
 
     def test_from_address(self):
         # Failed with 0.9.8, reported by JUrner
-        p = create_string_buffer("foo")
+        p = create_string_buffer(b"foo")
         sz = (c_char * 3).from_address(addressof(p))
         self.assertEqual(sz[:], b"foo")
         self.assertEqual(sz[::], b"foo")

Modified: python/branches/py3k/Lib/ctypes/test/test_bitfields.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_bitfields.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_bitfields.py	Wed Jul 28 01:36:41 2010
@@ -37,14 +37,14 @@
             for name in "ABCDEFGHI":
                 b = BITS()
                 setattr(b, name, i)
-                self.assertEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name)))
+                self.assertEqual(getattr(b, name), func(byref(b), name.encode('ascii')))
 
     def test_shorts(self):
         for i in range(256):
             for name in "MNOPQRS":
                 b = BITS()
                 setattr(b, name, i)
-                self.assertEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name)))
+                self.assertEqual(getattr(b, name), func(byref(b), name.encode('ascii')))
 
 signed_int_types = (c_byte, c_short, c_int, c_long, c_longlong)
 unsigned_int_types = (c_ubyte, c_ushort, c_uint, c_ulong, c_ulonglong)

Modified: python/branches/py3k/Lib/ctypes/test/test_buffers.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_buffers.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_buffers.py	Wed Jul 28 01:36:41 2010
@@ -9,7 +9,7 @@
         self.assertEqual(sizeof(b), 32 * sizeof(c_char))
         self.assertTrue(type(b[0]) is bytes)
 
-        b = create_string_buffer("abc")
+        b = create_string_buffer(b"abc")
         self.assertEqual(len(b), 4) # trailing nul char
         self.assertEqual(sizeof(b), 4 * sizeof(c_char))
         self.assertTrue(type(b[0]) is bytes)

Modified: python/branches/py3k/Lib/ctypes/test/test_bytes.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_bytes.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_bytes.py	Wed Jul 28 01:36:41 2010
@@ -11,10 +11,10 @@
         (c_char * 3)(b"a", b"b", b"c")
 
     def test_c_wchar(self):
-        x = c_wchar(b"x")
-        x.value = b"y"
-        c_wchar.from_param(b"x")
-        (c_wchar * 3)(b"a", b"b", b"c")
+        x = c_wchar("x")
+        x.value = "y"
+        c_wchar.from_param("x")
+        (c_wchar * 3)("a", "b", "c")
 
     def test_c_char_p(self):
         c_char_p("foo bar")
@@ -37,8 +37,8 @@
         class X(Structure):
             _fields_ = [("a", c_wchar * 3)]
 
-        X("abc")
-        x = X(b"abc")
+        X(b"abc")
+        x = X("abc")
         self.assertEqual(x.a, "abc")
         self.assertEqual(type(x.a), str)
 

Modified: python/branches/py3k/Lib/ctypes/test/test_cast.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_cast.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_cast.py	Wed Jul 28 01:36:41 2010
@@ -33,17 +33,17 @@
     def test_p2a_objects(self):
         array = (c_char_p * 5)()
         self.assertEqual(array._objects, None)
-        array[0] = "foo bar"
+        array[0] = b"foo bar"
         self.assertEqual(array._objects, {'0': b"foo bar"})
 
         p = cast(array, POINTER(c_char_p))
         # array and p share a common _objects attribute
         self.assertTrue(p._objects is array._objects)
         self.assertEqual(array._objects, {'0': b"foo bar", id(array): array})
-        p[0] = "spam spam"
+        p[0] = b"spam spam"
         self.assertEqual(p._objects, {'0': b"spam spam", id(array): array})
         self.assertTrue(array._objects is p._objects)
-        p[1] = "foo bar"
+        p[1] = b"foo bar"
         self.assertEqual(p._objects, {'1': b'foo bar', '0': b"spam spam", id(array): array})
         self.assertTrue(array._objects is p._objects)
 
@@ -71,7 +71,7 @@
 
     def test_char_p(self):
         # This didn't work: bad argument to internal function
-        s = c_char_p("hiho")
+        s = c_char_p(b"hiho")
         self.assertEqual(cast(cast(s, c_void_p), c_char_p).value,
                              b"hiho")
 

Modified: python/branches/py3k/Lib/ctypes/test/test_cfuncs.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_cfuncs.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_cfuncs.py	Wed Jul 28 01:36:41 2010
@@ -107,7 +107,7 @@
     def test_ulong_plus(self):
         self._dll.tf_bL.restype = c_ulong
         self._dll.tf_bL.argtypes = (c_char, c_ulong)
-        self.assertEqual(self._dll.tf_bL(' ', 4294967295), 1431655765)
+        self.assertEqual(self._dll.tf_bL(b' ', 4294967295), 1431655765)
         self.assertEqual(self.U(), 4294967295)
 
     def test_longlong(self):

Modified: python/branches/py3k/Lib/ctypes/test/test_errno.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_errno.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_errno.py	Wed Jul 28 01:36:41 2010
@@ -19,7 +19,7 @@
 
         libc_open.argtypes = c_char_p, c_int
 
-        self.assertEqual(libc_open("", 0), -1)
+        self.assertEqual(libc_open(b"", 0), -1)
         self.assertEqual(get_errno(), errno.ENOENT)
 
         self.assertEqual(set_errno(32), errno.ENOENT)
@@ -35,7 +35,7 @@
                 else:
                     libc_open = libc.open
                 libc_open.argtypes = c_char_p, c_int
-                self.assertEqual(libc_open("", 0), -1)
+                self.assertEqual(libc_open(b"", 0), -1)
                 self.assertEqual(get_errno(), 0)
 
             t = threading.Thread(target=_worker)

Modified: python/branches/py3k/Lib/ctypes/test/test_internals.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_internals.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_internals.py	Wed Jul 28 01:36:41 2010
@@ -70,19 +70,17 @@
         class Y(Structure):
             _fields_ = [("x", X), ("y", X)]
 
-        s1 = "Hello, World"
-        s2 = "Hallo, Welt"
+        s1 = b"Hello, World"
+        s2 = b"Hallo, Welt"
 
         x = X()
         x.a = s1
         x.b = s2
-        self.assertEqual(x._objects, {"0": bytes(s1, "ascii"),
-                                          "1": bytes(s2, "ascii")})
+        self.assertEqual(x._objects, {"0": s1, "1": s2})
 
         y = Y()
         y.x = x
-        self.assertEqual(y._objects, {"0": {"0": bytes(s1, "ascii"),
-                                                "1": bytes(s2, "ascii")}})
+        self.assertEqual(y._objects, {"0": {"0": s1, "1": s2}})
 ##        x = y.x
 ##        del y
 ##        print x._b_base_._objects

Modified: python/branches/py3k/Lib/ctypes/test/test_keeprefs.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_keeprefs.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_keeprefs.py	Wed Jul 28 01:36:41 2010
@@ -13,9 +13,9 @@
     def test_ccharp(self):
         x = c_char_p()
         self.assertEquals(x._objects, None)
-        x.value = "abc"
+        x.value = b"abc"
         self.assertEquals(x._objects, b"abc")
-        x = c_char_p("spam")
+        x = c_char_p(b"spam")
         self.assertEquals(x._objects, b"spam")
 
 class StructureTestCase(unittest.TestCase):
@@ -37,8 +37,8 @@
         x = X()
         self.assertEquals(x._objects, None)
 
-        x.a = "spam"
-        x.b = "foo"
+        x.a = b"spam"
+        x.b = b"foo"
         self.assertEquals(x._objects, {"0": b"spam", "1": b"foo"})
 
     def test_struct_struct(self):

Modified: python/branches/py3k/Lib/ctypes/test/test_libc.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_libc.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_libc.py	Wed Jul 28 01:36:41 2010
@@ -25,7 +25,7 @@
         def sort(a, b):
             return three_way_cmp(a[0], b[0])
 
-        chars = create_string_buffer("spam, spam, and spam")
+        chars = create_string_buffer(b"spam, spam, and spam")
         lib.my_qsort(chars, len(chars)-1, sizeof(c_char), comparefunc(sort))
         self.assertEqual(chars.raw, b"   ,,aaaadmmmnpppsss\x00")
 

Modified: python/branches/py3k/Lib/ctypes/test/test_objects.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_objects.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_objects.py	Wed Jul 28 01:36:41 2010
@@ -20,7 +20,7 @@
 The memory block stores pointers to strings, and the strings itself
 assigned from Python must be kept.
 
->>> array[4] = 'foo bar'
+>>> array[4] = b'foo bar'
 >>> array._objects
 {'4': b'foo bar'}
 >>> array[4]
@@ -45,7 +45,7 @@
 <ctypes.test.test_objects.X object at 0x...>
 >>>
 
->>> x.array[0] = 'spam spam spam'
+>>> x.array[0] = b'spam spam spam'
 >>> x._objects
 {'0:2': b'spam spam spam'}
 >>> x.array._b_base_._objects

Modified: python/branches/py3k/Lib/ctypes/test/test_parameters.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_parameters.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_parameters.py	Wed Jul 28 01:36:41 2010
@@ -19,7 +19,6 @@
         else:
             set_conversion_mode(*self.prev_conv_mode)
 
-
     def test_subclasses(self):
         from ctypes import c_void_p, c_char_p
         # ctypes 0.9.5 and before did overwrite from_param in SimpleType_new
@@ -60,12 +59,11 @@
         # new in 0.9.1: convert (encode) unicode to ascii
         self.assertEqual(c_char_p.from_param("123")._obj, b"123")
         self.assertRaises(UnicodeEncodeError, c_char_p.from_param, "123\377")
-
         self.assertRaises(TypeError, c_char_p.from_param, 42)
 
         # calling c_char_p.from_param with a c_char_p instance
         # returns the argument itself:
-        a = c_char_p("123")
+        a = c_char_p(b"123")
         self.assertTrue(c_char_p.from_param(a) is a)
 
     def test_cw_strings(self):

Modified: python/branches/py3k/Lib/ctypes/test/test_prototypes.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_prototypes.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_prototypes.py	Wed Jul 28 01:36:41 2010
@@ -127,7 +127,7 @@
         self.assertEqual(None, func(c_char_p(None)))
 
         self.assertEqual(b"123", func(c_buffer(b"123")))
-        ca = c_char("a")
+        ca = c_char(b"a")
         self.assertEqual(ord(b"a"), func(pointer(ca))[0])
         self.assertEqual(ord(b"a"), func(byref(ca))[0])
 

Modified: python/branches/py3k/Lib/ctypes/test/test_python_api.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_python_api.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_python_api.py	Wed Jul 28 01:36:41 2010
@@ -72,10 +72,10 @@
         PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
 
         buf = c_buffer(256)
-        PyOS_snprintf(buf, sizeof(buf), "Hello from %s", b"ctypes")
+        PyOS_snprintf(buf, sizeof(buf), b"Hello from %s", b"ctypes")
         self.assertEqual(buf.value, b"Hello from ctypes")
 
-        PyOS_snprintf(buf, sizeof(buf), "Hello from %s (%d, %d, %d)", b"ctypes", 1, 2, 3)
+        PyOS_snprintf(buf, sizeof(buf), b"Hello from %s (%d, %d, %d)", b"ctypes", 1, 2, 3)
         self.assertEqual(buf.value, b"Hello from ctypes (1, 2, 3)")
 
         # not enough arguments

Modified: python/branches/py3k/Lib/ctypes/test/test_random_things.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_random_things.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_random_things.py	Wed Jul 28 01:36:41 2010
@@ -66,7 +66,7 @@
 
     def test_TypeErrorDivisionError(self):
         cb = CFUNCTYPE(c_int, c_char_p)(callback_func)
-        out = self.capture_stderr(cb, "spam")
+        out = self.capture_stderr(cb, b"spam")
         self.assertEqual(out.splitlines()[-1],
                              "TypeError: "
                              "unsupported operand type(s) for /: 'int' and 'bytes'")

Modified: python/branches/py3k/Lib/ctypes/test/test_repr.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_repr.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_repr.py	Wed Jul 28 01:36:41 2010
@@ -22,8 +22,8 @@
             self.assertEqual("<X object at", repr(typ(42))[:12])
 
     def test_char(self):
-        self.assertEqual("c_char(b'x')", repr(c_char('x')))
-        self.assertEqual("<X object at", repr(X('x'))[:12])
+        self.assertEqual("c_char(b'x')", repr(c_char(b'x')))
+        self.assertEqual("<X object at", repr(X(b'x'))[:12])
 
 if __name__ == "__main__":
     unittest.main()

Modified: python/branches/py3k/Lib/ctypes/test/test_returnfuncptrs.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_returnfuncptrs.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_returnfuncptrs.py	Wed Jul 28 01:36:41 2010
@@ -28,10 +28,10 @@
         # _CFuncPtr instances are now callable with an integer argument
         # which denotes a function address:
         strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(addr)
-        self.assertTrue(strchr("abcdef", "b"), "bcdef")
-        self.assertEqual(strchr("abcdef", "x"), None)
-        self.assertRaises(ArgumentError, strchr, "abcdef", 3.0)
-        self.assertRaises(TypeError, strchr, "abcdef")
+        self.assertTrue(strchr(b"abcdef", b"b"), "bcdef")
+        self.assertEqual(strchr(b"abcdef", b"x"), None)
+        self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0)
+        self.assertRaises(TypeError, strchr, b"abcdef")
 
 if __name__ == "__main__":
     unittest.main()

Modified: python/branches/py3k/Lib/ctypes/test/test_stringptr.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_stringptr.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_stringptr.py	Wed Jul 28 01:36:41 2010
@@ -14,7 +14,7 @@
 
         # NULL pointer access
         self.assertRaises(ValueError, getattr, x.str, "contents")
-        b = c_buffer("Hello, World")
+        b = c_buffer(b"Hello, World")
         from sys import getrefcount as grc
         self.assertEqual(grc(b), 2)
         x.str = b
@@ -63,8 +63,8 @@
         # So we must keep a reference to buf separately
 
         strchr.restype = POINTER(c_char)
-        buf = c_buffer("abcdef")
-        r = strchr(buf, "c")
+        buf = c_buffer(b"abcdef")
+        r = strchr(buf, b"c")
         x = r[0], r[1], r[2], r[3], r[4]
         self.assertEqual(x, (b"c", b"d", b"e", b"f", b"\000"))
         del buf

Modified: python/branches/py3k/Lib/ctypes/test/test_strings.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_strings.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_strings.py	Wed Jul 28 01:36:41 2010
@@ -5,23 +5,23 @@
     def test(self):
         BUF = c_char * 4
 
-        buf = BUF("a", "b", "c")
+        buf = BUF(b"a", b"b", b"c")
         self.assertEqual(buf.value, b"abc")
         self.assertEqual(buf.raw, b"abc\000")
 
-        buf.value = "ABCD"
+        buf.value = b"ABCD"
         self.assertEqual(buf.value, b"ABCD")
         self.assertEqual(buf.raw, b"ABCD")
 
-        buf.value = "x"
+        buf.value = b"x"
         self.assertEqual(buf.value, b"x")
         self.assertEqual(buf.raw, b"x\000CD")
 
-        buf[1] = "Z"
+        buf[1] = b"Z"
         self.assertEqual(buf.value, b"xZCD")
         self.assertEqual(buf.raw, b"xZCD")
 
-        self.assertRaises(ValueError, setattr, buf, "value", "aaaaaaaa")
+        self.assertRaises(ValueError, setattr, buf, "value", b"aaaaaaaa")
         self.assertRaises(TypeError, setattr, buf, "value", 42)
 
     def test_c_buffer_value(self):

Modified: python/branches/py3k/Lib/ctypes/test/test_structures.py
==============================================================================
--- python/branches/py3k/Lib/ctypes/test/test_structures.py	(original)
+++ python/branches/py3k/Lib/ctypes/test/test_structures.py	Wed Jul 28 01:36:41 2010
@@ -205,15 +205,15 @@
                         ("age", c_int)]
 
         self.assertRaises(TypeError, Person, 42)
-        self.assertRaises(ValueError, Person, "asldkjaslkdjaslkdj")
+        self.assertRaises(ValueError, Person, b"asldkjaslkdjaslkdj")
         self.assertRaises(TypeError, Person, "Name", "HI")
 
         # short enough
-        self.assertEqual(Person("12345", 5).name, b"12345")
+        self.assertEqual(Person(b"12345", 5).name, b"12345")
         # exact fit
-        self.assertEqual(Person("123456", 5).name, b"123456")
+        self.assertEqual(Person(b"123456", 5).name, b"123456")
         # too long
-        self.assertRaises(ValueError, Person, "1234567", 5)
+        self.assertRaises(ValueError, Person, b"1234567", 5)
 
     def test_conflicting_initializers(self):
         class POINT(Structure):
@@ -267,7 +267,7 @@
                         ("phone", Phone),
                         ("age", c_int)]
 
-        p = Person("Someone", ("1234", "5678"), 5)
+        p = Person(b"Someone", (b"1234", b"5678"), 5)
 
         self.assertEqual(p.name, b"Someone")
         self.assertEqual(p.phone.areacode, b"1234")
@@ -284,8 +284,8 @@
             _fields_ = [("name", c_wchar * 12),
                         ("age", c_int)]
 
-        p = PersonW("Someone")
-        self.assertEqual(p.name, "Someone")
+        p = PersonW("Someone \xe9")
+        self.assertEqual(p.name, "Someone \xe9")
 
         self.assertEqual(PersonW("1234567890").name, "1234567890")
         self.assertEqual(PersonW("12345678901").name, "12345678901")
@@ -304,13 +304,13 @@
                         ("phone", Phone),
                         ("age", c_int)]
 
-        cls, msg = self.get_except(Person, "Someone", (1, 2))
+        cls, msg = self.get_except(Person, b"Someone", (1, 2))
         self.assertEqual(cls, RuntimeError)
         self.assertEqual(msg,
                              "(Phone) <class 'TypeError'>: "
                              "expected string, int found")
 
-        cls, msg = self.get_except(Person, "Someone", ("a", "b", "c"))
+        cls, msg = self.get_except(Person, b"Someone", (b"a", b"b", b"c"))
         self.assertEqual(cls, RuntimeError)
         if issubclass(Exception, object):
             self.assertEqual(msg,


More information about the Python-checkins mailing list