def test_objcmetaclass_caching(self): """ObjCMetaClass instances are cached.""" ExampleMeta1 = ObjCMetaClass("Example") ExampleMeta2 = ObjCMetaClass("Example") self.assertIs(ExampleMeta1, ExampleMeta2)
def test_objcmetaclass_requires_metaclass(self): """ObjCMetaClass only accepts metaclass pointers.""" random_obj = NSObject.alloc().init() with self.assertRaises(ValueError): ObjCMetaClass(random_obj.ptr) with self.assertRaises(ValueError): ObjCMetaClass(NSObject.ptr)
def test_objcclass_can_produce_objcmetaclass(self): """Creating an ObjCClass for a metaclass pointer gives an ObjCMetaclass.""" examplemeta_ptr = libobjc.objc_getMetaClass(b"Example") ExampleMeta = ObjCClass(examplemeta_ptr) self.assertEqual(ExampleMeta, ObjCMetaClass("Example")) self.assertIsInstance(ExampleMeta, ObjCMetaClass)
def test_metaclass_by_name(self): """An Objective-C metaclass can be looked up by name.""" Example = ObjCClass("Example") ExampleMeta = ObjCMetaClass("Example") self.assertEqual(ExampleMeta.name, "Example") self.assertEqual(ExampleMeta, Example.objc_class)
def test_metametaclass(self): """The class of a metaclass can be looked up.""" ExampleMeta = ObjCMetaClass("Example") ExampleMetaMeta = ExampleMeta.objc_class self.assertIsInstance(ExampleMetaMeta, ObjCMetaClass) self.assertEqual(ExampleMetaMeta, NSObject.objc_class)
def test_nonexistant_metaclass(self): """A NameError is raised if a metaclass doesn't exist.""" with self.assertRaises(NameError): ObjCMetaClass('DoesNotExist')
def test_metaclass_by_pointer(self): """An Objective-C metaclass can be created from a pointer.""" examplemeta_ptr = libobjc.objc_getMetaClass(b"Example") ExampleMeta = ObjCMetaClass(examplemeta_ptr) self.assertEqual(ExampleMeta, ObjCMetaClass("Example"))