Skip to content

Commit b8e1e63

Browse files
authored
Merge pull request #554 from nicoddemus/fix-compat-pytest-master
2 parents bc0866f + b257571 commit b8e1e63

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

src/xdist/dsession.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,17 @@ def worker_logwarning(self, message, code, nodeid, fslocation):
277277
self.config.hook.pytest_logwarning.call_historic(kwargs=kwargs)
278278

279279
def worker_warning_captured(self, warning_message, when, item):
280-
"""Emitted when a node calls the pytest_logwarning hook."""
280+
"""Emitted when a node calls the pytest_warning_captured hook (deprecated in 6.0)."""
281281
kwargs = dict(warning_message=warning_message, when=when, item=item)
282282
self.config.hook.pytest_warning_captured.call_historic(kwargs=kwargs)
283283

284+
def worker_warning_recorded(self, warning_message, when, nodeid, location):
285+
"""Emitted when a node calls the pytest_warning_recorded hook."""
286+
kwargs = dict(
287+
warning_message=warning_message, when=when, nodeid=nodeid, location=location
288+
)
289+
self.config.hook.pytest_warning_recorded.call_historic(kwargs=kwargs)
290+
284291
def _clone_node(self, node):
285292
"""Return new node based on an existing one.
286293

src/xdist/remote.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,18 @@ def pytest_warning_captured(self, warning_message, when, item):
151151
item=None,
152152
)
153153

154+
# the pytest_warning_recorded hook was introduced in pytest 6.0
155+
if hasattr(_pytest.hookspec, "pytest_warning_recorded"):
156+
157+
def pytest_warning_recorded(self, warning_message, when, nodeid, location):
158+
self.sendevent(
159+
"warning_recorded",
160+
warning_message_data=serialize_warning_message(warning_message),
161+
when=when,
162+
nodeid=nodeid,
163+
location=location,
164+
)
165+
154166

155167
def serialize_warning_message(warning_message):
156168
if isinstance(warning_message.message, Warning):

src/xdist/workermanage.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,17 @@ def process_from_remote(self, eventcall): # noqa too complex
359359
when=kwargs["when"],
360360
item=kwargs["item"],
361361
)
362+
elif eventname == "warning_recorded":
363+
warning_message = unserialize_warning_message(
364+
kwargs["warning_message_data"]
365+
)
366+
self.notify_inproc(
367+
eventname,
368+
warning_message=warning_message,
369+
when=kwargs["when"],
370+
nodeid=kwargs["nodeid"],
371+
location=kwargs["location"],
372+
)
362373
else:
363374
raise ValueError("unknown event: {}".format(eventname))
364375
except KeyboardInterrupt:

testing/conftest.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@ def _divert_atexit(request, monkeypatch):
2222

2323
finalizers = []
2424

25-
def finish():
26-
while finalizers:
27-
finalizers.pop()()
25+
def fake_register(func, *args, **kwargs):
26+
finalizers.append((func, args, kwargs))
2827

29-
monkeypatch.setattr(atexit, "register", finalizers.append)
30-
request.addfinalizer(finish)
28+
monkeypatch.setattr(atexit, "register", fake_register)
29+
30+
yield
31+
32+
while finalizers:
33+
func, args, kwargs = finalizers.pop()
34+
func(*args, **kwargs)
3135

3236

3337
def pytest_addoption(parser):

0 commit comments

Comments
 (0)