2018-10-25 15:01:29 +08:00
|
|
|
from __future__ import absolute_import
|
|
|
|
from __future__ import division
|
|
|
|
from __future__ import print_function
|
2018-07-22 22:10:44 +08:00
|
|
|
|
2018-09-02 04:10:26 +08:00
|
|
|
import os
|
2018-07-22 22:10:44 +08:00
|
|
|
|
2016-07-23 22:56:04 +08:00
|
|
|
import pytest
|
2018-11-09 06:14:58 +08:00
|
|
|
from _pytest.warnings import SHOW_PYTEST_WARNINGS_ARG
|
2016-07-23 22:56:04 +08:00
|
|
|
|
2018-10-20 23:09:44 +08:00
|
|
|
pytestmark = pytest.mark.pytester_example_path("deprecated")
|
|
|
|
|
2016-07-23 22:56:04 +08:00
|
|
|
|
|
|
|
def test_funcarg_prefix_deprecation(testdir):
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2016-07-23 22:56:04 +08:00
|
|
|
def pytest_funcarg__value():
|
|
|
|
return 10
|
|
|
|
|
|
|
|
def test_funcarg_prefix(value):
|
|
|
|
assert value == 10
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-11-09 06:14:58 +08:00
|
|
|
result = testdir.runpytest("-ra", SHOW_PYTEST_WARNINGS_ARG)
|
2018-05-23 22:48:46 +08:00
|
|
|
result.stdout.fnmatch_lines(
|
|
|
|
[
|
|
|
|
(
|
2018-09-02 08:58:48 +08:00
|
|
|
"*test_funcarg_prefix_deprecation.py:1: *pytest_funcarg__value: "
|
|
|
|
'declaring fixtures using "pytest_funcarg__" prefix is deprecated*'
|
2018-05-23 22:48:46 +08:00
|
|
|
),
|
|
|
|
"*1 passed*",
|
|
|
|
]
|
|
|
|
)
|
2016-07-23 22:56:04 +08:00
|
|
|
|
|
|
|
|
2018-09-02 08:58:48 +08:00
|
|
|
@pytest.mark.filterwarnings("default")
|
2016-08-17 08:30:07 +08:00
|
|
|
def test_pytest_setup_cfg_deprecated(testdir):
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makefile(
|
|
|
|
".cfg",
|
|
|
|
setup="""
|
2016-08-17 08:30:07 +08:00
|
|
|
[pytest]
|
|
|
|
addopts = --verbose
|
2018-05-23 22:48:46 +08:00
|
|
|
""",
|
|
|
|
)
|
2016-08-17 08:30:07 +08:00
|
|
|
result = testdir.runpytest()
|
2018-05-23 22:48:46 +08:00
|
|
|
result.stdout.fnmatch_lines(
|
|
|
|
["*pytest*section in setup.cfg files is deprecated*use*tool:pytest*instead*"]
|
|
|
|
)
|
2016-08-17 08:30:07 +08:00
|
|
|
|
|
|
|
|
2018-09-02 08:58:48 +08:00
|
|
|
@pytest.mark.filterwarnings("default")
|
2018-03-02 15:52:38 +08:00
|
|
|
def test_pytest_custom_cfg_deprecated(testdir):
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makefile(
|
|
|
|
".cfg",
|
|
|
|
custom="""
|
2018-03-02 15:52:38 +08:00
|
|
|
[pytest]
|
|
|
|
addopts = --verbose
|
2018-05-23 22:48:46 +08:00
|
|
|
""",
|
|
|
|
)
|
2018-03-02 15:52:38 +08:00
|
|
|
result = testdir.runpytest("-c", "custom.cfg")
|
2018-05-23 22:48:46 +08:00
|
|
|
result.stdout.fnmatch_lines(
|
|
|
|
["*pytest*section in custom.cfg files is deprecated*use*tool:pytest*instead*"]
|
|
|
|
)
|
2018-03-02 15:52:38 +08:00
|
|
|
|
|
|
|
|
2018-09-04 06:27:46 +08:00
|
|
|
def test_str_args_deprecated(tmpdir):
|
2016-07-23 22:56:04 +08:00
|
|
|
"""Deprecate passing strings to pytest.main(). Scheduled for removal in pytest-4.0."""
|
|
|
|
from _pytest.main import EXIT_NOTESTSCOLLECTED
|
2018-05-23 22:48:46 +08:00
|
|
|
|
2016-07-23 22:56:04 +08:00
|
|
|
warnings = []
|
|
|
|
|
2017-02-17 02:41:51 +08:00
|
|
|
class Collect(object):
|
2018-09-04 06:27:46 +08:00
|
|
|
def pytest_warning_captured(self, warning_message):
|
|
|
|
warnings.append(str(warning_message.message))
|
2016-07-23 22:56:04 +08:00
|
|
|
|
|
|
|
ret = pytest.main("%s -x" % tmpdir, plugins=[Collect()])
|
2018-05-23 22:48:46 +08:00
|
|
|
msg = (
|
|
|
|
"passing a string to pytest.main() is deprecated, "
|
|
|
|
"pass a list of arguments instead."
|
|
|
|
)
|
2016-07-23 22:56:04 +08:00
|
|
|
assert msg in warnings
|
|
|
|
assert ret == EXIT_NOTESTSCOLLECTED
|
|
|
|
|
|
|
|
|
|
|
|
def test_getfuncargvalue_is_deprecated(request):
|
2018-05-23 22:48:46 +08:00
|
|
|
pytest.deprecated_call(request.getfuncargvalue, "tmpdir")
|
2016-08-17 07:22:15 +08:00
|
|
|
|
|
|
|
|
2018-09-02 08:58:48 +08:00
|
|
|
@pytest.mark.filterwarnings("default")
|
2016-08-17 07:22:15 +08:00
|
|
|
def test_resultlog_is_deprecated(testdir):
|
2018-05-23 22:48:46 +08:00
|
|
|
result = testdir.runpytest("--help")
|
|
|
|
result.stdout.fnmatch_lines(["*DEPRECATED path for machine-readable result log*"])
|
2016-08-17 07:22:15 +08:00
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2016-08-17 07:22:15 +08:00
|
|
|
def test():
|
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
|
|
|
result = testdir.runpytest("--result-log=%s" % testdir.tmpdir.join("result.log"))
|
|
|
|
result.stdout.fnmatch_lines(
|
|
|
|
[
|
2018-11-23 07:14:53 +08:00
|
|
|
"*--result-log is deprecated and scheduled for removal in pytest 5.0*",
|
|
|
|
"*See https://docs.pytest.org/en/latest/deprecations.html#result-log-result-log for more information*",
|
2018-05-23 22:48:46 +08:00
|
|
|
]
|
|
|
|
)
|
2017-11-15 23:48:08 +08:00
|
|
|
|
|
|
|
|
2017-12-01 04:34:53 +08:00
|
|
|
def test_terminal_reporter_writer_attr(pytestconfig):
|
|
|
|
"""Check that TerminalReporter._tw is also available as 'writer' (#2984)
|
|
|
|
This attribute is planned to be deprecated in 3.4.
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
import xdist # noqa
|
2018-05-23 22:48:46 +08:00
|
|
|
|
|
|
|
pytest.skip("xdist workers disable the terminal reporter plugin")
|
2017-12-01 04:34:53 +08:00
|
|
|
except ImportError:
|
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
terminal_reporter = pytestconfig.pluginmanager.get_plugin("terminalreporter")
|
2017-12-01 04:34:53 +08:00
|
|
|
assert terminal_reporter.writer is terminal_reporter._tw
|
|
|
|
|
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
@pytest.mark.parametrize("plugin", ["catchlog", "capturelog"])
|
2017-12-06 03:02:56 +08:00
|
|
|
def test_pytest_catchlog_deprecated(testdir, plugin):
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2017-11-24 05:34:52 +08:00
|
|
|
def test_func(pytestconfig):
|
2018-05-18 05:31:16 +08:00
|
|
|
pytestconfig.pluginmanager.register(None, 'pytest_{}')
|
2018-05-23 22:48:46 +08:00
|
|
|
""".format(
|
|
|
|
plugin
|
|
|
|
)
|
|
|
|
)
|
2017-11-24 05:34:52 +08:00
|
|
|
res = testdir.runpytest()
|
|
|
|
assert res.ret == 0
|
2018-05-23 22:48:46 +08:00
|
|
|
res.stdout.fnmatch_lines(
|
|
|
|
["*pytest-*log plugin has been merged into the core*", "*1 passed, 1 warnings*"]
|
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
def test_pytest_plugins_in_non_top_level_conftest_deprecated(testdir):
|
|
|
|
from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
|
2018-05-23 22:48:46 +08:00
|
|
|
|
2018-09-26 21:49:14 +08:00
|
|
|
testdir.makepyfile(
|
|
|
|
**{
|
|
|
|
"subdirectory/conftest.py": """
|
2018-02-21 07:27:24 +08:00
|
|
|
pytest_plugins=['capture']
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
2018-09-26 21:49:14 +08:00
|
|
|
}
|
2018-05-23 22:48:46 +08:00
|
|
|
)
|
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
def test_func():
|
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-11-09 06:14:58 +08:00
|
|
|
res = testdir.runpytest(SHOW_PYTEST_WARNINGS_ARG)
|
2018-02-21 07:27:24 +08:00
|
|
|
assert res.ret == 0
|
2018-09-05 03:29:48 +08:00
|
|
|
msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
|
2018-09-02 04:10:26 +08:00
|
|
|
res.stdout.fnmatch_lines(
|
|
|
|
"*subdirectory{sep}conftest.py:0: RemovedInPytest4Warning: {msg}*".format(
|
|
|
|
sep=os.sep, msg=msg
|
|
|
|
)
|
2018-05-23 22:48:46 +08:00
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
|
|
|
|
|
2018-09-26 23:00:49 +08:00
|
|
|
@pytest.mark.parametrize("use_pyargs", [True, False])
|
|
|
|
def test_pytest_plugins_in_non_top_level_conftest_deprecated_pyargs(
|
|
|
|
testdir, use_pyargs
|
|
|
|
):
|
|
|
|
"""When using --pyargs, do not emit the warning about non-top-level conftest warnings (#4039, #4044)"""
|
|
|
|
from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
|
|
|
|
|
|
|
|
files = {
|
|
|
|
"src/pkg/__init__.py": "",
|
|
|
|
"src/pkg/conftest.py": "",
|
|
|
|
"src/pkg/test_root.py": "def test(): pass",
|
|
|
|
"src/pkg/sub/__init__.py": "",
|
|
|
|
"src/pkg/sub/conftest.py": "pytest_plugins=['capture']",
|
|
|
|
"src/pkg/sub/test_bar.py": "def test(): pass",
|
|
|
|
}
|
|
|
|
testdir.makepyfile(**files)
|
|
|
|
testdir.syspathinsert(testdir.tmpdir.join("src"))
|
|
|
|
|
|
|
|
args = ("--pyargs", "pkg") if use_pyargs else ()
|
2018-11-09 06:14:58 +08:00
|
|
|
args += (SHOW_PYTEST_WARNINGS_ARG,)
|
2018-09-26 23:00:49 +08:00
|
|
|
res = testdir.runpytest(*args)
|
|
|
|
assert res.ret == 0
|
|
|
|
msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
|
|
|
|
if use_pyargs:
|
|
|
|
assert msg not in res.stdout.str()
|
|
|
|
else:
|
|
|
|
res.stdout.fnmatch_lines("*{msg}*".format(msg=msg))
|
|
|
|
|
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
def test_pytest_plugins_in_non_top_level_conftest_deprecated_no_top_level_conftest(
|
|
|
|
testdir
|
|
|
|
):
|
2018-02-21 07:27:24 +08:00
|
|
|
from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
|
2018-05-23 22:48:46 +08:00
|
|
|
|
|
|
|
subdirectory = testdir.tmpdir.join("subdirectory")
|
2018-02-21 07:27:24 +08:00
|
|
|
subdirectory.mkdir()
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makeconftest(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
import warnings
|
|
|
|
warnings.filterwarnings('always', category=DeprecationWarning)
|
|
|
|
pytest_plugins=['capture']
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
testdir.tmpdir.join("conftest.py").move(subdirectory.join("conftest.py"))
|
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
def test_func():
|
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
|
|
|
|
res = testdir.runpytest_subprocess()
|
|
|
|
assert res.ret == 0
|
2018-09-05 03:29:48 +08:00
|
|
|
msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
|
2018-09-02 04:10:26 +08:00
|
|
|
res.stdout.fnmatch_lines(
|
|
|
|
"*subdirectory{sep}conftest.py:0: RemovedInPytest4Warning: {msg}*".format(
|
|
|
|
sep=os.sep, msg=msg
|
|
|
|
)
|
2018-05-23 22:48:46 +08:00
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
|
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
def test_pytest_plugins_in_non_top_level_conftest_deprecated_no_false_positives(
|
|
|
|
testdir
|
|
|
|
):
|
2018-02-21 07:27:24 +08:00
|
|
|
from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
|
2018-05-23 22:48:46 +08:00
|
|
|
|
|
|
|
subdirectory = testdir.tmpdir.join("subdirectory")
|
2018-02-21 07:27:24 +08:00
|
|
|
subdirectory.mkdir()
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makeconftest(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
testdir.tmpdir.join("conftest.py").move(subdirectory.join("conftest.py"))
|
|
|
|
|
2018-05-23 22:48:46 +08:00
|
|
|
testdir.makeconftest(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
import warnings
|
|
|
|
warnings.filterwarnings('always', category=DeprecationWarning)
|
|
|
|
pytest_plugins=['capture']
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
|
|
|
testdir.makepyfile(
|
|
|
|
"""
|
2018-02-21 07:27:24 +08:00
|
|
|
def test_func():
|
|
|
|
pass
|
2018-05-23 22:48:46 +08:00
|
|
|
"""
|
|
|
|
)
|
2018-02-21 07:27:24 +08:00
|
|
|
res = testdir.runpytest_subprocess()
|
|
|
|
assert res.ret == 0
|
2018-09-05 03:29:48 +08:00
|
|
|
msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
|
2018-09-02 04:10:26 +08:00
|
|
|
assert msg not in res.stdout.str()
|
2018-07-22 22:10:44 +08:00
|
|
|
|
|
|
|
|
|
|
|
def test_call_fixture_function_deprecated():
|
|
|
|
"""Check if a warning is raised if a fixture function is called directly (#3661)"""
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def fix():
|
|
|
|
return 1
|
|
|
|
|
|
|
|
with pytest.deprecated_call():
|
|
|
|
assert fix() == 1
|
2018-09-02 04:10:26 +08:00
|
|
|
|
|
|
|
|
2018-10-20 23:09:44 +08:00
|
|
|
def test_fixture_named_request(testdir):
|
|
|
|
testdir.copy_example()
|
|
|
|
result = testdir.runpytest()
|
|
|
|
result.stdout.fnmatch_lines(
|
|
|
|
[
|
|
|
|
"*'request' is a reserved name for fixtures and will raise an error in future versions"
|
|
|
|
]
|
|
|
|
)
|