Skip to content

Commit fe878b0

Browse files
committed
Fix wildcard skip/xfail ids not marking all child tests
1 parent 738efc4 commit fe878b0

File tree

1 file changed

+38
-18
lines changed

1 file changed

+38
-18
lines changed

conftest.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,30 +129,27 @@ def pytest_collection_modifyitems(config, items):
129129
id_ = line.strip("\n")
130130
xfail_ids.append(id_)
131131

132+
skip_id_matched = {id_: False for id_ in skip_ids}
133+
xfail_id_matched = {id_: False for id_ in xfail_ids}
134+
132135
disabled_exts = config.getoption("--disable-extension")
133136
disabled_dds = config.getoption("--disable-data-dependent-shapes")
134137
ci = config.getoption("--ci")
135-
# skip if specified in skips file
136-
for id_ in skip_ids:
137-
for item in items:
138-
if id_ in item.nodeid:
139-
item.add_marker(mark.skip(reason=f"skips file ({skips_file})"))
140-
break
141-
else:
142-
warnings.warn(f"Skip ID from {skips_file} doesn't appear to correspond to any tests: {id_!r}")
143-
144-
# xfail if specified in xfails file
145-
for id_ in xfail_ids:
146-
for item in items:
147-
if id_ in item.nodeid:
148-
item.add_marker(mark.xfail(reason=f"xfails file ({xfails_file})"))
149-
break
150-
else:
151-
warnings.warn(f"XFAIL ID from {xfails_file} doesn't appear to correspond to any tests: {id_!r}")
152138

153139
for item in items:
154140
markers = list(item.iter_markers())
155-
141+
# skip if specified in skips file
142+
for id_ in skip_ids:
143+
if item.nodeid.startswith(id_):
144+
item.add_marker(mark.skip(reason=f"--skips-file ({skips_file})"))
145+
skip_id_matched[id_] = True
146+
break
147+
# xfail if specified in xfails file
148+
for id_ in xfail_ids:
149+
if item.nodeid.startswith(id_):
150+
item.add_marker(mark.xfail(reason=f"--xfails-file ({xfails_file})"))
151+
xfail_id_matched[id_] = True
152+
break
156153
# skip if disabled or non-existent extension
157154
ext_mark = next((m for m in markers if m.name == "xp_extension"), None)
158155
if ext_mark is not None:
@@ -186,3 +183,26 @@ def pytest_collection_modifyitems(config, items):
186183
reason=f"requires ARRAY_API_TESTS_VERSION=>{min_version}"
187184
)
188185
)
186+
187+
bad_ids_end_msg = (
188+
"Note the relevant tests might not of been collected by pytest, or "
189+
"another specified id might have already matched a test."
190+
)
191+
bad_skip_ids = [id_ for id_, matched in skip_id_matched.items() if not matched]
192+
if bad_skip_ids:
193+
f_bad_ids = "\n".join(f" {id_}" for id_ in bad_skip_ids)
194+
warnings.warn(
195+
f"{len(bad_skip_ids)} ids in skips file don't match any collected tests: \n"
196+
f"{f_bad_ids}\n"
197+
f"(skips file: {skips_file})\n"
198+
f"{bad_ids_end_msg}"
199+
)
200+
bad_xfail_ids = [id_ for id_, matched in xfail_id_matched.items() if not matched]
201+
if bad_xfail_ids:
202+
f_bad_ids = "\n".join(f" {id_}" for id_ in bad_xfail_ids)
203+
warnings.warn(
204+
f"{len(bad_xfail_ids)} ids in xfails file don't match any collected tests: \n"
205+
f"{f_bad_ids}\n"
206+
f"(xfails file: {xfails_file})\n"
207+
f"{bad_ids_end_msg}"
208+
)

0 commit comments

Comments
 (0)