1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4
5class TestCGRemoteOperation (TestCase):
6    def testConstants(self):
7        self.assertEqual(CGEventNoErr, kCGErrorSuccess)
8
9        self.assertEqual(kCGScreenUpdateOperationRefresh, 0)
10        self.assertEqual(kCGScreenUpdateOperationMove, cast_int(1 << 0))
11        self.assertEqual(kCGScreenUpdateOperationReducedDirtyRectangleCount, cast_int(1 << 31))
12
13        self.assertEqual(kCGEventFilterMaskPermitLocalMouseEvents, 1)
14        self.assertEqual(kCGEventFilterMaskPermitLocalKeyboardEvents, 2)
15        self.assertEqual(kCGEventFilterMaskPermitSystemDefinedEvents, 4)
16        self.assertEqual(kCGEventFilterMaskPermitAllEvents, 7)
17
18        self.assertEqual(kCGEventSuppressionStateSuppressionInterval, 0)
19        self.assertEqual(kCGEventSuppressionStateRemoteMouseDrag, 1)
20        self.assertEqual(kCGNumberOfEventSuppressionStates, 2)
21
22        self.assertEqual(kCGMouseDownEventMaskingDeadSwitchTimeout, 60.0)
23
24        self.assertEqual(kCGEventSupressionStateSupressionInterval, kCGEventSuppressionStateSuppressionInterval)
25        self.assertEqual(kCGEventSupressionStateRemoteMouseDrag, kCGEventSuppressionStateRemoteMouseDrag)
26        self.assertEqual(kCGNumberOfEventSupressionStates, kCGNumberOfEventSuppressionStates)
27
28    def testStructs(self):
29        v = CGScreenUpdateMoveDelta()
30        self.assertTrue(hasattr(v, 'dX'))
31        self.assertTrue(hasattr(v, 'dY'))
32
33
34
35
36    def testFunctions(self):
37        myInfo = object()
38        callcount = [0]
39        def callbackRefresh(count, rects, info):
40            self.assertTrue(info is myInfo)
41            self.assertIsInstance(rects, tuple)
42            self.assertIsInstance(count, (int, long))
43            for i in rects:
44                self.assertIsInstance(i, CGRect)
45            callcount[0] += 1
46
47        err = CGRegisterScreenRefreshCallback(callbackRefresh, myInfo)
48        self.assertEqual(err, 0)
49
50        # FIXME: should force a refresh here
51
52        CGUnregisterScreenRefreshCallback(callbackRefresh, myInfo)
53
54        # FIXME: This complete hangs the interpreter, don't have
55        # time to investigate this.
56        #
57        #err, rects, count = CGWaitForScreenRefreshRects(None, None)
58        #self.assertEqual(err, 0)
59        #self.assertIsInstance(rects, tuple)
60        #self.assertIsInstance(count, (int, long))
61        #for i in rects:
62        #    self.assertIsInstance(i, CGRect)
63
64        v = CGCursorIsVisible()
65        self.assertIsInstance(v, (int, long))
66
67        v = CGCursorIsDrawnInFramebuffer()
68        self.assertIsInstance(v, (int, long))
69
70        v = CGPostMouseEvent((50, 50), True, 3, 0, 0, 0)
71        self.assertEqual(v, 0)
72
73        v = CGPostScrollWheelEvent(3, 0, 0, 0)
74        self.assertEqual(v, 0)
75
76        v = CGPostKeyboardEvent(0, 56, 1)
77        self.assertEqual(v, 0)
78
79        v = CGWarpMouseCursorPosition((800, 800))
80        self.assertEqual(v, 0)
81
82        v = CGInhibitLocalEvents(False)
83        self.assertEqual(v, 0)
84
85        v = CGSetLocalEventsSuppressionInterval(0.1)
86        self.assertEqual(v, 0)
87
88        v = CGEnableEventStateCombining(0)
89        self.assertEqual(v, 0)
90
91        v  = CGSetLocalEventsFilterDuringSuppressionState(kCGEventFilterMaskPermitAllEvents, kCGEventSuppressionStateSuppressionInterval)
92        self.assertEqual(v, 0)
93
94        v = CGAssociateMouseAndMouseCursorPosition(0)
95        self.assertEqual(v, 0)
96
97        v = CGWindowServerCFMachPort()
98        self.assertIsInstance(v, CFMachPortRef)
99
100        self.assertTrue(CGSetLocalEventsFilterDuringSupressionState is CGSetLocalEventsFilterDuringSuppressionState)
101
102
103    @expectedFailure
104    def testMissing(self):
105
106        self.fail("CGWaitForScreenUpdateRects")
107        self.fail("CGWaitForScreenRefreshRects")
108
109if __name__ == "__main__":
110    main()
111