]> granicus.if.org Git - python/commitdiff
Fix one more ctypes test, and disable the tests that were segfaulting.
authorThomas Heller <theller@ctypes.org>
Wed, 11 Jul 2007 14:51:58 +0000 (14:51 +0000)
committerThomas Heller <theller@ctypes.org>
Wed, 11 Jul 2007 14:51:58 +0000 (14:51 +0000)
Thanks to Christian Heimes for finding these tests.

Lib/ctypes/test/test_functions.py
Lib/ctypes/test/test_python_api.py
Lib/ctypes/test/test_slicing.py

index 9e5a6f8c88c6677e52bb6ffe09b2eaf0de8d8006..0d0b56fd74cb1872c8df08196cd936536b997938 100644 (file)
@@ -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
index 265ee558d42e15f9eb2bc45fd3919f7649e43d10..f267413dd6f5cb2cf35fbf38c4c8d3abfc25e573 100644 (file)
@@ -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>)")
index 8e43a395199c23b79418b316692c4d2941c8e849..3db82c3aeceddf1bbfbe188957b77fc32ba17058 100644 (file)
@@ -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):