Skip to content

Commit 929be9f

Browse files
Merge pull request #59 from robertbaldyga/skip-defer
core: Introduce mechanism for deferring skips
2 parents 9a92c59 + 17f7983 commit 929be9f

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

core/test_run_utils.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,39 @@ def __generate_tests(cls, metafunc):
268268
TestRun.generate_tests = __generate_tests
269269

270270

271+
@classmethod
272+
def __post_collect(cls, items):
273+
for item in items:
274+
deferred_skips = []
275+
remaining_markers = []
276+
for marker in item.own_markers:
277+
if marker.name == "skip":
278+
deferred_skips.append(marker)
279+
elif marker.name == "skipif":
280+
condition = marker.args[0] if marker.args else False
281+
if condition:
282+
reason = marker.kwargs.get("reason", "")
283+
deferred_skips.append(pytest.mark.skip(reason=reason))
284+
else:
285+
remaining_markers.append(marker)
286+
if deferred_skips:
287+
item.own_markers = remaining_markers
288+
item._deferred_skips = deferred_skips
289+
290+
291+
TestRun.post_collect = __post_collect
292+
293+
294+
@classmethod
295+
def __post_setup(cls, item):
296+
for marker in getattr(item, "_deferred_skips", []):
297+
reason = marker.kwargs.get("reason", marker.args[0] if marker.args else "")
298+
pytest.skip(reason)
299+
300+
301+
TestRun.post_setup = __post_setup
302+
303+
271304
@classmethod
272305
def __addoption(cls, parser):
273306
parser.addoption("--parametrization-type", choices=["pair", "full"], default="pair")

0 commit comments

Comments
 (0)