diff options
author | Peter Scheibel <scheibel1@llnl.gov> | 2015-12-04 17:55:20 -0800 |
---|---|---|
committer | Peter Scheibel <scheibel1@llnl.gov> | 2015-12-04 17:55:20 -0800 |
commit | 530e049d4a3f50481e7d55e8b61a9e840f48ad76 (patch) | |
tree | 126bd7d1521b0637e0bc15b47f23fb35adc820a1 /lib/spack/external/nose/plugins/debug.py | |
parent | b98b6122044a40e195c4d868ae33890d59b2f0ea (diff) | |
download | spack-530e049d4a3f50481e7d55e8b61a9e840f48ad76.tar.gz spack-530e049d4a3f50481e7d55e8b61a9e840f48ad76.tar.bz2 spack-530e049d4a3f50481e7d55e8b61a9e840f48ad76.tar.xz spack-530e049d4a3f50481e7d55e8b61a9e840f48ad76.zip |
Added nose 1.3.7 source along with with the lgpl license (renamed from lgpl.txt
to LICENSE)
Diffstat (limited to 'lib/spack/external/nose/plugins/debug.py')
-rw-r--r-- | lib/spack/external/nose/plugins/debug.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/spack/external/nose/plugins/debug.py b/lib/spack/external/nose/plugins/debug.py new file mode 100644 index 0000000000..78243e60d0 --- /dev/null +++ b/lib/spack/external/nose/plugins/debug.py @@ -0,0 +1,67 @@ +""" +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 |