Commits

Ronny Pfannschmidt committed 60f144d

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

Comments (0)

Files changed (3)

 
 - 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)
 

_pytest/python.py

         <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)

testing/test_python.py

         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("""