File: test_win32.py

package info (click to toggle)
jython 2.5.1-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 41,624 kB
  • ctags: 101,579
  • sloc: python: 351,444; java: 204,338; xml: 1,316; sh: 330; ansic: 126; perl: 114; makefile: 94
file content (73 lines) | stat: -rw-r--r-- 2,463 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Windows specific tests

from ctypes import *
from ctypes.test import is_resource_enabled
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)

        if is_resource_enabled("SEH"):
            def test_SEH(self):
                # Call functions with invalid arguments, and make sure that access violations
                # are trapped and raise an exception.
                self.assertRaises(WindowsError, windll.kernel32.GetModuleHandleA, 32)

    class TestWintypes(unittest.TestCase):

        def test_COMError(self):
            from _ctypes import COMError
            self.assertEqual(COMError.__doc__, "Raised when a COM method call failed.")

            ex = COMError(-1, "text", ("details",))
            self.assertEqual(ex.hresult, -1)
            self.assertEqual(ex.text, "text")
            self.assertEqual(ex.details, ("details",))
            self.assertEqual((ex.hresult, ex.text, ex.details),
                             ex[:])

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(_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()