]> granicus.if.org Git - python/commitdiff
Add tests for problems reported in issue 8959.
authorThomas Heller <theller@ctypes.org>
Mon, 21 Jun 2010 15:01:18 +0000 (15:01 +0000)
committerThomas Heller <theller@ctypes.org>
Mon, 21 Jun 2010 15:01:18 +0000 (15:01 +0000)
Lib/ctypes/test/test_callbacks.py

index 513a2a035d9c0ac6e2889235c577ddabf8b09398..8e070a51047d95d660919e49b172d6622f628565 100644 (file)
@@ -172,6 +172,41 @@ class SampleCallbacksTestCase(unittest.TestCase):
 
         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
 
+    def test_issue_8959_a(self):
+        from ctypes.util import find_library
+        libc_path = find_library("c")
+        if not libc_path:
+            return # cannot test
+        libc = CDLL(libc_path)
+
+        @CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
+        def cmp_func(a, b):
+            return a[0] - b[0]
+
+        array = (c_int * 5)(5, 1, 99, 7, 33)
+
+        libc.qsort(array, len(array), sizeof(c_int), cmp_func)
+        self.assertEqual(array[:], [1, 5, 7, 33, 99])
+
+    try:
+        WINFUNCTYPE
+    except NameError:
+        pass
+    else:
+        def test_issue_8959_b(self):
+            from ctypes.wintypes import BOOL, HWND, LPARAM
+            global windowCount
+            windowCount = 0
+
+            @WINFUNCTYPE(BOOL, HWND, LPARAM)
+            def EnumWindowsCallbackFunc(hwnd, lParam):
+                global windowCount
+                windowCount += 1
+                return True #Allow windows to keep enumerating
+
+            windll.user32.EnumWindows(EnumWindowsCallbackFunc, 0)
+            self.assertFalse(windowCount == 0)
+
 ################################################################
 
 if __name__ == '__main__':