Merge branch '653-deprecated-context-manager' of https://github.com/chiller/pytest into features
This commit is contained in:
commit
36924b59bd
1
AUTHORS
1
AUTHORS
|
@ -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
|
||||||
|
|
|
@ -14,6 +14,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.
|
||||||
|
|
||||||
- fix issue 877: propperly handle assertion explanations with non-ascii repr
|
- fix issue 877: propperly handle assertion explanations with non-ascii repr
|
||||||
Thanks Mathieu Agopian for the report and Ronny Pfannschmidt for the PR.
|
Thanks Mathieu Agopian for the report and Ronny Pfannschmidt for the PR.
|
||||||
|
|
|
@ -28,9 +28,17 @@ 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:
|
||||||
|
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
|
||||||
|
@ -149,8 +157,8 @@ class WarningsRecorder(object):
|
||||||
self._module.showwarning = showwarning
|
self._module.showwarning = showwarning
|
||||||
|
|
||||||
# allow the same warning to be raised more than once
|
# allow the same warning to be raised more than once
|
||||||
self._module.simplefilter('always', append=True)
|
|
||||||
|
|
||||||
|
self._module.simplefilter('always')
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __exit__(self, *exc_info):
|
def __exit__(self, *exc_info):
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue