1from PyObjCTools.TestSupport import * 2 3from Foundation import * 4 5class TestNSObjectHelper (NSObject): 6 def copyWithZone_(self, zn): return None 7 def mutableCopyWithZone_(self, zn): return None 8 def isContentDiscarded(self): return 1 9 def beginContentAccess(self): return 1 10 11class TestNSObjectFunctions (TestCase): 12 def testAllocation(self): 13 o = NSAllocateObject(NSObject, 0, None) 14 self.failUnless(isinstance(o, NSObject)) 15 16 o = NSAllocateObject(NSObject, 50, None) 17 self.failUnless(isinstance(o, NSObject)) 18 19 NSDeallocateObject(None) 20 21 def testCopy(self): 22 o = NSObject.alloc().init() 23 self.failUnless(isinstance(o, NSObject)) 24 o2 = NSCopyObject(o, 50, None) 25 self.failUnless(isinstance(o2, NSObject)) 26 27 def testShouldRetain(self): 28 o = NSObject.alloc().init() 29 self.failUnless(isinstance(o, NSObject)) 30 31 v = NSShouldRetainWithZone(o, None) 32 self.failUnless((v is True) or (v is False)) 33 34 def testRefCounts(self): 35 o = NSObject.alloc().init() 36 37 cnt = NSExtraRefCount(o) 38 self.failUnless(isinstance(cnt, (int, long))) 39 40 NSIncrementExtraRefCount(o) 41 v = NSExtraRefCount(o) 42 self.assertEquals(v, cnt+1) 43 44 v = NSDecrementExtraRefCountWasZero(o) 45 self.failUnless(v is False) 46 47 v = NSExtraRefCount(o) 48 self.assertEquals(v, cnt) 49 50 51 52 53 54 55class TestNSObjectInteraction(TestCase): 56 def testCallingInstanceMethodWithClassSelf(self): 57 self.assertRaises(TypeError, NSObject.description, NSObject) 58 self.assertRaises(TypeError, NSObject.description, "hello") 59 60 def testNSObjectClassMethod(self): 61 # Check that -class is accesible as 'class__' and 'class' (the latter 62 # only through getattr because it is a Python keyword) 63 self.assert_(hasattr(NSObject, 'class__')) 64 self.assert_(isinstance(NSObject.class__, objc.selector)) 65 o = NSObject.alloc().init() 66 self.assert_(o.class__() is o.__class__) 67 68 self.assert_(hasattr(NSObject, 'class')) 69 self.assert_(isinstance(getattr(NSObject, 'class'), objc.selector)) 70 self.assert_(getattr(o, 'class')() is o.__class__) 71 72 def testNSObjectClass(self): 73 self.assert_( NSObject.instancesRespondToSelector_( "description" ), "NSObject class claims it doesn't respond to a selector that it does." ) 74 self.assert_( hasattr(NSObject, "description"), "NSObject class claims it doesn't respond to a selector that it does." ) 75 # self.assert_( NSObject.description(), "NSObject class failed to respond to +description selector." ) 76 77 def testNSObjectInstance(self): 78 instance = NSObject.new() 79 80 self.assert_( instance, "Failed to instantiate an instance" ) 81 self.assert_( instance.description(), "NSObject instance didn't respond to -description selector." ) 82 self.assert_( not instance.isProxy(), "Instance of NSObject claimed it was a proxy. That seems odd." ) 83 self.assert_( isinstance( instance, NSObject ), "Instantiated object not an instance of NSObject." ) 84 self.assertEqual( instance, instance, "Python identity check failed." ) 85 self.assert_( instance.isEqual_( instance ), "Obj-C identity check failed." ) 86 87 def testRepeatedAllocInit(self): 88 for i in range(1,1000): 89 a = NSObject.alloc().init() 90 91 def testMethods(self): 92 self.failUnlessResultIsBOOL(NSObject.isEqual_) 93 self.failUnlessResultIsBOOL(NSObject.isProxy) 94 self.failUnlessResultIsBOOL(NSObject.isKindOfClass_) 95 self.failUnlessResultIsBOOL(NSObject.isMemberOfClass_) 96 self.failUnlessResultIsBOOL(NSObject.conformsToProtocol_) 97 self.failUnlessResultIsBOOL(NSObject.respondsToSelector_) 98 self.failUnlessResultIsBOOL(NSObject.instancesRespondToSelector_) 99 self.failUnlessResultIsBOOL(NSObject.isSubclassOfClass_) 100 self.failUnlessResultIsBOOL(NSObject.resolveClassMethod_) 101 self.failUnlessResultIsBOOL(NSObject.resolveInstanceMethod_) 102 103 o = NSObject.alloc().init() 104 self.failUnlessResultIsBOOL(o.isEqual_) 105 self.failUnlessResultIsBOOL(o.isProxy) 106 self.failUnlessResultIsBOOL(o.isKindOfClass_) 107 self.failUnlessResultIsBOOL(o.isMemberOfClass_) 108 self.failUnlessResultIsBOOL(o.conformsToProtocol_) 109 self.failUnlessResultIsBOOL(o.respondsToSelector_) 110 111 112 a = TestNSObjectHelper.alloc().init() 113 self.failUnlessArgHasType(a.copyWithZone_, 0, '^{_NSZone=}') 114 self.failUnlessArgHasType(a.mutableCopyWithZone_, 0, '^{_NSZone=}') 115 116 @min_os_level('10.6') 117 def testMethods10_6(self): 118 self.failUnlessResultIsBOOL(TestNSObjectHelper.beginContentAccess) 119 self.failUnlessResultIsBOOL(TestNSObjectHelper.isContentDiscarded) 120 121 122if __name__ == '__main__': 123 main( ) 124