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