1from PyObjCTools.TestSupport import * 2import objc 3import sys 4 5NSObject = objc.lookUpClass('NSObject') 6#_NSZombie = objc.lookUpClass('_NSZombie') 7NSProxy = objc.lookUpClass('NSProxy') 8 9 10 11class MethodAccessTest (TestCase): 12 13 def testObjCObject(self): 14 # Trying to access the methods of objc.objc_object should not 15 # crash the interpreter. 16 self.assertRaises(AttributeError, getattr, objc.objc_object.pyobjc_classMethods, 'func_code') 17 self.assertRaises(AttributeError, getattr, objc.objc_object.pyobjc_instanceMethods, 'func_code') 18 19 def testNSProxyStuff(self): 20 # NSProxy is incompatitble with pyobjc_{class,instance}Methods, but 21 # this should not crash the interpreter 22 self.assertRaises(AttributeError, getattr, NSProxy.pyobjc_instanceMethods, 'foobar') 23 self.assertRaises(AttributeError, getattr, NSProxy.pyobjc_classMethods, 'foobar') 24 self.assertRaises(AttributeError, getattr, NSProxy, 'foobar') 25# 26# if sys.platform == 'darwin': 27# def testNSZombie(self): 28# self.assertRaises(AttributeError, getattr, _NSZombie.pyobjc_instanceMethods, "foobar") 29# self.assertRaises(AttributeError, getattr, _NSZombie.pyobjc_classMethods, "foobar") 30# self.assertRaises(AttributeError, getattr, _NSZombie, "foobar") 31# 32 33 def testDir(self): 34 o = NSObject.new() 35 36 d = dir(o.pyobjc_instanceMethods) 37 self.assert_(len(d) > 10) 38 self.assert_("init" in d) 39 40 #d = dir(o.pyobjc_classMethods) 41 #self.assert_(len(d) > 10) 42 #self.assert_("alloc" in d) 43 44 d = dir(NSObject.pyobjc_classMethods) 45 self.assert_(len(d) > 10) 46 self.assert_("alloc" in d) 47 48 def testDict(self): 49 o = NSObject.new() 50 51 d = o.pyobjc_instanceMethods.__dict__.keys() 52 self.assert_(len(d) > 10) 53 self.assert_("init" in d) 54 55 d = NSObject.pyobjc_classMethods.__dict__.keys() 56 self.assert_(len(d) > 10) 57 self.assert_("alloc" in d) 58 59 #d = o.pyobjc_classMethods.__dict__.keys() 60 #self.assert_(len(d) > 10) 61 #self.assert_("alloc" in d) 62 63 def testAttributes(self): 64 o = NSObject.new() 65 66 self.assert_(hasattr(o.pyobjc_instanceMethods, "init")) 67 #self.assert_(hasattr(o.pyobjc_classMethods, "alloc")) 68 69 self.assert_(hasattr(NSObject.pyobjc_classMethods, "alloc")) 70 71class ClassAndInstanceMethods(TestCase): 72 def testClassThroughInstance(self): 73 # Class methods are not accessible through instances. 74 self.assertRaises(AttributeError, getattr, NSObject.new(), 'alloc') 75 76if __name__ == "__main__": 77 main() 78