1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4
5class TestCGDisplayConfiguration (TestCase):
6
7    def testTypes(self):
8        self.assertIsOpaquePointer(CGDisplayConfigRef)
9
10        err, config = CGBeginDisplayConfiguration(None)
11        self.assertEqual(err, 0)
12        self.assertIsInstance(config, CGDisplayConfigRef)
13
14        err = CGConfigureDisplayOrigin(config,
15                CGMainDisplayID(), 0, 0)
16        self.assertEqual(err, 0)
17
18        err = CGConfigureDisplayMode(config,
19                CGMainDisplayID(), CGDisplayAvailableModes(CGMainDisplayID())[0])
20        self.assertEqual(err, 0)
21
22        err = CGConfigureDisplayStereoOperation(config,
23                CGMainDisplayID(), False, False)
24        self.assertEqual(err, 0)
25
26        err = CGConfigureDisplayMirrorOfDisplay(config,
27                CGMainDisplayID(), CGMainDisplayID())
28        self.assertIsInstance(err, (int, long))
29
30        err = CGCancelDisplayConfiguration(config)
31        self.assertEqual(err, 0)
32        config = None
33
34        myInfo = object()
35        info = []
36        def reconfig(display, flags, userInfo):
37            self.assertIsInstance(display, (int, long))
38            self.assertIsInstance(flags, (int, long))
39            self.assertTrue(userInfo is myInfo)
40            info.append((display, flags, userInfo))
41
42        try:
43            err, config = CGBeginDisplayConfiguration(None)
44            self.assertEqual(err, 0)
45            self.assertIsInstance(config, CGDisplayConfigRef)
46
47            err = CGConfigureDisplayMode(config,
48                    CGMainDisplayID(), CGDisplayAvailableModes(CGMainDisplayID())[0])
49
50            err = CGDisplayRegisterReconfigurationCallback(reconfig, myInfo)
51            self.assertEqual(err, 0)
52
53            CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly)
54
55            self.assertTrue(len(info) > 0)
56
57        finally:
58            err = CGDisplayRemoveReconfigurationCallback(reconfig, myInfo)
59            self.assertEqual(err, 0)
60            l = len(info)
61
62            CGRestorePermanentDisplayConfiguration()
63
64            self.assertEqual(len(info), l)
65
66        err = CGDisplaySetStereoOperation(CGMainDisplayID(), False, False, kCGConfigureForAppOnly)
67        self.assertIsInstance(err, (int, long))
68
69        v = CGDisplayIsActive(CGMainDisplayID())
70        self.assertIsInstance(v, (int, long))
71
72        v = CGDisplayIsAsleep(CGMainDisplayID())
73        self.assertIsInstance(v, (int, long))
74
75        v = CGDisplayIsOnline(CGMainDisplayID())
76        self.assertIsInstance(v, (int, long))
77
78        v = CGDisplayIsMain(CGMainDisplayID())
79        self.assertIsInstance(v, (int, long))
80
81        v = CGDisplayIsBuiltin(CGMainDisplayID())
82        self.assertIsInstance(v, (int, long))
83
84        v = CGDisplayIsInMirrorSet(CGMainDisplayID())
85        self.assertIsInstance(v, (int, long))
86
87        v = CGDisplayIsAlwaysInMirrorSet(CGMainDisplayID())
88        self.assertIsInstance(v, (int, long))
89
90        v = CGDisplayIsInHWMirrorSet(CGMainDisplayID())
91        self.assertIsInstance(v, (int, long))
92
93        v = CGDisplayMirrorsDisplay(CGMainDisplayID())
94        self.assertIsInstance(v, (int, long))
95
96        v = CGDisplayIsStereo(CGMainDisplayID())
97        self.assertIsInstance(v, (int, long))
98
99        v = CGDisplayPrimaryDisplay(CGMainDisplayID())
100        self.assertIsInstance(v, (int, long))
101
102        v = CGDisplayUnitNumber(CGMainDisplayID())
103        self.assertIsInstance(v, (int, long))
104
105        v = CGDisplayVendorNumber(CGMainDisplayID())
106        self.assertIsInstance(v, (int, long))
107
108        v = CGDisplayModelNumber(CGMainDisplayID())
109        self.assertIsInstance(v, (int, long))
110
111        v = CGDisplaySerialNumber(CGMainDisplayID())
112        self.assertIsInstance(v, (int, long))
113
114        v = CGDisplayIOServicePort(CGMainDisplayID())
115        self.assertIsInstance(v, (int, long))
116
117        v = CGDisplayScreenSize(CGMainDisplayID())
118        self.assertIsInstance(v, CGSize)
119
120        v = CGDisplayRotation(CGMainDisplayID())
121        self.assertIsInstance(v, float)
122
123        v = CGDisplayCopyColorSpace(CGMainDisplayID())
124        self.assertIsInstance(v, CGColorSpaceRef)
125
126
127    def testContents(self):
128        self.assertEqual(kCGConfigureForAppOnly, 0)
129        self.assertEqual(kCGConfigureForSession, 1)
130        self.assertEqual(kCGConfigurePermanently, 2)
131
132        self.assertEqual(kCGDisplayBeginConfigurationFlag, (1 << 0))
133        self.assertEqual(kCGDisplayMovedFlag, (1 << 1))
134        self.assertEqual(kCGDisplaySetMainFlag, (1 << 2))
135        self.assertEqual(kCGDisplaySetModeFlag, (1 << 3))
136        self.assertEqual(kCGDisplayAddFlag, (1 << 4))
137        self.assertEqual(kCGDisplayRemoveFlag, (1 << 5))
138        self.assertEqual(kCGDisplayEnabledFlag, (1 << 8))
139        self.assertEqual(kCGDisplayDisabledFlag, (1 << 9))
140        self.assertEqual(kCGDisplayMirrorFlag, (1 << 10))
141        self.assertEqual(kCGDisplayUnMirrorFlag, (1 << 11))
142        self.assertEqual(kCGDisplayDesktopShapeChangedFlag, (1 << 12))
143
144    @min_os_level('10.6')
145    def testFunctions10_6(self):
146        self.assertResultHasType(CGConfigureDisplayWithDisplayMode, b'i')
147        self.assertArgHasType(CGConfigureDisplayWithDisplayMode, 0,
148                    b'^{_CGDisplayConfigRef=}')
149        self.assertArgHasType(CGConfigureDisplayWithDisplayMode, 1,
150                        b'I')
151        self.assertArgHasType(CGConfigureDisplayWithDisplayMode, 2,
152                            b'^{CGDisplayMode}')
153        self.assertArgHasType(CGConfigureDisplayWithDisplayMode, 3,
154                                b'^{__CFDictionary=}')
155
156
157if __name__ == "__main__":
158    main()
159