diff options
author | Sascha Peilicke <saschpe@suse.de> | 2013-01-18 11:22:06 +0100 |
---|---|---|
committer | Sascha Peilicke <saschpe@suse.de> | 2013-01-18 12:19:27 +0100 |
commit | bf4414002390d5926980736e2ce5ea2dafc3ab82 (patch) | |
tree | 545c82b97d219453690a2c5f6bacd2663f82535b /unit_tests | |
parent | b6843dff5c04ffbd27b888f3fea11a435e5ddb7b (diff) | |
download | nose-bf4414002390d5926980736e2ce5ea2dafc3ab82.tar.gz |
Fix formatFailure expection if missing tb in exc_info
The FailureDetail plugin should not fail in formatFailure if no
traceback is in the exc_info tupple ('err' parameter). This happens,
e.g. when used with testtools:
Traceback (most recent call last):
File "/usr/lib64/python2.6/site-packages/nose/case.py", line 133, in run
self.runTest(result)
File "/usr/lib64/python2.6/site-packages/nose/case.py", line 151, in runTest
test(result)
File "/usr/lib64/python2.6/unittest.py", line 300, in __call__
return self.run(*args, **kwds)
File "/usr/lib64/python2.6/site-packages/testtools/testcase.py", line 518, in run
return self.__RunTest(self, self.exception_handlers).run(result)
File "/usr/lib64/python2.6/site-packages/testtools/runtest.py", line 74, in run
return self._run_one(actual_result)
File "/usr/lib64/python2.6/site-packages/testtools/runtest.py", line 88, in _run_one
return self._run_prepared_result(ExtendedToOriginalDecorator(result))
File "/usr/lib64/python2.6/site-packages/testtools/runtest.py", line 107, in _run_prepared_result
handler(self.case, self.result, e)
File "/usr/lib64/python2.6/site-packages/testtools/testcase.py", line 494, in _report_failure
result.addFailure(self, details=self.getDetails())
File "/usr/lib64/python2.6/site-packages/testtools/testresult/real.py", line 605, in addFailure
return self.decorated.addFailure(test, err)
File "/usr/lib64/python2.6/site-packages/nose/proxy.py", line 146, in addFailure
formatted = plugins.formatFailure(self.test, err)
File "/usr/lib64/python2.6/site-packages/nose/plugins/manager.py", line 99, in __call__
return self.call(*arg, **kw)
File "/usr/lib64/python2.6/site-packages/nose/plugins/manager.py", line 141, in chain
result = meth(*arg, **kw)
File "/usr/lib64/python2.6/site-packages/nose/plugins/failuredetail.py", line 41, in formatFailure
tbinfo = inspect_traceback(tb)
File "/usr/lib64/python2.6/site-packages/nose/inspector.py", line 26, in inspect_traceback
while tb.tb_next:
AttributeError: 'NoneType' object has no attribute 'tb_next'
Diffstat (limited to 'unit_tests')
-rw-r--r-- | unit_tests/test_plugins.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/unit_tests/test_plugins.py b/unit_tests/test_plugins.py index 95c3e61..b4f91c8 100644 --- a/unit_tests/test_plugins.py +++ b/unit_tests/test_plugins.py @@ -14,6 +14,7 @@ from nose.plugins.attrib import AttributeSelector from nose.plugins.base import Plugin from nose.plugins.cover import Coverage from nose.plugins.doctests import Doctest +from nose.plugins.failuredetail import FailureDetail from nose.plugins.prof import Profile from mock import * @@ -352,6 +353,28 @@ class TestAttribPlugin(unittest.TestCase): assert not plug.wantFunction(f4) +class TestFailureDetailPlugin(unittest.TestCase): + + def test_formatFailure(self): + class DummyError(Exception): + pass + + try: + raise DummyError + except DummyError: + exc_info = sys.exc_info() + + plug = FailureDetail() + (ec, ev, tb) = plug.formatFailure(self, exc_info) + assert exc_info[0] is ec + assert exc_info[2] is tb + assert self.tbinfo is not None + + exc_info = (exc_info[0], exc_info[1], None) # Try without traceback + (ec, ev, tb) = plug.formatFailure(self, exc_info) + assert self.tbinfo is None + + class TestProfPlugin(unittest.TestCase): def setUp(self): |