@@ -1054,6 +1054,36 @@ class EditableScrollablePane(ScrollablePane,EditablePane): pass
10541054 (EditableScrollablePane , ScrollablePane , EditablePane ,
10551055 Pane , ScrollingMixin , EditingMixin , object ))
10561056
1057+ def mro_disagreement ():
1058+ if verbose : print "Testing error messages for MRO disagreement..."
1059+ def raises (exc , expected , callable , * args ):
1060+ try :
1061+ callable (* args )
1062+ except exc , msg :
1063+ if str (msg ) != expected :
1064+ raise TestFailed , "Message %r, expected %r" % (str (msg ),
1065+ expected )
1066+ else :
1067+ raise TestFailed , "Expected %s" % exc
1068+ class A (object ): pass
1069+ class B (A ): pass
1070+ class C (object ): pass
1071+ # Test some very simple errors
1072+ raises (TypeError , "duplicate base class A" ,
1073+ type , "X" , (A , A ), {})
1074+ raises (TypeError , "MRO conflict among bases B, A" ,
1075+ type , "X" , (A , B ), {})
1076+ raises (TypeError , "MRO conflict among bases C, B, A" ,
1077+ type , "X" , (A , C , B ), {})
1078+ # Test a slightly more complex error
1079+ class GridLayout (object ): pass
1080+ class HorizontalGrid (GridLayout ): pass
1081+ class VerticalGrid (GridLayout ): pass
1082+ class HVGrid (HorizontalGrid , VerticalGrid ): pass
1083+ class VHGrid (VerticalGrid , HorizontalGrid ): pass
1084+ raises (TypeError , "MRO conflict among bases VerticalGrid, HorizontalGrid" ,
1085+ type , "ConfusedGrid" , (HVGrid , VHGrid ), {})
1086+
10571087def objects ():
10581088 if verbose : print "Testing object class..."
10591089 a = object ()
@@ -3422,6 +3452,7 @@ def test_main():
34223452 metaclass ()
34233453 pymods ()
34243454 multi ()
3455+ mro_disagreement ()
34253456 diamond ()
34263457 ex5 ()
34273458 monotonicity ()
0 commit comments