diff options
author | Thomas Heller <theller@ctypes.org> | 2006-03-08 19:56:54 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2006-03-08 19:56:54 (GMT) |
commit | babddfca758abe34ff12023f63b18d745fae7ca9 (patch) | |
tree | bf9ebf3ed58a4a0e3be11eba5f43f5c5521b4ec4 /Lib/ctypes/test/test_win32.py | |
parent | cf567c1b9c347e5a5e5833fecb7d10ecc675a83b (diff) | |
download | cpython-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.py | 64 |
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() |