Thanks to Christian Heimes for finding these tests.
result = f(1, 2, 3, 4, 5.0, 6.0, 21)
self.failUnlessEqual(result, 42)
- def test_stringresult(self):
- f = dll._testfunc_p_p
- f.argtypes = None
- f.restype = c_char_p
- result = f("123")
- self.failUnlessEqual(result, "123")
-
- result = f(None)
- self.failUnlessEqual(result, None)
+ from ctypes.test import is_resource_enabled
+ if is_resource_enabled("struni-crash"):
+ def test_stringresult(self):
+ f = dll._testfunc_p_p
+ f.argtypes = None
+ f.restype = c_char_p
+ result = f("123")
+ self.failUnlessEqual(result, "123")
+
+ result = f(None)
+ self.failUnlessEqual(result, None)
def test_pointers(self):
f = dll._testfunc_p_p
# This test is unreliable, because it is possible that code in
# unittest changes the refcount of the '42' integer. So, it
# is disabled by default.
- def test_PyInt_Long(self):
+ def test_PyLong_Long(self):
ref42 = grc(42)
- pythonapi.PyInt_FromLong.restype = py_object
- self.failUnlessEqual(pythonapi.PyInt_FromLong(42), 42)
+ pythonapi.PyLong_FromLong.restype = py_object
+ self.failUnlessEqual(pythonapi.PyLong_FromLong(42), 42)
self.failUnlessEqual(grc(42), ref42)
- pythonapi.PyInt_AsLong.argtypes = (py_object,)
- pythonapi.PyInt_AsLong.restype = c_long
+ pythonapi.PyLong_AsLong.argtypes = (py_object,)
+ pythonapi.PyLong_AsLong.restype = c_long
- res = pythonapi.PyInt_AsLong(42)
+ res = pythonapi.PyLong_AsLong(42)
self.failUnlessEqual(grc(res), ref42 + 1)
del res
self.failUnlessEqual(grc(42), ref42)
del pyobj
self.failUnlessEqual(grc(s), ref)
- def test_PyOS_snprintf(self):
- PyOS_snprintf = pythonapi.PyOS_snprintf
- PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
+ from ctypes.test import is_resource_enabled
+ if is_resource_enabled("struni-crash"):
+ def test_PyOS_snprintf(self):
+ PyOS_snprintf = pythonapi.PyOS_snprintf
+ PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
- buf = c_buffer(256)
- PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
- self.failUnlessEqual(buf.value, "Hello from ctypes")
+ buf = c_buffer(256)
+ PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
+ self.failUnlessEqual(buf.value, "Hello from ctypes")
- PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes", 1, 2, 3)
- self.failUnlessEqual(buf.value, "Hello from ctypes")
+ PyOS_snprintf(buf, sizeof(buf), "Hello from %s (%d, %d, %d)", "ctypes", 1, 2, 3)
+ self.failUnlessEqual(buf.value, "Hello from ctypes")
- # not enough arguments
- self.failUnlessRaises(TypeError, PyOS_snprintf, buf)
+ # not enough arguments
+ self.failUnlessRaises(TypeError, PyOS_snprintf, buf)
def test_pyobject_repr(self):
self.failUnlessEqual(repr(py_object()), "py_object(<NULL>)")
# ValueError: Can only assign sequence of same size
self.assertRaises(ValueError, setslice, a, 0, 5, range(32))
- def test_char_ptr(self):
- s = "abcdefghijklmnopqrstuvwxyz"
-
- dll = CDLL(_ctypes_test.__file__)
- dll.my_strdup.restype = POINTER(c_char)
- dll.my_free.restype = None
- res = dll.my_strdup(s)
- self.failUnlessEqual(res[:len(s)], s)
-
- import operator
- self.assertRaises(TypeError, operator.setslice,
- res, 0, 5, "abcde")
- dll.my_free(res)
-
- dll.my_strdup.restype = POINTER(c_byte)
- res = dll.my_strdup(s)
- self.failUnlessEqual(res[:len(s)], list(range(ord("a"), ord("z")+1)))
- dll.my_free(res)
-
- def test_char_ptr_with_free(self):
- dll = CDLL(_ctypes_test.__file__)
- s = "abcdefghijklmnopqrstuvwxyz"
-
- class allocated_c_char_p(c_char_p):
- pass
-
- dll.my_free.restype = None
- def errcheck(result, func, args):
- retval = result.value
- dll.my_free(result)
- return retval
-
- dll.my_strdup.restype = allocated_c_char_p
- dll.my_strdup.errcheck = errcheck
- try:
+ from ctypes.test import is_resource_enabled
+ if is_resource_enabled("struni-crash"):
+ def test_char_ptr(self):
+ s = "abcdefghijklmnopqrstuvwxyz"
+
+ dll = CDLL(_ctypes_test.__file__)
+ dll.my_strdup.restype = POINTER(c_char)
+ dll.my_free.restype = None
res = dll.my_strdup(s)
- self.failUnlessEqual(res, s)
- finally:
- del dll.my_strdup.errcheck
+ self.failUnlessEqual(res[:len(s)], s)
+
+ import operator
+ self.assertRaises(TypeError, operator.setslice,
+ res, 0, 5, "abcde")
+ dll.my_free(res)
+
+ dll.my_strdup.restype = POINTER(c_byte)
+ res = dll.my_strdup(s)
+ self.failUnlessEqual(res[:len(s)], list(range(ord("a"), ord("z")+1)))
+ dll.my_free(res)
+
+ def test_char_ptr_with_free(self):
+ dll = CDLL(_ctypes_test.__file__)
+ s = "abcdefghijklmnopqrstuvwxyz"
+
+ class allocated_c_char_p(c_char_p):
+ pass
+
+ dll.my_free.restype = None
+ def errcheck(result, func, args):
+ retval = result.value
+ dll.my_free(result)
+ return retval
+
+ dll.my_strdup.restype = allocated_c_char_p
+ dll.my_strdup.errcheck = errcheck
+ try:
+ res = dll.my_strdup(s)
+ self.failUnlessEqual(res, s)
+ finally:
+ del dll.my_strdup.errcheck
def test_char_array(self):