summaryrefslogtreecommitdiffstats
path: root/Lib/ctypes/test/test_win32.py
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2006-03-08 19:56:54 (GMT)
committerThomas Heller <theller@ctypes.org>2006-03-08 19:56:54 (GMT)
commitbabddfca758abe34ff12023f63b18d745fae7ca9 (patch)
treebf9ebf3ed58a4a0e3be11eba5f43f5c5521b4ec4 /Lib/ctypes/test/test_win32.py
parentcf567c1b9c347e5a5e5833fecb7d10ecc675a83b (diff)
downloadcpython-babddfca758abe34ff12023f63b18d745fae7ca9.zip
cpython-babddfca758abe34ff12023f63b18d745fae7ca9.tar.gz
cpython-babddfca758abe34ff12023f63b18d745fae7ca9.tar.bz2
Copy ctypes-0.9.9.4 Python modules from external into the trunk.
Diffstat (limited to 'Lib/ctypes/test/test_win32.py')
-rw-r--r--Lib/ctypes/test/test_win32.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/Lib/ctypes/test/test_win32.py b/Lib/ctypes/test/test_win32.py
new file mode 100644
index 0000000..767e64e
--- /dev/null
+++ b/Lib/ctypes/test/test_win32.py
@@ -0,0 +1,64 @@
+# Windows specific tests
+
+from ctypes import *
+import unittest, sys
+
+import _ctypes_test
+
+if sys.platform == "win32":
+
+ class WindowsTestCase(unittest.TestCase):
+ def test_callconv_1(self):
+ # Testing stdcall function
+
+ IsWindow = windll.user32.IsWindow
+ # ValueError: Procedure probably called with not enough arguments (4 bytes missing)
+ self.assertRaises(ValueError, IsWindow)
+
+ # This one should succeeed...
+ self.failUnlessEqual(0, IsWindow(0))
+
+ # ValueError: Procedure probably called with too many arguments (8 bytes in excess)
+ self.assertRaises(ValueError, IsWindow, 0, 0, 0)
+
+ def test_callconv_2(self):
+ # Calling stdcall function as cdecl
+
+ IsWindow = cdll.user32.IsWindow
+
+ # ValueError: Procedure called with not enough arguments (4 bytes missing)
+ # or wrong calling convention
+ self.assertRaises(ValueError, IsWindow, None)
+
+ def test_SEH(self):
+ # Call functions with invalid arguments, and make sure that access violations
+ # are trapped and raise an exception.
+ #
+ # Normally, in a debug build of the _ctypes extension
+ # module, exceptions are not trapped, so we can only run
+ # this test in a release build.
+ import sys
+ if not hasattr(sys, "getobjects"):
+ self.assertRaises(WindowsError, windll.kernel32.GetModuleHandleA, 32)
+
+class Structures(unittest.TestCase):
+
+ def test_struct_by_value(self):
+ class POINT(Structure):
+ _fields_ = [("x", c_long),
+ ("y", c_long)]
+
+ class RECT(Structure):
+ _fields_ = [("left", c_long),
+ ("top", c_long),
+ ("right", c_long),
+ ("bottom", c_long)]
+
+ dll = cdll.load(_ctypes_test.__file__)
+
+ pt = POINT(10, 10)
+ rect = RECT(0, 0, 20, 20)
+ self.failUnlessEqual(1, dll.PointInRect(byref(rect), pt))
+
+if __name__ == '__main__':
+ unittest.main()