diff options
author | Thomas Heller <theller@ctypes.org> | 2007-07-11 14:51:58 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2007-07-11 14:51:58 (GMT) |
commit | f5af466d3a3f848b218462e463622ed8333be1f0 (patch) | |
tree | 23daf0531e09a7ba349f310045eec00ff1074da7 | |
parent | c92159aaea3263ef99ff290c28ba5d71cb89ed9a (diff) | |
download | cpython-f5af466d3a3f848b218462e463622ed8333be1f0.zip cpython-f5af466d3a3f848b218462e463622ed8333be1f0.tar.gz cpython-f5af466d3a3f848b218462e463622ed8333be1f0.tar.bz2 |
Fix one more ctypes test, and disable the tests that were segfaulting.
Thanks to Christian Heimes for finding these tests.
-rw-r--r-- | Lib/ctypes/test/test_functions.py | 20 | ||||
-rw-r--r-- | Lib/ctypes/test/test_python_api.py | 34 | ||||
-rw-r--r-- | Lib/ctypes/test/test_slicing.py | 78 |
3 files changed, 69 insertions, 63 deletions
diff --git a/Lib/ctypes/test/test_functions.py b/Lib/ctypes/test/test_functions.py index 9e5a6f8..0d0b56f 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") - - 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 diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py index 265ee55..f267413 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(<NULL>)") diff --git a/Lib/ctypes/test/test_slicing.py b/Lib/ctypes/test/test_slicing.py index 8e43a39..3db82c3 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" - - 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): |