[Zope-Checkins] CVS: Zope3 - test.py:1.1.2.14

Jeremy Hylton jeremy@zope.com
Thu, 6 Jun 2002 12:42:33 -0400


Update of /cvs-repository/Zope3
In directory cvs.zope.org:/tmp/cvs-serv19980

Modified Files:
      Tag: Zope-3x-branch
	test.py 
Log Message:
Fix the -d (debug) option to also honor -v and -vv.

The fix involves further extending the ImmediateTestRunner and
ImmediateTestResult classes and ignoring the debug() method on a
TestSuite/TestCase provided by unittest.

If the debug flag is passed to ImmediateTestResult through the runner,
then it raises an exception instead of printing a formatted
traceback.  The exception raised at this point avoids all the hairy
unittest mechanism to catch tracebacks.


=== Zope3/test.py 1.1.2.13 => 1.1.2.14 ===
 class ImmediateTestResult(unittest._TextTestResult):
 
+    __super_init = unittest._TextTestResult.__init__
+
+    def __init__(self, *args, **kwarg):
+        debug = kwarg.get('debug')
+        if debug is not None:
+            del kwarg['debug']
+        self.__super_init(*args, **kwarg)
+        self._debug = debug
+        
     def _print_traceback(self, msg, err, test, errlist):
         if self.showAll or self.dots:
             self.stream.writeln("\n")
@@ -102,10 +111,14 @@
         errlist.append((test, tb))
 
     def addError(self, test, err):
+        if self._debug:
+            raise err[0], err[1], err[2]
         self._print_traceback("Error in test %s" % test, err,
                               test, self.errors)
 
     def addFailure(self, test, err):
+        if self._debug:
+            raise err[0], err[1], err[2]
         self._print_traceback("Failure in test %s" % test, err,
                               test, self.failures)
 
@@ -118,9 +131,18 @@
 
 class ImmediateTestRunner(unittest.TextTestRunner):
 
+    __super_init = unittest.TextTestRunner.__init__
+
+    def __init__(self, **kwarg):
+        debug = kwarg.get('debug')
+        if debug is not None:
+            del kwarg['debug']
+        self.__super_init(**kwarg)
+        self._debug = debug
+
     def _makeResult(self):
         return ImmediateTestResult(self.stream, self.descriptions,
-                                   self.verbosity)
+                                   self.verbosity, debug=self._debug)
 
 # setup list of directories to put on the path
 
@@ -213,7 +235,7 @@
     return new
 
 def runner(files, test_filter, debug):
-    runner = ImmediateTestRunner(verbosity=VERBOSE)
+    runner = ImmediateTestRunner(verbosity=VERBOSE, debug=debug)
     suite = unittest.TestSuite()
     for file in files:
         s = get_suite(file)
@@ -221,9 +243,6 @@
             if test_filter is not None:
                 s = filter_testcases(s, test_filter)
             suite.addTest(s)
-    if debug:
-        suite.debug()
-        return 0
     r = runner.run(suite)
 
 def remove_stale_bytecode(arg, dirname, names):