220 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| import os
 | |
| 
 | |
| import pytest
 | |
| from _pytest import deprecated
 | |
| from _pytest.warning_types import PytestDeprecationWarning
 | |
| from _pytest.warnings import SHOW_PYTEST_WARNINGS_ARG
 | |
| 
 | |
| pytestmark = pytest.mark.pytester_example_path("deprecated")
 | |
| 
 | |
| 
 | |
| def test_pytest_setup_cfg_unsupported(testdir):
 | |
|     testdir.makefile(
 | |
|         ".cfg",
 | |
|         setup="""
 | |
|         [pytest]
 | |
|         addopts = --verbose
 | |
|     """,
 | |
|     )
 | |
|     with pytest.raises(pytest.fail.Exception):
 | |
|         testdir.runpytest()
 | |
| 
 | |
| 
 | |
| def test_pytest_custom_cfg_unsupported(testdir):
 | |
|     testdir.makefile(
 | |
|         ".cfg",
 | |
|         custom="""
 | |
|         [pytest]
 | |
|         addopts = --verbose
 | |
|     """,
 | |
|     )
 | |
|     with pytest.raises(pytest.fail.Exception):
 | |
|         testdir.runpytest("-c", "custom.cfg")
 | |
| 
 | |
| 
 | |
| def test_getfuncargvalue_is_deprecated(request):
 | |
|     pytest.deprecated_call(request.getfuncargvalue, "tmpdir")
 | |
| 
 | |
| 
 | |
| @pytest.mark.filterwarnings("default")
 | |
| def test_resultlog_is_deprecated(testdir):
 | |
|     result = testdir.runpytest("--help")
 | |
|     result.stdout.fnmatch_lines(["*DEPRECATED path for machine-readable result log*"])
 | |
| 
 | |
|     testdir.makepyfile(
 | |
|         """
 | |
|         def test():
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
|     result = testdir.runpytest("--result-log=%s" % testdir.tmpdir.join("result.log"))
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "*--result-log is deprecated and scheduled for removal in pytest 6.0*",
 | |
|             "*See https://docs.pytest.org/en/latest/deprecations.html#result-log-result-log for more information*",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| 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
 | |
| 
 | |
|         pytest.skip("xdist workers disable the terminal reporter plugin")
 | |
|     except ImportError:
 | |
|         pass
 | |
|     terminal_reporter = pytestconfig.pluginmanager.get_plugin("terminalreporter")
 | |
|     assert terminal_reporter.writer is terminal_reporter._tw
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("plugin", deprecated.DEPRECATED_EXTERNAL_PLUGINS)
 | |
| @pytest.mark.filterwarnings("default")
 | |
| def test_external_plugins_integrated(testdir, plugin):
 | |
|     testdir.syspathinsert()
 | |
|     testdir.makepyfile(**{plugin: ""})
 | |
| 
 | |
|     with pytest.warns(pytest.PytestConfigWarning):
 | |
|         testdir.parseconfig("-p", plugin)
 | |
| 
 | |
| 
 | |
| def test_raises_message_argument_deprecated():
 | |
|     with pytest.warns(pytest.PytestDeprecationWarning):
 | |
|         with pytest.raises(RuntimeError, message="foobar"):
 | |
|             raise RuntimeError
 | |
| 
 | |
| 
 | |
| def test_pytest_plugins_in_non_top_level_conftest_deprecated(testdir):
 | |
|     from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
 | |
| 
 | |
|     testdir.makepyfile(
 | |
|         **{
 | |
|             "subdirectory/conftest.py": """
 | |
|         pytest_plugins=['capture']
 | |
|     """
 | |
|         }
 | |
|     )
 | |
|     testdir.makepyfile(
 | |
|         """
 | |
|         def test_func():
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
|     res = testdir.runpytest(SHOW_PYTEST_WARNINGS_ARG)
 | |
|     assert res.ret == 2
 | |
|     msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
 | |
|     res.stdout.fnmatch_lines(
 | |
|         ["*{msg}*".format(msg=msg), "*subdirectory{sep}conftest.py*".format(sep=os.sep)]
 | |
|     )
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("use_pyargs", [True, False])
 | |
| def test_pytest_plugins_in_non_top_level_conftest_unsupported_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 ()
 | |
|     args += (SHOW_PYTEST_WARNINGS_ARG,)
 | |
|     res = testdir.runpytest(*args)
 | |
|     assert res.ret == (0 if use_pyargs else 2)
 | |
|     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)])
 | |
| 
 | |
| 
 | |
| def test_pytest_plugins_in_non_top_level_conftest_unsupported_no_top_level_conftest(
 | |
|     testdir
 | |
| ):
 | |
|     from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
 | |
| 
 | |
|     subdirectory = testdir.tmpdir.join("subdirectory")
 | |
|     subdirectory.mkdir()
 | |
|     testdir.makeconftest(
 | |
|         """
 | |
|         pytest_plugins=['capture']
 | |
|     """
 | |
|     )
 | |
|     testdir.tmpdir.join("conftest.py").move(subdirectory.join("conftest.py"))
 | |
| 
 | |
|     testdir.makepyfile(
 | |
|         """
 | |
|         def test_func():
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
| 
 | |
|     res = testdir.runpytest_subprocess()
 | |
|     assert res.ret == 2
 | |
|     msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
 | |
|     res.stdout.fnmatch_lines(
 | |
|         ["*{msg}*".format(msg=msg), "*subdirectory{sep}conftest.py*".format(sep=os.sep)]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_pytest_plugins_in_non_top_level_conftest_unsupported_no_false_positives(
 | |
|     testdir
 | |
| ):
 | |
|     from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST
 | |
| 
 | |
|     subdirectory = testdir.tmpdir.join("subdirectory")
 | |
|     subdirectory.mkdir()
 | |
|     testdir.makeconftest(
 | |
|         """
 | |
|         pass
 | |
|     """
 | |
|     )
 | |
|     testdir.tmpdir.join("conftest.py").move(subdirectory.join("conftest.py"))
 | |
| 
 | |
|     testdir.makeconftest(
 | |
|         """
 | |
|         import warnings
 | |
|         warnings.filterwarnings('always', category=DeprecationWarning)
 | |
|         pytest_plugins=['capture']
 | |
|     """
 | |
|     )
 | |
|     testdir.makepyfile(
 | |
|         """
 | |
|         def test_func():
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
|     res = testdir.runpytest_subprocess()
 | |
|     assert res.ret == 0
 | |
|     msg = str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0]
 | |
|     assert msg not in res.stdout.str()
 | |
| 
 | |
| 
 | |
| 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"
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_pytest_warns_unknown_kwargs():
 | |
|     with pytest.warns(
 | |
|         PytestDeprecationWarning,
 | |
|         match=r"pytest.warns\(\) got unexpected keyword arguments: \['foo'\]",
 | |
|     ):
 | |
|         pytest.warns(UserWarning, foo="hello")
 |