[Python-checkins] python/dist/src/Lib/test test_descr.py,1.158,1.159
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Thu, 14 Nov 2002 11:50:16 -0800
Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv30637
Modified Files:
test_descr.py
Log Message:
Fix or disable some tests that were affected by the new C3 MRO
algorithm, and add some new tests for the C3 algorithm.
Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.158
retrieving revision 1.159
diff -C2 -d -r1.158 -r1.159
*** test_descr.py 18 Oct 2002 16:33:13 -0000 1.158
--- test_descr.py 14 Nov 2002 19:50:14 -0000 1.159
***************
*** 933,937 ****
return "D b"
! class M2(object, D):
def m2method(self):
return "M2 a"
--- 933,937 ----
return "D b"
! class M2(D, object):
def m2method(self):
return "M2 a"
***************
*** 939,943 ****
return "M2 b"
! vereq(M2.__mro__, (M2, object, D, C))
m = M2()
vereq(m.cmethod(), "C a")
--- 939,943 ----
return "M2 b"
! vereq(M2.__mro__, (M2, D, C, object))
m = M2()
vereq(m.cmethod(), "C a")
***************
*** 946,957 ****
vereq(m.all_method(), "M2 b")
! class M3(M1, object, M2):
def m3method(self):
return "M3 a"
def all_method(self):
return "M3 b"
! # 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")
--- 946,955 ----
vereq(m.all_method(), "M2 b")
! class M3(M1, M2, object):
def m3method(self):
return "M3 a"
def all_method(self):
return "M3 b"
! vereq(M3.__mro__, (M3, M1, M2, D, C, object))
m = M3()
vereq(m.cmethod(), "C a")
***************
*** 994,1005 ****
vereq(E().boo(), "C")
vereq(E.__mro__, (E, C, B, A, object))
! class F(D, E): pass
! vereq(F().spam(), "B")
! vereq(F().boo(), "B")
! vereq(F.__mro__, (F, D, E, B, C, A, object))
! class G(E, D): pass
! vereq(G().spam(), "B")
! vereq(G().boo(), "C")
! vereq(G.__mro__, (G, E, D, C, B, A, object))
def objects():
--- 992,1058 ----
vereq(E().boo(), "C")
vereq(E.__mro__, (E, C, B, A, object))
! # MRO order disagreement
! try:
! class F(D, E): pass
! except TypeError:
! pass
! else:
! raise TestFailed, "expected MRO order disagreement (F)"
! try:
! class G(E, D): pass
! except TypeError:
! pass
! else:
! raise TestFailed, "expected MRO order disagreement (G)"
!
!
! # see thread python-dev/2002-October/029035.html
! def ex5():
! if verbose: print "Testing ex5 from C3 switch discussion..."
! class A(object): pass
! class B(object): pass
! class C(object): pass
! class X(A): pass
! class Y(A): pass
! class Z(X,B,Y,C): pass
! vereq(Z.__mro__, (Z, X, B, Y, A, C, object))
!
! # see "A Monotonic Superclass Linearization for Dylan",
! # by Kim Barrett et al. (OOPSLA 1996)
! def monotonicity():
! if verbose: print "Testing MRO monotonicity..."
! class Boat(object): pass
! class DayBoat(Boat): pass
! class WheelBoat(Boat): pass
! class EngineLess(DayBoat): pass
! class SmallMultihull(DayBoat): pass
! class PedalWheelBoat(EngineLess,WheelBoat): pass
! class SmallCatamaran(SmallMultihull): pass
! class Pedalo(PedalWheelBoat,SmallCatamaran): pass
!
! vereq(PedalWheelBoat.__mro__,
! (PedalWheelBoat, EngineLess, DayBoat, WheelBoat, Boat,
! object))
! vereq(SmallCatamaran.__mro__,
! (SmallCatamaran, SmallMultihull, DayBoat, Boat, object))
!
! vereq(Pedalo.__mro__,
! (Pedalo, PedalWheelBoat, EngineLess, SmallCatamaran,
! SmallMultihull, DayBoat, WheelBoat, Boat, object))
!
! # see "A Monotonic Superclass Linearization for Dylan",
! # by Kim Barrett et al. (OOPSLA 1996)
! def consistency_with_epg():
! if verbose: print "Testing consistentcy with EPG..."
! class Pane(object): pass
! class ScrollingMixin(object): pass
! class EditingMixin(object): pass
! class ScrollablePane(Pane,ScrollingMixin): pass
! class EditablePane(Pane,EditingMixin): pass
! class EditableScrollablePane(ScrollablePane,EditablePane): pass
!
! vereq(EditableScrollablePane.__mro__,
! (EditableScrollablePane, ScrollablePane, EditablePane,
! Pane, ScrollingMixin, EditingMixin, object))
def objects():
***************
*** 1215,1223 ****
vereq(a.__dict__, {"foo": 42})
! class C3(C1, C2):
! __slots__ = []
!
! class C4(C2, C1):
! __slots__ = []
def dynamics():
--- 1268,1278 ----
vereq(a.__dict__, {"foo": 42})
! # MRO order disagreement
! #
! # class C3(C1, C2):
! # __slots__ = []
! #
! # class C4(C2, C1):
! # __slots__ = []
def dynamics():
***************
*** 1506,1509 ****
--- 1561,1565 ----
vereq(D.__mro__, (D, B, C, A, object))
vereq(D().f(), "C")
+
class PerverseMetaType(type):
def mro(cls):
***************
*** 1511,1515 ****
L.reverse()
return L
! class X(A,B,C,D):
__metaclass__ = PerverseMetaType
vereq(X.__mro__, (object, A, C, B, D, X))
--- 1567,1571 ----
L.reverse()
return L
! class X(D,B,C,A):
__metaclass__ = PerverseMetaType
vereq(X.__mro__, (object, A, C, B, D, X))
***************
*** 3369,3372 ****
--- 3425,3431 ----
multi()
diamond()
+ ex5()
+ monotonicity()
+ consistency_with_epg()
objects()
slots()