#
# list_of_classes = implementations(Listenable)
#
-# This mechanism support inheritance of both interfaces and components:
+# This mechanism support inheritance of interfaces: a class implementing a given
+# interface is also considered to implement all the ascendants of this interface.
#
-# - all descendants of a class implementing a given interface are also considered
-# to implement this interface
-# - a class implementing a given interface is also considered to implement all
-# the ascendants of this interface
+# However, inheritance is not supported for components. The descendants of a class
+# implementing a given interface are not automatically considered to implement this
+# interface too.
__all__ = ['Component', 'implements', 'Interface', 'implementations', 'TimeSideError']
for i, cls in _implementations:
if (i == interface):
extend_unique(result, [cls])
- extend_unique(result, cls.__subclasses__())
subinterfaces = interface.__subclasses__()
if subinterfaces:
class I8(Interface):
pass
+class I9(I8):
+ pass
+
class C1(Component):
implements(I1)
class C8(Component):
implements(I8)
-class C9(C8):
- implements(I8)
+class C9(Component):
+ implements(I8, I9)
def list_equals(list1, list2):
if len(list1) != len(list2):
test("Test a component implementing two interfaces (2/2)", implementations(I3), [C2])
test("Test an interface implemented by two components", implementations(I4), [C3, C4])
test("Test whether a component implements an interface's parent", implementations(I5), [C5])
-test("Test whether a child component implements the interface implemented by its parent", implementations(I7), [C6, C7])
-test("Test implementation redundancy across descendants", implementations(I8), [C8, C9])
+test("Test that a component doesn't implement the interface implemented by its parent", implementations(I7), [C6])
+test("Test implementation redundancy across inheritance", implementations(I8), [C8, C9])