Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d32047f

Browse files
committed
A tweaked version of Jeremy's patch #642489, to produce better error
messages about MRO conflicts. (Tweaks here: don't print the message, but compare it with an expected string.)
1 parent 98f3373 commit d32047f

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

Lib/test/test_descr.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
10571087
def 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

Comments
 (0)