Merge pull request #4523 from blueyed/addopts-separate
Ensure that PYTEST_ADDOPTS and addopts ini values are valid by themselves.
This commit is contained in:
commit
abb0dfcfa3
|
@ -0,0 +1 @@
|
||||||
|
Validate arguments from the ``PYTEST_ADDOPTS`` environment variable and the ``addopts`` ini option separately.
|
|
@ -784,12 +784,21 @@ class Config(object):
|
||||||
for name in _iter_rewritable_modules(package_files):
|
for name in _iter_rewritable_modules(package_files):
|
||||||
hook.mark_rewrite(name)
|
hook.mark_rewrite(name)
|
||||||
|
|
||||||
|
def _validate_args(self, args):
|
||||||
|
"""Validate known args."""
|
||||||
|
self._parser.parse_known_and_unknown_args(
|
||||||
|
args, namespace=copy.copy(self.option)
|
||||||
|
)
|
||||||
|
return args
|
||||||
|
|
||||||
def _preparse(self, args, addopts=True):
|
def _preparse(self, args, addopts=True):
|
||||||
if addopts:
|
if addopts:
|
||||||
args[:] = shlex.split(os.environ.get("PYTEST_ADDOPTS", "")) + args
|
env_addopts = os.environ.get("PYTEST_ADDOPTS", "")
|
||||||
|
if len(env_addopts):
|
||||||
|
args[:] = self._validate_args(shlex.split(env_addopts)) + args
|
||||||
self._initini(args)
|
self._initini(args)
|
||||||
if addopts:
|
if addopts:
|
||||||
args[:] = self.getini("addopts") + args
|
args[:] = self._validate_args(self.getini("addopts")) + args
|
||||||
self._checkversion()
|
self._checkversion()
|
||||||
self._consider_importhook(args)
|
self._consider_importhook(args)
|
||||||
self.pluginmanager.consider_preparse(args)
|
self.pluginmanager.consider_preparse(args)
|
||||||
|
|
|
@ -1082,6 +1082,33 @@ class TestOverrideIniArgs(object):
|
||||||
config._preparse([], addopts=True)
|
config._preparse([], addopts=True)
|
||||||
assert config._override_ini == ["cache_dir=%s" % cache_dir]
|
assert config._override_ini == ["cache_dir=%s" % cache_dir]
|
||||||
|
|
||||||
|
def test_addopts_from_env_not_concatenated(self, monkeypatch):
|
||||||
|
"""PYTEST_ADDOPTS should not take values from normal args (#4265)."""
|
||||||
|
from _pytest.config import get_config
|
||||||
|
|
||||||
|
monkeypatch.setenv("PYTEST_ADDOPTS", "-o")
|
||||||
|
config = get_config()
|
||||||
|
with pytest.raises(SystemExit) as excinfo:
|
||||||
|
config._preparse(["cache_dir=ignored"], addopts=True)
|
||||||
|
assert excinfo.value.args[0] == _pytest.main.EXIT_USAGEERROR
|
||||||
|
|
||||||
|
def test_addopts_from_ini_not_concatenated(self, testdir):
|
||||||
|
"""addopts from ini should not take values from normal args (#4265)."""
|
||||||
|
testdir.makeini(
|
||||||
|
"""
|
||||||
|
[pytest]
|
||||||
|
addopts=-o
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest("cache_dir=ignored")
|
||||||
|
result.stderr.fnmatch_lines(
|
||||||
|
[
|
||||||
|
"%s: error: argument -o/--override-ini: expected one argument"
|
||||||
|
% (testdir.request.config._parser.optparser.prog,)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
assert result.ret == _pytest.main.EXIT_USAGEERROR
|
||||||
|
|
||||||
def test_override_ini_does_not_contain_paths(self):
|
def test_override_ini_does_not_contain_paths(self):
|
||||||
"""Check that -o no longer swallows all options after it (#3103)"""
|
"""Check that -o no longer swallows all options after it (#3103)"""
|
||||||
from _pytest.config import get_config
|
from _pytest.config import get_config
|
||||||
|
|
Loading…
Reference in New Issue