Deprecate support for passing command-line as string to pytest.main()
Fixes #1723
This commit is contained in:
parent
1fb09d9dd5
commit
ab0b6faa5f
|
@ -203,6 +203,9 @@ time or change existing behaviors in order to make them less surprising/more use
|
||||||
removed in pytest-4.0 (`#1684`_).
|
removed in pytest-4.0 (`#1684`_).
|
||||||
Thanks `@nicoddemus`_ for the PR.
|
Thanks `@nicoddemus`_ for the PR.
|
||||||
|
|
||||||
|
* Passing a command-line string to ``pytest.main()`` is considered deprecated and scheduled
|
||||||
|
for removal in pytest-4.0. It is recommended to pass a list of arguments instead (`#1723`_).
|
||||||
|
|
||||||
* Rename ``getfuncargvalue`` to ``getfixturevalue``. ``getfuncargvalue`` is
|
* Rename ``getfuncargvalue`` to ``getfixturevalue``. ``getfuncargvalue`` is
|
||||||
still present but is now considered deprecated. Thanks to `@RedBeardCode`_ and `@tomviner`_
|
still present but is now considered deprecated. Thanks to `@RedBeardCode`_ and `@tomviner`_
|
||||||
for the PR (`#1626`_).
|
for the PR (`#1626`_).
|
||||||
|
@ -282,6 +285,7 @@ time or change existing behaviors in order to make them less surprising/more use
|
||||||
.. _#1633: https://github.com/pytest-dev/pytest/pull/1633
|
.. _#1633: https://github.com/pytest-dev/pytest/pull/1633
|
||||||
.. _#1664: https://github.com/pytest-dev/pytest/pull/1664
|
.. _#1664: https://github.com/pytest-dev/pytest/pull/1664
|
||||||
.. _#1684: https://github.com/pytest-dev/pytest/pull/1684
|
.. _#1684: https://github.com/pytest-dev/pytest/pull/1684
|
||||||
|
.. _#1723: https://github.com/pytest-dev/pytest/pull/1723
|
||||||
|
|
||||||
.. _@DRMacIver: https://github.com/DRMacIver
|
.. _@DRMacIver: https://github.com/DRMacIver
|
||||||
.. _@RedBeardCode: https://github.com/RedBeardCode
|
.. _@RedBeardCode: https://github.com/RedBeardCode
|
||||||
|
|
|
@ -98,6 +98,7 @@ def get_plugin_manager():
|
||||||
return get_config().pluginmanager
|
return get_config().pluginmanager
|
||||||
|
|
||||||
def _prepareconfig(args=None, plugins=None):
|
def _prepareconfig(args=None, plugins=None):
|
||||||
|
warning = None
|
||||||
if args is None:
|
if args is None:
|
||||||
args = sys.argv[1:]
|
args = sys.argv[1:]
|
||||||
elif isinstance(args, py.path.local):
|
elif isinstance(args, py.path.local):
|
||||||
|
@ -106,6 +107,10 @@ def _prepareconfig(args=None, plugins=None):
|
||||||
if not isinstance(args, str):
|
if not isinstance(args, str):
|
||||||
raise ValueError("not a string or argument list: %r" % (args,))
|
raise ValueError("not a string or argument list: %r" % (args,))
|
||||||
args = shlex.split(args, posix=sys.platform != "win32")
|
args = shlex.split(args, posix=sys.platform != "win32")
|
||||||
|
# we want to remove this way of passing arguments to pytest.main()
|
||||||
|
# in pytest-4.0
|
||||||
|
warning = ('passing a string to pytest.main() is deprecated, '
|
||||||
|
'pass a list of arguments instead.')
|
||||||
config = get_config()
|
config = get_config()
|
||||||
pluginmanager = config.pluginmanager
|
pluginmanager = config.pluginmanager
|
||||||
try:
|
try:
|
||||||
|
@ -115,6 +120,8 @@ def _prepareconfig(args=None, plugins=None):
|
||||||
pluginmanager.consider_pluginarg(plugin)
|
pluginmanager.consider_pluginarg(plugin)
|
||||||
else:
|
else:
|
||||||
pluginmanager.register(plugin)
|
pluginmanager.register(plugin)
|
||||||
|
if warning:
|
||||||
|
config.warn('C1', warning)
|
||||||
return pluginmanager.hook.pytest_cmdline_parse(
|
return pluginmanager.hook.pytest_cmdline_parse(
|
||||||
pluginmanager=pluginmanager, args=args)
|
pluginmanager=pluginmanager, args=args)
|
||||||
except BaseException:
|
except BaseException:
|
||||||
|
|
|
@ -795,3 +795,17 @@ def test_funcarg_prefix_deprecation(testdir):
|
||||||
'Please remove the prefix and use the @pytest.fixture decorator instead.'),
|
'Please remove the prefix and use the @pytest.fixture decorator instead.'),
|
||||||
'*1 passed*',
|
'*1 passed*',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def test_str_args_deprecated(tmpdir, testdir):
|
||||||
|
"""Deprecate passing strings to pytest.main(). Scheduled for removal in pytest-4.0."""
|
||||||
|
warnings = []
|
||||||
|
|
||||||
|
class Collect:
|
||||||
|
def pytest_logwarning(self, message):
|
||||||
|
warnings.append(message)
|
||||||
|
|
||||||
|
ret = pytest.main("%s -x" % tmpdir, plugins=[Collect()])
|
||||||
|
testdir.delete_loaded_modules()
|
||||||
|
assert warnings == ['passing a string to pytest.main() is deprecated, pass a list of arguments instead.']
|
||||||
|
assert ret == EXIT_NOTESTSCOLLECTED
|
||||||
|
|
Loading…
Reference in New Issue