1import objc 2from PyObjCTools.TestSupport import * 3 4NSObject = objc.lookUpClass('NSObject') 5 6 7class TestBasicIMP (TestCase): 8 # Test the basic functionality of IMP's. Imp's are basically unbound 9 # selectors if you look at the interface. The implementation refers to 10 # the actual functions that implements the method for calling the IMP 11 # instead of passing through the usual message sending machinery. 12 # 13 def testIMPType(self): 14 self.assert_(hasattr(objc, "IMP")) 15 16 def testAlloc(self): 17 cls = NSObject 18 m = cls.pyobjc_classMethods.methodForSelector_("alloc") 19 self.assert_(isinstance(m, objc.IMP)) 20 self.assert_(m.__metadata__()['classmethod']) 21 self.assertEquals(m.__metadata__()['retval']['already_retained'], cls.alloc.__metadata__()['retval']['already_retained']) 22 self.assertEquals(m.selector, 'alloc') 23 24 o = m(cls).init() 25 self.assert_(isinstance(o, cls)) 26 27 def testInit1(self): 28 cls = NSObject 29 m = cls.instanceMethodForSelector_("init") 30 self.assert_(isinstance(m, objc.IMP)) 31 self.assert_(not m.__metadata__()['classmethod']) 32 self.assertEquals(m.__metadata__()['retval']['already_retained'], cls.init.__metadata__()['retval']['already_retained']) 33 self.assertEquals(m.selector, 'init') 34 35 o = m(cls.alloc()) 36 self.assert_(isinstance(o, cls)) 37 38 def testInit2(self): 39 cls = NSObject 40 o = cls.alloc().init() 41 42 m = o.methodForSelector_("init") 43 self.assert_(isinstance(m, objc.IMP)) 44 self.assert_(not m.__metadata__()['classmethod']) 45 self.assertEquals(m.__metadata__()['retval']['already_retained'], cls.init.__metadata__()['retval']['already_retained']) 46 self.assertEquals(m.selector, 'init') 47 48 o = m(cls.alloc()) 49 self.assert_(isinstance(o, cls)) 50 51 def testDescription(self): 52 o = NSObject.alloc().init() 53 54 self.assertEquals(o.description(), o.methodForSelector_('description')(o)) 55 56 57 58 59if __name__ == "__main__": 60 main() 61