[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):