1from PyObjCTools.TestSupport import * 2from Quartz import * 3 4class TestCVDisplayLink (TestCase): 5 def testTypes(self): 6 self.assertIsCFType(CVDisplayLinkRef) 7 8 def testFunctions(self): 9 self.assertIsInstance(CVDisplayLinkGetTypeID(), (int, long)) 10 11 mainID = CGMainDisplayID() 12 13 self.assertArgIsIn(CVDisplayLinkCreateWithCGDisplays, 0) 14 self.assertArgSizeInArg(CVDisplayLinkCreateWithCGDisplays, 0, 1) 15 self.assertArgIsOut(CVDisplayLinkCreateWithCGDisplays, 2) 16 self.assertArgIsCFRetained(CVDisplayLinkCreateWithCGDisplays, 2) 17 18 rv, link = CVDisplayLinkCreateWithCGDisplays([mainID], 1, None) 19 self.assertEqual(rv, 0) 20 self.assertIsInstance(link, CVDisplayLinkRef) 21 22 self.assertArgIsOut(CVDisplayLinkCreateWithOpenGLDisplayMask, 1) 23 self.assertArgIsCFRetained(CVDisplayLinkCreateWithOpenGLDisplayMask, 1) 24 rv, link2 = CVDisplayLinkCreateWithOpenGLDisplayMask(CGDisplayIDToOpenGLDisplayMask(mainID), None) 25 self.assertEqual(rv, 0) 26 self.assertIsInstance(link2, CVDisplayLinkRef) 27 28 self.assertArgIsOut(CVDisplayLinkCreateWithCGDisplay, 1) 29 self.assertArgIsCFRetained(CVDisplayLinkCreateWithCGDisplay, 1) 30 rv, link3 = CVDisplayLinkCreateWithCGDisplay(mainID, None) 31 self.assertEqual(rv, 0) 32 self.assertIsInstance(link3, CVDisplayLinkRef) 33 34 self.assertArgIsOut(CVDisplayLinkCreateWithActiveCGDisplays, 0) 35 self.assertArgIsCFRetained(CVDisplayLinkCreateWithActiveCGDisplays, 0) 36 rv, link4 = CVDisplayLinkCreateWithActiveCGDisplays(None) 37 self.assertEqual(rv, 0) 38 self.assertIsInstance(link4, CVDisplayLinkRef) 39 40 rv = CVDisplayLinkSetCurrentCGDisplay(link, mainID) 41 self.assertEqual(rv, 0) 42 43 # FIXME 44 CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext 45 46 v = CVDisplayLinkGetCurrentCGDisplay(link) 47 self.assertEqual(v, mainID) 48 49 self.assertArgIsFunction(CVDisplayLinkSetOutputCallback, 1, b'i@n^{_CVTimeStamp=IiqQdq{CVSMPTETime=ssIIIssss}QQ}N^{_CVTimeStamp=IiqQdq{CVSMPTETime=ssIIIssss}QQ}Qo^Q^v', True) 50 self.assertArgHasType(CVDisplayLinkSetOutputCallback, 2, b'^v') 51 52 @objc.callbackFor(CVDisplayLinkSetOutputCallback) 53 def callback(dl, now, time, flags, oflags, ctx): 54 pass 55 CVDisplayLinkSetOutputCallback(link2, callback, None) 56 57 rv = CVDisplayLinkStart(link4) 58 self.assertIsInstance(rv, (int, long)) 59 rv = CVDisplayLinkStop(link4) 60 self.assertIsInstance(rv, (int, long)) 61 62 self.assertResultHasType(CVDisplayLinkGetNominalOutputVideoRefreshPeriod, CVTime.__typestr__) 63 v = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link) 64 self.assertIsInstance(v, CVTime) 65 66 self.assertResultHasType(CVDisplayLinkGetOutputVideoLatency, CVTime.__typestr__) 67 v = CVDisplayLinkGetOutputVideoLatency(link) 68 self.assertIsInstance(v, CVTime) 69 70 self.assertResultHasType(CVDisplayLinkGetActualOutputVideoRefreshPeriod, objc._C_DBL) 71 v = CVDisplayLinkGetActualOutputVideoRefreshPeriod(link) 72 self.assertIsInstance(v, float) 73 74 self.assertResultIsBOOL(CVDisplayLinkIsRunning) 75 v = CVDisplayLinkIsRunning(link) 76 self.assertIsInstance(v, bool) 77 78 self.assertArgHasType(CVDisplayLinkGetCurrentTime, 1, b'o^' + CVTimeStamp.__typestr__) 79 rv, v = CVDisplayLinkGetCurrentTime(link, None) 80 self.assertIsInstance(rv, (int, long)) 81 self.assertIsInstance(v, CVTimeStamp) 82 ts = v 83 84 self.assertArgHasType(CVDisplayLinkTranslateTime, 1, b'n^' + CVTimeStamp.__typestr__) 85 self.assertArgHasType(CVDisplayLinkTranslateTime, 2, b'o^' + CVTimeStamp.__typestr__) 86 rv, v = CVDisplayLinkTranslateTime(link, ts, None) 87 self.assertIsInstance(rv, (int, long)) 88 self.assertIsInstance(v, CVTimeStamp) 89 90 v = CVDisplayLinkRetain(link) 91 self.assertTrue(v is link) 92 CVDisplayLinkRelease(v) 93 94 95if __name__ == "__main__": 96 main() 97