[Python-checkins] python/dist/src/Lib/test test_descr.py,1.161,1.162

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Mon, 25 Nov 2002 13:39:08 -0800


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv18947

Modified Files:
	test_descr.py 
Log Message:
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.)


Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.161
retrieving revision 1.162
diff -C2 -d -r1.161 -r1.162
*** test_descr.py	23 Nov 2002 16:57:00 -0000	1.161
--- test_descr.py	25 Nov 2002 21:38:52 -0000	1.162
***************
*** 1055,1058 ****
--- 1055,1088 ----
             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..."
***************
*** 3423,3426 ****
--- 3453,3457 ----
      pymods()
      multi()
+     mro_disagreement()
      diamond()
      ex5()