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