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 David Mohr
Edison Gustavo Muenz Edison Gustavo Muenz
Eduardo Schettino Eduardo Schettino
Endre Galaczi
Elizaveta Shashkova Elizaveta Shashkova
Eric Hunsberger Eric Hunsberger
Eric Siegerman Eric Siegerman

View File

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

View File

@ -28,9 +28,18 @@ def pytest_namespace():
'warns': warns} 'warns': warns}
def deprecated_call(func, *args, **kwargs): def deprecated_call(func=None, *args, **kwargs):
"""Assert that ``func(*args, **kwargs)`` triggers a DeprecationWarning. """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() wrec = WarningsRecorder()
with wrec: with wrec:
warnings.simplefilter('always') # ensure all warnings are triggered warnings.simplefilter('always') # ensure all warnings are triggered

View File

@ -114,3 +114,9 @@ command ``warnings.simplefilter('always')``::
warnings.warn("deprecated", DeprecationWarning) warnings.warn("deprecated", DeprecationWarning)
assert len(recwarn) == 1 assert len(recwarn) == 1
assert recwarn.pop(DeprecationWarning) 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) filename="hello", lineno=3)
class TestDeprecatedCall(object): class TestDeprecatedCall(object):
def test_deprecated_call_raises(self): def test_deprecated_call_raises(self):
excinfo = pytest.raises(AssertionError, excinfo = pytest.raises(AssertionError,
"pytest.deprecated_call(dep, 3)") "pytest.deprecated_call(dep, 3)")
@ -111,6 +112,16 @@ class TestDeprecatedCall(object):
pytest.deprecated_call(dep_explicit, 0) pytest.deprecated_call(dep_explicit, 0)
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): class TestWarns(object):
def test_strings(self): def test_strings(self):