def type_checks_work(self): class Foo(object): __metaclass__ = ABCMeta class Bar(object): pass Foo.register(Bar) Assert.issubclass(Bar, Foo) Assert.isinstance(Bar(), Foo)
def test_abstract_class_meta(): class Foo(object): __metaclass__ = ABCMeta class Bar(object): __metaclass__ = AbstractClassMeta virtual_superclasses = [Foo] class Baz(object): __metaclass__ = VirtualSubclassMeta virtual_superclasses = [Bar] Assert.issubclass(Baz, Foo) Assert.issubclass(Baz, Bar)
def issubclass(): """Assert.issubclass""" with Assert.raises(AssertionError) as error: Assert.issubclass(str, (int, float)) error.__str__() == "not issubclass(str, (int, float))" with Assert.raises(AssertionError) as error: Assert.issubclass(str, int) error.__str__() == "not issubclass(str, int)" Assert.issubclass(str, str)
def test_virtual_subclass_meta(): from abc import ABCMeta class Foo(object): __metaclass__ = ABCMeta class Bar(object): __metaclass__ = ABCMeta class Simple(object): __metaclass__ = VirtualSubclassMeta virtual_superclasses = [Foo, Bar] class InheritingSimple(Simple): pass for a, b in product([Simple, InheritingSimple], [Foo, Bar]): Assert.issubclass(a, b) Assert.isinstance(a(), b) Assert.issubclass(InheritingSimple, Simple) Assert.isinstance(InheritingSimple(), Simple) class Spam(object): __metaclass__ = ABCMeta class Eggs(object): __metaclass__ = ABCMeta class SimpleMonty(object): __metaclass__ = VirtualSubclassMeta virtual_superclasses = [Spam, Eggs] class MultiInheritance(Simple, SimpleMonty): pass class MultiVirtualInheritance(object): __metaclass__ = VirtualSubclassMeta virtual_superclasses = [Simple, SimpleMonty] for virtual_super_cls in [Foo, Bar, Simple, Spam, Eggs, SimpleMonty]: Assert.issubclass(MultiInheritance, virtual_super_cls) Assert.isinstance(MultiInheritance(), virtual_super_cls)