2 new commits in pytest:

https://bitbucket.org/hpk42/pytest/commits/cf0ce46a5189/
Changeset:   cf0ce46a5189
User:        flub
Date:        2014-04-15 00:09:10
Summary:     Improve error message if pytest.raises is used wrongly

If the type is not checked then an incomprehensible error will occur
later.  This enforces the type and raies the same exception/msg as
CPython does in that case.

Docstring unmodified, just re-justified for pep8 compat.
Affected #:  2 files

diff -r a00590d97593d00163772511aca3149f7ef0bae2 -r 
cf0ce46a5189c79bfab54eaab4b3fa6406e9c1ee _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -977,15 +977,16 @@
     Performance note:
     -----------------
 
-    Similar to caught exception objects in Python, explicitly clearing local
-    references to returned ``py.code.ExceptionInfo`` objects can help the 
Python
-    interpreter speed up its garbage collection.
+    Similar to caught exception objects in Python, explicitly clearing
+    local references to returned ``py.code.ExceptionInfo`` objects can
+    help the Python interpreter speed up its garbage collection.
 
-    Clearing those references breaks a reference cycle (``ExceptionInfo`` -->
-    caught exception --> frame stack raising the exception --> current frame
-    stack --> local variables --> ``ExceptionInfo``) which makes Python keep 
all
-    objects referenced from that cycle (including all local variables in the
-    current frame) alive until the next cyclic garbage collection run. See the
+    Clearing those references breaks a reference cycle
+    (``ExceptionInfo`` --> caught exception --> frame stack raising
+    the exception --> current frame stack --> local variables -->
+    ``ExceptionInfo``) which makes Python keep all objects referenced
+    from that cycle (including all local variables in the current
+    frame) alive until the next cyclic garbage collection run. See the
     official Python ``try`` statement documentation for more detailed
     information.
 
@@ -995,7 +996,16 @@
         # we want to catch a AssertionError
         # replace our subclass with the builtin one
         # see https://bitbucket.org/hpk42/pytest/issue/176/pytestraises
-        from _pytest.assertion.util import BuiltinAssertionError as 
ExpectedException
+        from _pytest.assertion.util import BuiltinAssertionError \
+            as ExpectedException
+    msg = ("exceptions must be old-style classes or"
+           " derived from BaseException, not %s")
+    if isinstance(ExpectedException, tuple):
+        for exc in ExpectedException:
+            if not inspect.isclass(exc):
+                raise TypeError(msg % type(exc))
+    elif not inspect.isclass(ExpectedException):
+        raise TypeError(msg % type(ExpectedException))
 
     if not args:
         return RaisesContext(ExpectedException)

diff -r a00590d97593d00163772511aca3149f7ef0bae2 -r 
cf0ce46a5189c79bfab54eaab4b3fa6406e9c1ee testing/python/raises.py
--- a/testing/python/raises.py
+++ b/testing/python/raises.py
@@ -62,3 +62,10 @@
             '*3 passed*',
         ])
 
+    def test_noclass(self):
+        with pytest.raises(TypeError):
+            pytest.raises('wrong', lambda: None)
+
+    def test_tuple(self):
+        with pytest.raises((KeyError, ValueError)):
+            raise KeyError('oops')


https://bitbucket.org/hpk42/pytest/commits/9572842277fa/
Changeset:   9572842277fa
User:        flub
Date:        2014-04-15 00:12:29
Summary:     Changelog for issue 475
Affected #:  1 file

diff -r cf0ce46a5189c79bfab54eaab4b3fa6406e9c1ee -r 
9572842277fa4cf0e9cac75684b4fb02c3927f4d CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
 NEXT (2.6)
 -----------------------------------
 
+- fix issue 475: fail early and comprehensible if calling
+  pytest.raises with wrong exception type.
+
 - change XPASS colour to yellow rather then red when tests are run
   with -v.

Repository URL: https://bitbucket.org/hpk42/pytest/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to