| Viewing file:  debug.py (2.22 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
"""This plugin provides ``--pdb`` and ``--pdb-failures`` options. The ``--pdb``
 option will drop the test runner into pdb when it encounters an error. To
 drop into pdb on failure, use ``--pdb-failures``.
 """
 
 import pdb
 from nose.plugins.base import Plugin
 
 class Pdb(Plugin):
 """
 Provides --pdb and --pdb-failures options that cause the test runner to
 drop into pdb if it encounters an error or failure, respectively.
 """
 enabled_for_errors = False
 enabled_for_failures = False
 score = 5 # run last, among builtins
 
 def options(self, parser, env):
 """Register commandline options.
 """
 parser.add_option(
 "--pdb", action="store_true", dest="debugBoth",
 default=env.get('NOSE_PDB', False),
 help="Drop into debugger on failures or errors")
 parser.add_option(
 "--pdb-failures", action="store_true",
 dest="debugFailures",
 default=env.get('NOSE_PDB_FAILURES', False),
 help="Drop into debugger on failures")
 parser.add_option(
 "--pdb-errors", action="store_true",
 dest="debugErrors",
 default=env.get('NOSE_PDB_ERRORS', False),
 help="Drop into debugger on errors")
 
 def configure(self, options, conf):
 """Configure which kinds of exceptions trigger plugin.
 """
 self.conf = conf
 self.enabled_for_errors = options.debugErrors or options.debugBoth
 self.enabled_for_failures = options.debugFailures or options.debugBoth
 self.enabled = self.enabled_for_failures or self.enabled_for_errors
 
 def addError(self, test, err):
 """Enter pdb if configured to debug errors.
 """
 if not self.enabled_for_errors:
 return
 self.debug(err)
 
 def addFailure(self, test, err):
 """Enter pdb if configured to debug failures.
 """
 if not self.enabled_for_failures:
 return
 self.debug(err)
 
 def debug(self, err):
 import sys # FIXME why is this import here?
 ec, ev, tb = err
 stdout = sys.stdout
 sys.stdout = sys.__stdout__
 try:
 pdb.post_mortem(tb)
 finally:
 sys.stdout = stdout
 
 |