def testCopy(self): class MyCopyClass (NSObject): def copyWithZone_(self, zone): # NSObject doesn't implement the copying protocol #o = super(MyCopyClass, self).copyWithZone_(zone) o = self.__class__.alloc().init() o.foobar = 2 return o copyWithZone_ = objc.selector( copyWithZone_, signature=NSObject.copyWithZone_.signature, isClassMethod=0) # Make sure the runtime correctly marked our copyWithZone_ # implementation. o = MyCopyClass.alloc().init() self.assertFalse((o.copyWithZone_.__metadata__()['classmethod'])) self.assertTrue(o.copyWithZone_.__metadata__()['retval']['already_retained']) #self.assertTrue(o.copyWithZone_.callable == MyCopyClass.__dict__['copyWithZone_'].callable) o = MyCopyClass.alloc().init() o.foobar = 1 self.assertEqual(o.foobar, 1) # Make a copy from ObjC (see testbundle.m) c = PyObjC_TestClass3.copyValue_(o) self.assertIsInstance(c, MyCopyClass) self.assertEqual(c.foobar, 2)