fix issue 176: raises(AssertionError) now catches builtin AssertionError as well
This commit is contained in:
		
							parent
							
								
									0cca20bef9
								
							
						
					
					
						commit
						0e8cd9297a
					
				|  | @ -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 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 | - factory discovery no longer fails with magic global callables | ||||||
|   that provide no sane __code__ object (mock.call for example) |   that provide no sane __code__ object (mock.call for example) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -777,6 +777,11 @@ def raises(ExpectedException, *args, **kwargs): | ||||||
|         <ExceptionInfo ...> |         <ExceptionInfo ...> | ||||||
|     """ |     """ | ||||||
|     __tracebackhide__ = True |     __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: |     if not args: | ||||||
|         return RaisesContext(ExpectedException) |         return RaisesContext(ExpectedException) | ||||||
|  |  | ||||||
|  | @ -1419,6 +1419,14 @@ class TestRaises: | ||||||
|         except pytest.raises.Exception: |         except pytest.raises.Exception: | ||||||
|             pass |             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"') |     @pytest.mark.skipif('sys.version < "2.5"') | ||||||
|     def test_raises_as_contextmanager(self, testdir): |     def test_raises_as_contextmanager(self, testdir): | ||||||
|         testdir.makepyfile(""" |         testdir.makepyfile(""" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue