fix(standard-tests): recognize parametrize-nested xfails in override check (#37613)

`test_no_overrides_DO_NOT_OVERRIDE` only treated an override as valid
when the method itself carried an `@pytest.mark.xfail(reason=...)`.
Overrides that re-parametrize a standard test and xfail only a subset of
cases via `pytest.param(..., marks=pytest.mark.xfail(...))` were
rejected.
This commit is contained in:
Mason Daugherty
2026-05-21 14:14:48 -05:00
committed by GitHub
parent 23d369e2f4
commit 269d628d9c

View File

@@ -46,10 +46,18 @@ class BaseStandardTests:
m = getattr(self.__class__, method) m = getattr(self.__class__, method)
if not hasattr(m, "pytestmark"): if not hasattr(m, "pytestmark"):
return False return False
marks = m.pytestmark for mark in m.pytestmark:
return any( if mark.name == "xfail" and mark.kwargs.get("reason"):
mark.name == "xfail" and mark.kwargs.get("reason") for mark in marks return True
) # Also accept xfail marks on individual `pytest.param` entries
# within a `parametrize` - supports xfailing only a subset of
# parametrized cases.
if mark.name == "parametrize" and len(mark.args) >= 2:
for param in mark.args[1]:
for inner in getattr(param, "marks", ()):
if inner.name == "xfail" and inner.kwargs.get("reason"):
return True
return False
overridden_not_xfail = [ overridden_not_xfail = [
method for method in overridden_tests if not is_xfail(method) method for method in overridden_tests if not is_xfail(method)