main: `args` must be a list, not tuple (#6791)
Passing in a tuple crashes in `_prepareconfig`:
def test_invoke_with_tuple(self):
> pytest.main(("-h",))
src/_pytest/config/__init__.py:82: in main
config = _prepareconfig(args, plugins)
src/_pytest/config/__init__.py:229: in _prepareconfig
return pluginmanager.hook.pytest_cmdline_parse(
…
src/_pytest/helpconfig.py:98: in pytest_cmdline_parse
config = outcome.get_result() # type: Config
src/_pytest/config/__init__.py:808: in pytest_cmdline_parse
self.parse(args)
src/_pytest/config/__init__.py:1017: in parse
self._preparse(args, addopts=addopts)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def _preparse(self, args: List[str], addopts: bool = True) -> None:
…
if addopts:
ini_addopts = self.getini("addopts")
if ini_addopts:
> args[:] = self._validate_args(ini_addopts, "via addopts config") + args
E TypeError: can only concatenate list (not "tuple") to list
addopts = True
args = ('-h',)
env_addopts = ''
ini_addopts = ['-rfEX', …]
src/_pytest/config/__init__.py:956: TypeError: can only concatenate list (not "tuple") to list
Might be worth handling (converting it to a list for example), but it
was documented to be a list to begin with when removing support for
strings (a7e401656
).
This commit is contained in:
parent
7c0d1cad40
commit
478a244f5e
|
@ -233,13 +233,15 @@ def get_plugin_manager():
|
||||||
return get_config().pluginmanager
|
return get_config().pluginmanager
|
||||||
|
|
||||||
|
|
||||||
def _prepareconfig(args=None, plugins=None):
|
def _prepareconfig(
|
||||||
|
args: Optional[Union[py.path.local, List[str]]] = None, plugins=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):
|
||||||
args = [str(args)]
|
args = [str(args)]
|
||||||
elif not isinstance(args, (tuple, list)):
|
elif not isinstance(args, list):
|
||||||
msg = "`args` parameter expected to be a list or tuple of strings, got: {!r} (type: {})"
|
msg = "`args` parameter expected to be a list of strings, got: {!r} (type: {})"
|
||||||
raise TypeError(msg.format(args, type(args)))
|
raise TypeError(msg.format(args, type(args)))
|
||||||
|
|
||||||
config = get_config(args, plugins)
|
config = get_config(args, plugins)
|
||||||
|
|
|
@ -606,7 +606,7 @@ class TestInvocationVariants:
|
||||||
|
|
||||||
def test_invoke_with_invalid_type(self):
|
def test_invoke_with_invalid_type(self):
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
TypeError, match="expected to be a list or tuple of strings, got: '-h'"
|
TypeError, match="expected to be a list of strings, got: '-h'"
|
||||||
):
|
):
|
||||||
pytest.main("-h")
|
pytest.main("-h")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue