150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| import copy
 | |
| import inspect
 | |
| from unittest import mock
 | |
| 
 | |
| import pytest
 | |
| from _pytest import deprecated
 | |
| from _pytest import nodes
 | |
| from _pytest.config import Config
 | |
| 
 | |
| 
 | |
| @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, please try the new pytest-reportlog plugin.",
 | |
|             "*See https://docs.pytest.org/en/latest/deprecations.html#result-log-result-log for more information*",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("attribute", pytest.collect.__all__)  # type: ignore
 | |
| # false positive due to dynamic attribute
 | |
| def test_pytest_collect_module_deprecated(attribute):
 | |
|     with pytest.warns(DeprecationWarning, match=attribute):
 | |
|         getattr(pytest.collect, attribute)
 | |
| 
 | |
| 
 | |
| def test_terminal_reporter_writer_attr(pytestconfig: Config) -> None:
 | |
|     """Check that TerminalReporter._tw is also available as 'writer' (#2984)
 | |
|     This attribute has been deprecated in 5.4.
 | |
|     """
 | |
|     try:
 | |
|         import xdist  # noqa
 | |
| 
 | |
|         pytest.skip("xdist workers disable the terminal reporter plugin")
 | |
|     except ImportError:
 | |
|         pass
 | |
|     terminal_reporter = pytestconfig.pluginmanager.get_plugin("terminalreporter")
 | |
|     original_tw = terminal_reporter._tw
 | |
| 
 | |
|     with pytest.warns(pytest.PytestDeprecationWarning) as cw:
 | |
|         assert terminal_reporter.writer is original_tw
 | |
|     assert len(cw) == 1
 | |
|     assert cw[0].filename == __file__
 | |
| 
 | |
|     new_tw = copy.copy(original_tw)
 | |
|     with pytest.warns(pytest.PytestDeprecationWarning) as cw:
 | |
|         terminal_reporter.writer = new_tw
 | |
|         try:
 | |
|             assert terminal_reporter._tw is new_tw
 | |
|         finally:
 | |
|             terminal_reporter.writer = original_tw
 | |
|     assert len(cw) == 2
 | |
|     assert cw[0].filename == cw[1].filename == __file__
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("plugin", sorted(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)
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("junit_family", [None, "legacy", "xunit2"])
 | |
| def test_warn_about_imminent_junit_family_default_change(testdir, junit_family):
 | |
|     """Show a warning if junit_family is not defined and --junitxml is used (#6179)"""
 | |
|     testdir.makepyfile(
 | |
|         """
 | |
|         def test_foo():
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
|     if junit_family:
 | |
|         testdir.makeini(
 | |
|             """
 | |
|             [pytest]
 | |
|             junit_family={junit_family}
 | |
|         """.format(
 | |
|                 junit_family=junit_family
 | |
|             )
 | |
|         )
 | |
| 
 | |
|     result = testdir.runpytest("--junit-xml=foo.xml")
 | |
|     warning_msg = (
 | |
|         "*PytestDeprecationWarning: The 'junit_family' default value will change*"
 | |
|     )
 | |
|     if junit_family:
 | |
|         result.stdout.no_fnmatch_line(warning_msg)
 | |
|     else:
 | |
|         result.stdout.fnmatch_lines([warning_msg])
 | |
| 
 | |
| 
 | |
| def test_node_direct_ctor_warning():
 | |
|     class MockConfig:
 | |
|         pass
 | |
| 
 | |
|     ms = MockConfig()
 | |
|     with pytest.warns(
 | |
|         DeprecationWarning,
 | |
|         match="Direct construction of .* has been deprecated, please use .*.from_parent.*",
 | |
|     ) as w:
 | |
|         nodes.Node(name="test", config=ms, session=ms, nodeid="None")
 | |
|     assert w[0].lineno == inspect.currentframe().f_lineno - 1
 | |
|     assert w[0].filename == __file__
 | |
| 
 | |
| 
 | |
| def test__fillfuncargs_is_deprecated() -> None:
 | |
|     with pytest.warns(
 | |
|         pytest.PytestDeprecationWarning,
 | |
|         match="The `_fillfuncargs` function is deprecated",
 | |
|     ):
 | |
|         pytest._fillfuncargs(mock.Mock())
 | |
| 
 | |
| 
 | |
| def test_minus_k_dash_is_deprecated(testdir) -> None:
 | |
|     threepass = testdir.makepyfile(
 | |
|         test_threepass="""
 | |
|         def test_one(): assert 1
 | |
|         def test_two(): assert 1
 | |
|         def test_three(): assert 1
 | |
|     """
 | |
|     )
 | |
|     result = testdir.runpytest("-k=-test_two", threepass)
 | |
|     result.stdout.fnmatch_lines(["*The `-k '-expr'` syntax*deprecated*"])
 | |
| 
 | |
| 
 | |
| def test_minus_k_colon_is_deprecated(testdir) -> None:
 | |
|     threepass = testdir.makepyfile(
 | |
|         test_threepass="""
 | |
|         def test_one(): assert 1
 | |
|         def test_two(): assert 1
 | |
|         def test_three(): assert 1
 | |
|     """
 | |
|     )
 | |
|     result = testdir.runpytest("-k", "test_two:", threepass)
 | |
|     result.stdout.fnmatch_lines(["*The `-k 'expr:'` syntax*deprecated*"])
 |