from PyObjCTools.TestSupport import *
import objc
from PyObjCTest.testclassandinst import PyObjC_TestClassAndInstance,PyObjC_TestUnallocatable
class PyObjC_TestClassAndInstanceSubclass(PyObjC_TestClassAndInstance):
"""Simple subclass, just make sure it still works"""
pass
# XXX: Huh? The next two classes have the same definition?
class PyObjC_TestClassAndInstanceClassOverride(PyObjC_TestClassAndInstance):
"""return YES for both"""
def isInstance(klass):
return objc.YES
isInstance = classmethod(isInstance)
class PyObjC_TestClassAndInstanceInstanceOverride(PyObjC_TestClassAndInstance):
"""return NO for both"""
def isInstance(self):
return objc.NO
# class PyObjC_TestClassAndInstanceBothOverride(PyObjC_TestClassAndInstance):
# """flipped"""
# def isInstance__class__(self):
# return objc.YES
#
# def isInstance__inst__(self):
# return objc.NO
class TestClassAndInstance(TestCase):
def testClassAndInstanceInstanceOverrideWorkaround(self):
self.assertFalse(PyObjC_TestClassAndInstanceInstanceOverride.pyobjc_classMethods.isInstance())
self.assertFalse(PyObjC_TestClassAndInstanceInstanceOverride.alloc().init().pyobjc_instanceMethods.isInstance())
def testClassAndInstanceClassOverrideWorkaround(self):
self.assertTrue(PyObjC_TestClassAndInstanceClassOverride.pyobjc_classMethods.isInstance())
def testClassAndInstanceSubclassWorkaround(self):
self.assertFalse(PyObjC_TestClassAndInstanceSubclass.pyobjc_classMethods.isInstance())
self.assertTrue(PyObjC_TestClassAndInstanceSubclass.alloc().init().pyobjc_instanceMethods.isInstance())
def testClassAndInstanceWorkaround(self):
if PyObjC_TestClassAndInstance.pyobjc_classMethods.isInstance():
self.fail()
self.assertFalse(PyObjC_TestClassAndInstance.pyobjc_classMethods.isInstance())
self.assertTrue(PyObjC_TestClassAndInstance.alloc().init().pyobjc_instanceMethods.isInstance())
def testClassAndInstanceClassOverride(self):
self.assertTrue(PyObjC_TestClassAndInstanceClassOverride.isInstance())
self.assertTrue(PyObjC_TestClassAndInstanceClassOverride.alloc().init().isInstance())
def testClassAndInstanceInstanceOverride(self):
# Having the next line true would be nice:
#self.assertFalse(PyObjC_TestClassAndInstanceInstanceOverride.isInstance())
# But we'll have to settle for this one instead:
self.assertFalse(PyObjC_TestClassAndInstanceInstanceOverride.pyobjc_classMethods.isInstance())
self.assertFalse(PyObjC_TestClassAndInstanceInstanceOverride.alloc().init().isInstance())
def testClassAndInstanceSubclass(self):
# Having the next line true would be nice:
#self.assertFalse(PyObjC_TestClassAndInstanceSubclass.isInstance())
# But we'll have to settle for this one instead:
self.assertFalse(PyObjC_TestClassAndInstanceSubclass.pyobjc_classMethods.isInstance())
self.assertTrue(PyObjC_TestClassAndInstanceSubclass.alloc().init().isInstance())
def testClassAndInstance(self):
# Having the next line true would be nice:
#self.assertEquals(PyObjC_TestClassAndInstance.isInstance(), objc.NO)
# But we'll have to settle for this one instead:
self.assertFalse(PyObjC_TestClassAndInstance.pyobjc_classMethods.isInstance())
self.assertTrue(PyObjC_TestClassAndInstance.alloc().init().isInstance())
# @min_os_level('10.5')
# def testUnallocatable(self):
# # FIXME: This crashes on Tiger, haven't had time to debug yet
# self.assertEquals(PyObjC_TestUnallocatable.alloc(), None)
if __name__ == '__main__':
main()
|