1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3 4 5class TestNotificationCenter (TestCase): 6 7 def testTypes(self): 8 self.failUnlessIsCFType(CFNotificationCenterRef) 9 10 def testTypeID(self): 11 self.failUnless(isinstance(CFNotificationCenterGetTypeID(), (int, long))) 12 13 def testGetting(self): 14 ref = CFNotificationCenterGetLocalCenter(); 15 self.failUnless(isinstance(ref,CFNotificationCenterRef)) 16 17 ref = CFNotificationCenterGetDistributedCenter(); 18 self.failUnless(isinstance(ref,CFNotificationCenterRef)) 19 20 ref = CFNotificationCenterGetDarwinNotifyCenter(); 21 self.failUnless(isinstance(ref,CFNotificationCenterRef)) 22 23 def testSending(self): 24 ref = CFNotificationCenterGetLocalCenter(); 25 self.failUnless(isinstance(ref,CFNotificationCenterRef)) 26 27 notifications = [] 28 @objc.callbackFor(CFNotificationCenterAddObserver) 29 def observe(center, observer, name, object, userInfo): 30 notifications.append(( center, observer, name, object, userInfo )) 31 32 self.failUnlessArgHasType(CFNotificationCenterAddObserver, 1, '@') 33 self.failUnlessArgIsFunction(CFNotificationCenterAddObserver, 2, 'v@@@@@', True) 34 self.failUnlessArgHasType(CFNotificationCenterAddObserver, 4, '@') 35 36 CFNotificationCenterAddObserver(ref, u"object", observe, u"pyobjc.test", ref, CFNotificationSuspensionBehaviorDeliverImmediately) 37 38 CFNotificationCenterPostNotificationWithOptions(ref, u"pyobjc.test", ref, {u"name":u"value"}, kCFNotificationPostToAllSessions) 39 self.failUnless(len(notifications) == 1) 40 info = notifications[-1] 41 self.failUnless(info[0] is ref) 42 self.failUnless(info[1] == u"object") 43 self.failUnless(info[2] == u"pyobjc.test") 44 self.failUnless(info[3] is ref) 45 self.failUnless(info[4] == {u"name":u"value"}) 46 47 CFNotificationCenterPostNotification(ref, u"pyobjc.test", ref, {u"name2":u"value2"}, True) 48 self.failUnless(len(notifications) == 2) 49 info = notifications[-1] 50 self.failUnless(info[0] is ref) 51 self.failUnless(info[1] == u"object") 52 self.failUnless(info[2] == u"pyobjc.test") 53 self.failUnless(info[3] is ref) 54 self.failUnless(info[4] == {u"name2":u"value2"}) 55 56 self.failUnlessArgHasType(CFNotificationCenterRemoveObserver, 1, '@') 57 self.failUnlessArgHasType(CFNotificationCenterRemoveObserver, 3, '@') 58 CFNotificationCenterRemoveObserver(ref, u"object", u"pyobjc.test", ref) 59 60 self.failUnlessArgHasType(CFNotificationCenterPostNotificationWithOptions, 2, '@') 61 CFNotificationCenterPostNotificationWithOptions(ref, u"pyobjc.test", ref, {u"name":u"value"}, kCFNotificationPostToAllSessions) 62 self.failUnless(len(notifications) == 2) 63 64 CFNotificationCenterAddObserver(ref, u"object", observe, u"pyobjc.test", ref, CFNotificationSuspensionBehaviorDeliverImmediately) 65 66 self.failUnlessArgHasType(CFNotificationCenterPostNotification, 2, '@') 67 self.failUnlessArgIsBOOL(CFNotificationCenterPostNotification, 4) 68 CFNotificationCenterPostNotification(ref, u"pyobjc.test", ref, {u"name2":u"value2"}, True) 69 self.failUnless(len(notifications) == 3) 70 71 CFNotificationCenterRemoveEveryObserver(ref, u"object") 72 CFNotificationCenterPostNotification(ref, u"pyobjc.test", ref, {u"name2":u"value2"}, True) 73 self.failUnless(len(notifications) == 3) 74 75 76 def testConstants(self): 77 self.failUnlessEqual(CFNotificationSuspensionBehaviorDrop, 1) 78 self.failUnlessEqual(CFNotificationSuspensionBehaviorCoalesce, 2) 79 self.failUnlessEqual(CFNotificationSuspensionBehaviorHold, 3) 80 self.failUnlessEqual(CFNotificationSuspensionBehaviorDeliverImmediately, 4) 81 self.failUnlessEqual(kCFNotificationDeliverImmediately, 1) 82 self.failUnlessEqual(kCFNotificationPostToAllSessions, 2) 83 84 85if __name__ == "__main__": 86 main() 87