1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4
5try:
6    long
7except NameError:
8    long = int
9
10class TestCGEvent (TestCase):
11    def testTypes(self):
12        self.assertIsCFType(CGEventRef)
13        self.assertIsCFType(CGEventSourceRef)
14
15    def testEventFunctions(self):
16        evt = CGEventCreateMouseEvent(None, kCGEventLeftMouseDown, (80, 90), kCGMouseButtonLeft)
17        self.assertIsInstance(evt, CGEventRef)
18
19        self.assertResultIsCFRetained(CGEventCreateSourceFromEvent)
20        v = CGEventCreateSourceFromEvent(evt)
21        self.assertIsInstance(v, CGEventSourceRef)
22
23        src = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState)
24        self.assertIsInstance(src, CGEventSourceRef)
25
26        CGEventSetSource(evt, src)
27
28        t = CGEventGetType(evt)
29        self.assertIsInstance(t, (int, long))
30        self.assertEqual(t, kCGEventLeftMouseDown)
31
32        CGEventSetType(evt, kCGEventOtherMouseUp)
33        t = CGEventGetType(evt)
34        self.assertEqual(t, kCGEventOtherMouseUp)
35
36        v = CGEventGetTimestamp(evt)
37        self.assertIsInstance(v, (int, long))
38
39        CGEventSetTimestamp(evt, 99)
40        v = CGEventGetTimestamp(evt)
41        self.assertEqual(v, 99)
42
43        v = CGEventGetLocation(evt)
44        self.assertIsInstance(v, CGPoint)
45
46        CGEventSetLocation(evt, (99, 99))
47        v = CGEventGetLocation(evt)
48        self.assertEqual(v, (99, 99))
49
50        v = CGEventGetFlags(evt)
51        self.assertIsInstance(v, (int, long))
52
53        CGEventSetFlags(evt, 99)
54        v = CGEventGetFlags(evt)
55        self.assertEqual(v, 99)
56
57        v = CGEventGetIntegerValueField(evt, kCGMouseEventNumber)
58        self.assertIsInstance(v, (int, long))
59
60        CGEventSetIntegerValueField(evt, kCGMouseEventNumber, 99)
61        v = CGEventGetIntegerValueField(evt, kCGMouseEventNumber)
62        self.assertEqual(v, 99)
63
64        v = CGEventGetDoubleValueField(evt, kCGMouseEventPressure)
65        self.assertIsInstance(v, float)
66
67        CGEventSetDoubleValueField(evt, kCGMouseEventPressure, 42.5)
68
69        self.assertArgHasType(CGEventTapEnable, 0, b'^{__CFMachPort=}')
70        self.assertArgHasType(CGEventTapEnable, 1, objc._C_BOOL)
71
72        self.assertResultHasType(CGEventTapIsEnabled, objc._C_BOOL)
73        self.assertArgHasType(CGEventTapIsEnabled, 0, b'^{__CFMachPort=}')
74
75        self.assertArgHasType(CGEventTapPostEvent, 0, b'^{__CGEventTapProxy=}')
76        self.assertArgHasType(CGEventTapPostEvent, 1, b'^{__CGEvent=}')
77
78        self.assertResultHasType(CGGetEventTapList, objc._C_INT)
79        self.assertArgHasType(CGGetEventTapList, 0, objc._C_UINT)
80        self.assertArgHasType(CGGetEventTapList, 1, b'o^' + CGEventTapInformation.__typestr__)
81        self.assertArgSizeInArg(CGGetEventTapList, 1, (0, 2))
82        self.assertArgHasType(CGGetEventTapList, 2, b'o^' + objc._C_UINT)
83
84        self.assertResultHasType(CGEventPost, objc._C_VOID)
85        self.assertArgHasType(CGEventPost, 0, objc._C_UINT)
86        self.assertArgHasType(CGEventPost, 1, b'^{__CGEvent=}')
87
88        self.assertResultHasType(CGEventPostToPSN, objc._C_VOID)
89        self.assertArgHasType(CGEventPostToPSN, 0, b'n^{ProcessSerialNumber=II}')
90        self.assertArgHasType(CGEventPostToPSN, 1, b'^{__CGEvent=}')
91
92
93    @expectedFailure
94    def testMissing(self):
95        self.fail("CGEventTapCreateForPSN")
96
97
98    def testFunctions(self):
99        self.assertIsInstance(CGEventGetTypeID(), (int, long))
100
101        self.assertResultIsCFRetained(CGEventCreate)
102        evt = CGEventCreate(None)
103        self.assertIsInstance(evt, CGEventRef)
104
105        self.assertResultIsCFRetained(CGEventCreateData)
106        dta = CGEventCreateData(None, evt)
107        self.assertIsInstance(dta, CFDataRef)
108
109        self.assertResultIsCFRetained(CGEventCreateFromData)
110        v = CGEventCreateFromData(None, dta)
111        self.assertIsInstance(v, CGEventRef)
112
113        self.assertResultIsCFRetained(CGEventCreateMouseEvent)
114        evt = CGEventCreateMouseEvent(None, kCGEventOtherMouseDown, (0, 0), 2)
115        self.assertIsInstance(evt, CGEventRef)
116
117        self.assertResultIsCFRetained(CGEventCreateKeyboardEvent)
118        self.assertArgHasType(CGEventCreateKeyboardEvent, 2, objc._C_BOOL)
119        evt = CGEventCreateKeyboardEvent(None, 45, False)
120        self.assertIsInstance(evt, CGEventRef)
121
122
123        v = CGEventCreateCopy(evt)
124        self.assertIsInstance(v, CGEventRef)
125
126    @min_os_level('10.5')
127    def testFunctions10_5(self):
128        self.assertResultIsCFRetained(CGEventCreateScrollWheelEvent)
129        evt = CGEventCreateScrollWheelEvent(None, kCGScrollEventUnitPixel, 2, 99, 44)
130        self.assertIsInstance(evt, CGEventRef)
131        self.assertRaises(ValueError, CGEventCreateScrollWheelEvent, kCGScrollEventUnitPixel, 40, 2, 99)
132        self.assertRaises(ValueError, CGEventCreateScrollWheelEvent, kCGScrollEventUnitPixel, 40, 2, 99, 100, 101)
133
134        v = CGEventGetUnflippedLocation(evt)
135        self.assertIsInstance(v, CGPoint)
136
137if __name__ == "__main__":
138    main()
139