Fixes #653 use deprecated_call as context_manager

This commit is contained in:
Galaczi Endre 2015-09-21 14:18:29 +01:00
parent c30eafa254
commit beaa8e55bd
5 changed files with 29 additions and 1 deletions

View File

@ -28,6 +28,7 @@ Dave Hunt
David Mohr
Edison Gustavo Muenz
Eduardo Schettino
Endre Galaczi
Elizaveta Shashkova
Eric Hunsberger
Eric Siegerman

View File

@ -6,6 +6,7 @@
- Fix issue #411: Add __eq__ method to assertion comparison example.
Thanks Ben Webb.
- Fix issue #653: deprecated_call can be used as context manager.
2.8.0
-----------------------------

View File

@ -28,9 +28,18 @@ def pytest_namespace():
'warns': warns}
def deprecated_call(func, *args, **kwargs):
def deprecated_call(func=None, *args, **kwargs):
"""Assert that ``func(*args, **kwargs)`` triggers a DeprecationWarning.
This function can be used as a context manager::
>>> with deprecated_call():
... myobject.deprecated_method()
"""
if not func:
warnings.simplefilter('always')
return WarningsChecker(expected_warning=DeprecationWarning)
wrec = WarningsRecorder()
with wrec:
warnings.simplefilter('always') # ensure all warnings are triggered

View File

@ -114,3 +114,9 @@ command ``warnings.simplefilter('always')``::
warnings.warn("deprecated", DeprecationWarning)
assert len(recwarn) == 1
assert recwarn.pop(DeprecationWarning)
You can also use it as a contextmanager::
def test_global():
with pytest.deprecated_call():
myobject.deprecated_method()

View File

@ -79,6 +79,7 @@ def dep_explicit(i):
filename="hello", lineno=3)
class TestDeprecatedCall(object):
def test_deprecated_call_raises(self):
excinfo = pytest.raises(AssertionError,
"pytest.deprecated_call(dep, 3)")
@ -111,6 +112,16 @@ class TestDeprecatedCall(object):
pytest.deprecated_call(dep_explicit, 0)
pytest.deprecated_call(dep_explicit, 0)
def test_deprecated_call_as_context_manager_no_warning(self):
with pytest.raises(pytest.fail.Exception) as ex:
with pytest.deprecated_call():
dep(1)
assert str(ex.value) == "DID NOT WARN"
def test_deprecated_call_as_context_manager(self):
with pytest.deprecated_call():
dep(0)
class TestWarns(object):
def test_strings(self):