diff options
Diffstat (limited to 'third_party/python/py/testing/log/test_warning.py')
-rw-r--r-- | third_party/python/py/testing/log/test_warning.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/third_party/python/py/testing/log/test_warning.py b/third_party/python/py/testing/log/test_warning.py new file mode 100644 index 0000000000..a460c319e8 --- /dev/null +++ b/third_party/python/py/testing/log/test_warning.py @@ -0,0 +1,86 @@ +import sys +from distutils.version import LooseVersion + +import pytest + +import py + +mypath = py.path.local(__file__).new(ext=".py") + + +win = sys.platform.startswith('win') +pytestmark = pytest.mark.skipif(win and LooseVersion(pytest.__version__) >= LooseVersion('3.1'), + reason='apiwarn is not compatible with pytest >= 3.1 (#162)') + + +@pytest.mark.xfail +def test_forwarding_to_warnings_module(): + pytest.deprecated_call(py.log._apiwarn, "1.3", "..") + +def test_apiwarn_functional(recwarn): + capture = py.io.StdCapture() + py.log._apiwarn("x.y.z", "something", stacklevel=1) + out, err = capture.reset() + py.builtin.print_("out", out) + py.builtin.print_("err", err) + assert err.find("x.y.z") != -1 + lno = py.code.getrawcode(test_apiwarn_functional).co_firstlineno + 2 + exp = "%s:%s" % (mypath, lno) + assert err.find(exp) != -1 + +def test_stacklevel(recwarn): + def f(): + py.log._apiwarn("x", "some", stacklevel=2) + # 3 + # 4 + capture = py.io.StdCapture() + f() + out, err = capture.reset() + lno = py.code.getrawcode(test_stacklevel).co_firstlineno + 6 + warning = str(err) + assert warning.find(":%s" % lno) != -1 + +def test_stacklevel_initpkg_with_resolve(testdir, recwarn): + testdir.makepyfile(modabc=""" + import py + def f(): + py.log._apiwarn("x", "some", stacklevel="apipkg123") + """) + testdir.makepyfile(apipkg123=""" + def __getattr__(): + import modabc + modabc.f() + """) + p = testdir.makepyfile(""" + import apipkg123 + apipkg123.__getattr__() + """) + capture = py.io.StdCapture() + p.pyimport() + out, err = capture.reset() + warning = str(err) + loc = 'test_stacklevel_initpkg_with_resolve.py:2' + assert warning.find(loc) != -1 + +def test_stacklevel_initpkg_no_resolve(recwarn): + def f(): + py.log._apiwarn("x", "some", stacklevel="apipkg") + capture = py.io.StdCapture() + f() + out, err = capture.reset() + lno = py.code.getrawcode(test_stacklevel_initpkg_no_resolve).co_firstlineno + 2 + warning = str(err) + assert warning.find(":%s" % lno) != -1 + + +def test_function(recwarn): + capture = py.io.StdCapture() + py.log._apiwarn("x.y.z", "something", function=test_function) + out, err = capture.reset() + py.builtin.print_("out", out) + py.builtin.print_("err", err) + assert err.find("x.y.z") != -1 + lno = py.code.getrawcode(test_function).co_firstlineno + exp = "%s:%s" % (mypath, lno) + assert err.find(exp) != -1 + |