From f5af466d3a3f848b218462e463622ed8333be1f0 Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Wed, 11 Jul 2007 14:51:58 +0000 Subject: [PATCH] Fix one more ctypes test, and disable the tests that were segfaulting. Thanks to Christian Heimes for finding these tests. --- Lib/ctypes/test/test_functions.py | 18 +++---- Lib/ctypes/test/test_python_api.py | 34 ++++++------- Lib/ctypes/test/test_slicing.py | 76 +++++++++++++++--------------- 3 files changed, 67 insertions(+), 61 deletions(-) diff --git a/Lib/ctypes/test/test_functions.py b/Lib/ctypes/test/test_functions.py index 9e5a6f8c88c..0d0b56fd74c 100644 --- a/Lib/ctypes/test/test_functions.py +++ b/Lib/ctypes/test/test_functions.py @@ -160,15 +160,17 @@ class FunctionTestCase(unittest.TestCase): 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") + 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) + result = f(None) + self.failUnlessEqual(result, None) def test_pointers(self): f = dll._testfunc_p_p diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py index 265ee558d42..f267413dd6f 100644 --- a/Lib/ctypes/test/test_python_api.py +++ b/Lib/ctypes/test/test_python_api.py @@ -41,17 +41,17 @@ class PythonAPITestCase(unittest.TestCase): # 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) @@ -67,19 +67,21 @@ class PythonAPITestCase(unittest.TestCase): 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()") diff --git a/Lib/ctypes/test/test_slicing.py b/Lib/ctypes/test/test_slicing.py index 8e43a395199..3db82c3aece 100644 --- a/Lib/ctypes/test/test_slicing.py +++ b/Lib/ctypes/test/test_slicing.py @@ -34,45 +34,47 @@ class SlicesTestCase(unittest.TestCase): # ValueError: Can only assign sequence of same size self.assertRaises(ValueError, setslice, a, 0, 5, range(32)) - def test_char_ptr(self): - s = "abcdefghijklmnopqrstuvwxyz" + 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[: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: + 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):