]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
More simple test cases for mixed classic+new multiple inheritance.
authorTim Peters <tim.peters@gmail.com>
Wed, 14 Nov 2001 23:56:45 +0000 (23:56 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 14 Nov 2001 23:56:45 +0000 (23:56 +0000)
Lib/test/test_descr.py

index cf7ef2d64a55bdce2c473c5755e436bc67dfe73f..41c03a079da4c02468319b0a1ceabd507abb8bba 100644 (file)
@@ -830,6 +830,34 @@ def multi():
     vereq(int(Frag()), 42)
 
     # MI mixing classic and new-style classes.
+
+    class A:
+        x = 1
+
+    class B(A):
+        pass
+
+    class C(A):
+        x = 2
+
+    class D(B, C):
+        pass
+    vereq(D.x, 1)
+
+    # Classic MRO is preserved for a classic base class.
+    class E(D, object):
+        pass
+    vereq(E.__mro__, (E, D, B, A, C, object))
+    vereq(E.x, 1)
+
+    # But with a mix of classic bases, their MROs are combined using
+    # new-style MRO.
+    class F(B, C, object):
+        pass
+    vereq(F.__mro__, (F, B, C, A, object))
+    vereq(F.x, 2)
+
+    # Try something else.
     class C:
         def cmethod(self):
             return "C a"
@@ -875,6 +903,13 @@ def multi():
     # XXX Expected this (the commented-out result):
     # vereq(M3.__mro__, (M3, M1, M2, object, D, C))
     vereq(M3.__mro__, (M3, M1, M2, D, C, object))  # XXX ?
+    m = M3()
+    vereq(m.cmethod(), "C a")
+    vereq(m.dmethod(), "D a")
+    vereq(m.m1method(), "M1 a")
+    vereq(m.m2method(), "M2 a")
+    vereq(m.m3method(), "M3 a")
+    vereq(m.all_method(), "M3 b")
 
 def diamond():
     if verbose: print "Testing multiple inheritance special cases..."