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