diff --git a/nose/plugins/debug.py b/nose/plugins/debug.py index 78243e60..d40c1f90 100644 --- a/nose/plugins/debug.py +++ b/nose/plugins/debug.py @@ -6,6 +6,9 @@ import pdb from nose.plugins.base import Plugin +from nose.util import isclass +from nose.plugins.skip import SkipTest +from nose.plugins.deprecated import DeprecatedTest class Pdb(Plugin): """ @@ -42,9 +45,17 @@ def configure(self, options, conf): self.enabled_for_failures = options.debugFailures or options.debugBoth self.enabled = self.enabled_for_failures or self.enabled_for_errors + def _filterError(self, err): + if isinstance(err, tuple) and isclass(err[0]): + if issubclass(err[0], SkipTest) or issubclass(err[0], DeprecatedTest): + return True + return False + def addError(self, test, err): """Enter pdb if configured to debug errors. """ + if self._filterError(err): + return if not self.enabled_for_errors: return self.debug(err) @@ -52,6 +63,8 @@ def addError(self, test, err): def addFailure(self, test, err): """Enter pdb if configured to debug failures. """ + if self._filterError(err): + return if not self.enabled_for_failures: return self.debug(err) diff --git a/nose/plugins/errorclass.py b/nose/plugins/errorclass.py index d1540e00..83b8b730 100644 --- a/nose/plugins/errorclass.py +++ b/nose/plugins/errorclass.py @@ -95,7 +95,6 @@ from nose.pyversion import make_instancemethod from nose.plugins.base import Plugin from nose.result import TextTestResult -from nose.util import isclass class MetaErrorClass(type): """Metaclass for ErrorClassPlugins that allows error classes to be @@ -136,14 +135,6 @@ class ErrorClassPlugin(Plugin): score = 1000 errorClasses = () - def addError(self, test, err): - err_cls, a, b = err - if not isclass(err_cls): - return - classes = [e[0] for e in self.errorClasses] - if filter(lambda c: issubclass(err_cls, c), classes): - return True - def prepareTestResult(self, result): if not hasattr(result, 'errorClasses'): self.patchResult(result) diff --git a/unit_tests/test_issue_101.py b/unit_tests/test_issue_101.py deleted file mode 100644 index 44918dcf..00000000 --- a/unit_tests/test_issue_101.py +++ /dev/null @@ -1,27 +0,0 @@ -import sys -import unittest -import warnings -from nose.plugins.errorclass import ErrorClass, ErrorClassPlugin -from nose.exc import SkipTest - -class TestErrorClassWithStringException(unittest.TestCase): - - def test_string_exception_not_masked(self): - if sys.version_info >= (3,): - raise SkipTest("Python 3.x does not support string exceptions") - - class X(Exception): - pass - - class EP(ErrorClassPlugin): - xes = ErrorClass(X, label='XXX', isfailure=True) - - warnings.filterwarnings(action='ignore', category=DeprecationWarning) - try: - - raise "oh no!" - except: - exc = sys.exc_info() - - ep = EP() - self.assertEqual(ep.addError(None, exc), None)