From d32047f038f2a9132377246013d5c9736ef80605 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 25 Nov 2002 21:38:52 +0000 Subject: 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.) --- Lib/test/test_descr.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 56c1662..2c2a42b 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1054,6 +1054,36 @@ def consistency_with_epg(): (EditableScrollablePane, ScrollablePane, EditablePane, Pane, ScrollingMixin, EditingMixin, object)) +def mro_disagreement(): + if verbose: print "Testing error messages for MRO disagreement..." + def raises(exc, expected, callable, *args): + try: + callable(*args) + except exc, msg: + if str(msg) != expected: + raise TestFailed, "Message %r, expected %r" % (str(msg), + expected) + else: + raise TestFailed, "Expected %s" % exc + class A(object): pass + class B(A): pass + class C(object): pass + # Test some very simple errors + raises(TypeError, "duplicate base class A", + type, "X", (A, A), {}) + raises(TypeError, "MRO conflict among bases B, A", + type, "X", (A, B), {}) + raises(TypeError, "MRO conflict among bases C, B, A", + type, "X", (A, C, B), {}) + # Test a slightly more complex error + class GridLayout(object): pass + class HorizontalGrid(GridLayout): pass + class VerticalGrid(GridLayout): pass + class HVGrid(HorizontalGrid, VerticalGrid): pass + class VHGrid(VerticalGrid, HorizontalGrid): pass + raises(TypeError, "MRO conflict among bases VerticalGrid, HorizontalGrid", + type, "ConfusedGrid", (HVGrid, VHGrid), {}) + def objects(): if verbose: print "Testing object class..." a = object() @@ -3422,6 +3452,7 @@ def test_main(): metaclass() pymods() multi() + mro_disagreement() diamond() ex5() monotonicity() -- cgit v0.12