Fix crash that happened under --runxfail -o empty_parameter_set_mark=xfail

This commit is contained in:
Gleb Nikonorov 2020-05-31 16:34:00 -04:00
parent 70b5bdf4ba
commit 0c1557e79a
2 changed files with 13 additions and 6 deletions

View File

@ -37,6 +37,9 @@ def get_empty_parameterset_mark(config, argnames, func):
if requested_mark in ("", None, "skip"):
mark = MARK_GEN.skip
elif requested_mark == "xfail":
if config.getoption("runxfail", default=False):
mark = MARK_GEN.skip
else:
mark = MARK_GEN.xfail(run=False)
elif requested_mark == "fail_at_collect":
f_name = func.__name__

View File

@ -885,15 +885,19 @@ class TestMarkDecorator:
assert md.kwargs == {"three": 3}
@pytest.mark.parametrize("mark", [None, "", "skip", "xfail"])
def test_parameterset_for_parametrize_marks(testdir, mark):
@pytest.mark.parametrize(
"mark, addopts",
[(None, ""), ("", ""), ("skip", ""), ("xfail", ""), ("xfail", "--runxfail")],
)
def test_parameterset_for_parametrize_marks(testdir, mark, addopts):
if mark is not None:
testdir.makeini(
"""
[pytest]
{}={}
addopts={}
""".format(
EMPTY_PARAMETERSET_OPTION, mark
EMPTY_PARAMETERSET_OPTION, mark, addopts
)
)
@ -902,7 +906,7 @@ def test_parameterset_for_parametrize_marks(testdir, mark):
pytest_configure(config)
result_mark = get_empty_parameterset_mark(config, ["a"], all)
if mark in (None, ""):
if mark in (None, "") or (mark == "xfail" and addopts == "--runxfail"):
# normalize to the requested name
mark = "skip"
assert result_mark.name == mark
@ -955,7 +959,7 @@ def test_parameterset_for_fail_at_collect(testdir):
def test_parameterset_for_parametrize_bad_markname(testdir):
with pytest.raises(pytest.UsageError):
test_parameterset_for_parametrize_marks(testdir, "bad")
test_parameterset_for_parametrize_marks(testdir, "bad", False)
def test_mark_expressions_no_smear(testdir):