fix issue 176: raises(AssertionError) now catches builtin AssertionError as well

This commit is contained in:
Ronny Pfannschmidt 2012-08-19 13:45:26 +02:00
parent 0cca20bef9
commit 0e8cd9297a
3 changed files with 17 additions and 0 deletions

View File

@ -44,6 +44,10 @@ Changes between 2.2.4 and 2.3.0.dev
- fix issue 178: xml binary escapes are now wrapped in py.xml.raw
- fix issue 176: correctly catch the builtin AssertionError
even when we replaced AssertionError with a subclass on the
python level
- factory discovery no longer fails with magic global callables
that provide no sane __code__ object (mock.call for example)

View File

@ -777,6 +777,11 @@ def raises(ExpectedException, *args, **kwargs):
<ExceptionInfo ...>
"""
__tracebackhide__ = True
if ExpectedException is AssertionError:
# we want to catch a AssertionError
# replace our subclass with the builtin one
# see https://bitbucket.org/hpk42/pytest/issue/176/pytestraises
from exceptions import AssertionError as ExpectedException
if not args:
return RaisesContext(ExpectedException)

View File

@ -1419,6 +1419,14 @@ class TestRaises:
except pytest.raises.Exception:
pass
def test_raises_flip_builtin_AssertionError(self):
# we replace AssertionError on python level
# however c code might still raise the builtin one
import exceptions
pytest.raises(AssertionError,"""
raise exceptions.AssertionError
""")
@pytest.mark.skipif('sys.version < "2.5"')
def test_raises_as_contextmanager(self, testdir):
testdir.makepyfile("""