Merge pull request #7490 from bluetech/fix-dynamic-runtest-xfail
skipping: fix dynamic xfail mark added in runtest not respected
This commit is contained in:
commit
fe1fcfd081
|
@ -231,17 +231,14 @@ unexpectedsuccess_key = StoreKey[str]()
|
||||||
|
|
||||||
@hookimpl(tryfirst=True)
|
@hookimpl(tryfirst=True)
|
||||||
def pytest_runtest_setup(item: Item) -> None:
|
def pytest_runtest_setup(item: Item) -> None:
|
||||||
item._store[skipped_by_mark_key] = False
|
|
||||||
|
|
||||||
skipped = evaluate_skip_marks(item)
|
skipped = evaluate_skip_marks(item)
|
||||||
|
item._store[skipped_by_mark_key] = skipped is not None
|
||||||
if skipped:
|
if skipped:
|
||||||
item._store[skipped_by_mark_key] = True
|
|
||||||
skip(skipped.reason)
|
skip(skipped.reason)
|
||||||
|
|
||||||
if not item.config.option.runxfail:
|
item._store[xfailed_key] = xfailed = evaluate_xfail_marks(item)
|
||||||
item._store[xfailed_key] = xfailed = evaluate_xfail_marks(item)
|
if xfailed and not item.config.option.runxfail and not xfailed.run:
|
||||||
if xfailed and not xfailed.run:
|
xfail("[NOTRUN] " + xfailed.reason)
|
||||||
xfail("[NOTRUN] " + xfailed.reason)
|
|
||||||
|
|
||||||
|
|
||||||
@hookimpl(hookwrapper=True)
|
@hookimpl(hookwrapper=True)
|
||||||
|
@ -250,12 +247,16 @@ def pytest_runtest_call(item: Item) -> Generator[None, None, None]:
|
||||||
if xfailed is None:
|
if xfailed is None:
|
||||||
item._store[xfailed_key] = xfailed = evaluate_xfail_marks(item)
|
item._store[xfailed_key] = xfailed = evaluate_xfail_marks(item)
|
||||||
|
|
||||||
if not item.config.option.runxfail:
|
if xfailed and not item.config.option.runxfail and not xfailed.run:
|
||||||
if xfailed and not xfailed.run:
|
xfail("[NOTRUN] " + xfailed.reason)
|
||||||
xfail("[NOTRUN] " + xfailed.reason)
|
|
||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
# The test run may have added an xfail mark dynamically.
|
||||||
|
xfailed = item._store.get(xfailed_key, None)
|
||||||
|
if xfailed is None:
|
||||||
|
item._store[xfailed_key] = xfailed = evaluate_xfail_marks(item)
|
||||||
|
|
||||||
|
|
||||||
@hookimpl(hookwrapper=True)
|
@hookimpl(hookwrapper=True)
|
||||||
def pytest_runtest_makereport(item: Item, call: CallInfo[None]):
|
def pytest_runtest_makereport(item: Item, call: CallInfo[None]):
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from _pytest.pytester import Testdir
|
||||||
from _pytest.runner import runtestprotocol
|
from _pytest.runner import runtestprotocol
|
||||||
from _pytest.skipping import evaluate_skip_marks
|
from _pytest.skipping import evaluate_skip_marks
|
||||||
from _pytest.skipping import evaluate_xfail_marks
|
from _pytest.skipping import evaluate_xfail_marks
|
||||||
|
@ -425,6 +426,33 @@ class TestXFail:
|
||||||
result = testdir.runpytest(p)
|
result = testdir.runpytest(p)
|
||||||
result.stdout.fnmatch_lines(["*1 xfailed*"])
|
result.stdout.fnmatch_lines(["*1 xfailed*"])
|
||||||
|
|
||||||
|
def test_dynamic_xfail_set_during_runtest_failed(self, testdir: Testdir) -> None:
|
||||||
|
# Issue #7486.
|
||||||
|
p = testdir.makepyfile(
|
||||||
|
"""
|
||||||
|
import pytest
|
||||||
|
def test_this(request):
|
||||||
|
request.node.add_marker(pytest.mark.xfail(reason="xfail"))
|
||||||
|
assert 0
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest(p)
|
||||||
|
result.assert_outcomes(xfailed=1)
|
||||||
|
|
||||||
|
def test_dynamic_xfail_set_during_runtest_passed_strict(
|
||||||
|
self, testdir: Testdir
|
||||||
|
) -> None:
|
||||||
|
# Issue #7486.
|
||||||
|
p = testdir.makepyfile(
|
||||||
|
"""
|
||||||
|
import pytest
|
||||||
|
def test_this(request):
|
||||||
|
request.node.add_marker(pytest.mark.xfail(reason="xfail", strict=True))
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest(p)
|
||||||
|
result.assert_outcomes(failed=1)
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"expected, actual, matchline",
|
"expected, actual, matchline",
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue