parent
							
								
									6e1b1abfa7
								
							
						
					
					
						commit
						a7e401656e
					
				|  | @ -0,0 +1,3 @@ | ||||||
|  | Removed support for passing strings to ``pytest.main``. Now, always pass a list of strings instead. | ||||||
|  | 
 | ||||||
|  | See our `docs <https://docs.pytest.org/en/latest/deprecations.html#passing-command-line-string-to-pytest-main>`__ on information on how to update your code. | ||||||
|  | @ -193,27 +193,6 @@ To update the code, use ``pytest.param``: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Passing command-line string to ``pytest.main()`` |  | ||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |  | ||||||
| 
 |  | ||||||
| .. deprecated:: 3.0 |  | ||||||
| 
 |  | ||||||
| Passing a command-line string to ``pytest.main()`` is deprecated: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     pytest.main("-v -s") |  | ||||||
| 
 |  | ||||||
| Pass a list instead: |  | ||||||
| 
 |  | ||||||
| .. code-block:: python |  | ||||||
| 
 |  | ||||||
|     pytest.main(["-v", "-s"]) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| By passing a string, users expect that pytest will interpret that command-line using the shell rules they are working |  | ||||||
| on (for example ``bash`` or ``Powershell``), but this is very hard/impossible to do in a portable way. |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| [pytest] section in setup.cfg files | [pytest] section in setup.cfg files | ||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | @ -353,6 +332,30 @@ Change to: | ||||||
|     def test_foo(record_property): |     def test_foo(record_property): | ||||||
|         ... |         ... | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | Passing command-line string to ``pytest.main()`` | ||||||
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | *Removed in version 4.0.* | ||||||
|  | 
 | ||||||
|  | Passing a command-line string to ``pytest.main()`` is deprecated: | ||||||
|  | 
 | ||||||
|  | .. code-block:: python | ||||||
|  | 
 | ||||||
|  |     pytest.main("-v -s") | ||||||
|  | 
 | ||||||
|  | Pass a list instead: | ||||||
|  | 
 | ||||||
|  | .. code-block:: python | ||||||
|  | 
 | ||||||
|  |     pytest.main(["-v", "-s"]) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | By passing a string, users expect that pytest will interpret that command-line using the shell rules they are working | ||||||
|  | on (for example ``bash`` or ``Powershell``), but this is very hard/impossible to do in a portable way. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ``yield`` tests | ``yield`` tests | ||||||
| ~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -173,12 +173,9 @@ def _prepareconfig(args=None, plugins=None): | ||||||
|     elif isinstance(args, py.path.local): |     elif isinstance(args, py.path.local): | ||||||
|         args = [str(args)] |         args = [str(args)] | ||||||
|     elif not isinstance(args, (tuple, list)): |     elif not isinstance(args, (tuple, list)): | ||||||
|         if not isinstance(args, str): |         msg = "`args` parameter expected to be a list or tuple of strings, got: {!r} (type: {})" | ||||||
|             raise ValueError("not a string or argument list: %r" % (args,)) |         raise TypeError(msg.format(args, type(args))) | ||||||
|         args = shlex.split(args, posix=sys.platform != "win32") |  | ||||||
|         from _pytest import deprecated |  | ||||||
| 
 | 
 | ||||||
|         warning = deprecated.MAIN_STR_ARGS |  | ||||||
|     config = get_config() |     config = get_config() | ||||||
|     pluginmanager = config.pluginmanager |     pluginmanager = config.pluginmanager | ||||||
|     try: |     try: | ||||||
|  |  | ||||||
|  | @ -17,11 +17,6 @@ from _pytest.warning_types import RemovedInPytest4Warning | ||||||
| from _pytest.warning_types import UnformattedWarning | from _pytest.warning_types import UnformattedWarning | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| MAIN_STR_ARGS = RemovedInPytest4Warning( |  | ||||||
|     "passing a string to pytest.main() is deprecated, " |  | ||||||
|     "pass a list of arguments instead." |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| YIELD_TESTS = "yield tests were removed in pytest 4.0 - {name} will be ignored" | YIELD_TESTS = "yield tests were removed in pytest 4.0 - {name} will be ignored" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -559,12 +559,11 @@ class TestInvocationVariants(object): | ||||||
|     def test_equivalence_pytest_pytest(self): |     def test_equivalence_pytest_pytest(self): | ||||||
|         assert pytest.main == py.test.cmdline.main |         assert pytest.main == py.test.cmdline.main | ||||||
| 
 | 
 | ||||||
|     def test_invoke_with_string(self, capsys): |     def test_invoke_with_invalid_type(self, capsys): | ||||||
|         retcode = pytest.main("-h") |         with pytest.raises( | ||||||
|         assert not retcode |             TypeError, match="expected to be a list or tuple of strings, got: '-h'" | ||||||
|         out, err = capsys.readouterr() |         ): | ||||||
|         assert "--help" in out |             pytest.main("-h") | ||||||
|         pytest.raises(ValueError, lambda: pytest.main(0)) |  | ||||||
| 
 | 
 | ||||||
|     def test_invoke_with_path(self, tmpdir, capsys): |     def test_invoke_with_path(self, tmpdir, capsys): | ||||||
|         retcode = pytest.main(tmpdir) |         retcode = pytest.main(tmpdir) | ||||||
|  |  | ||||||
|  | @ -40,25 +40,6 @@ def test_pytest_custom_cfg_deprecated(testdir): | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def test_str_args_deprecated(tmpdir): |  | ||||||
|     """Deprecate passing strings to pytest.main(). Scheduled for removal in pytest-4.0.""" |  | ||||||
|     from _pytest.main import EXIT_NOTESTSCOLLECTED |  | ||||||
| 
 |  | ||||||
|     warnings = [] |  | ||||||
| 
 |  | ||||||
|     class Collect(object): |  | ||||||
|         def pytest_warning_captured(self, warning_message): |  | ||||||
|             warnings.append(str(warning_message.message)) |  | ||||||
| 
 |  | ||||||
|     ret = pytest.main("%s -x" % tmpdir, plugins=[Collect()]) |  | ||||||
|     msg = ( |  | ||||||
|         "passing a string to pytest.main() is deprecated, " |  | ||||||
|         "pass a list of arguments instead." |  | ||||||
|     ) |  | ||||||
|     assert msg in warnings |  | ||||||
|     assert ret == EXIT_NOTESTSCOLLECTED |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def test_getfuncargvalue_is_deprecated(request): | def test_getfuncargvalue_is_deprecated(request): | ||||||
|     pytest.deprecated_call(request.getfuncargvalue, "tmpdir") |     pytest.deprecated_call(request.getfuncargvalue, "tmpdir") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue