provide missing location parameter, and add type annotations to the hookspec
This commit is contained in:
parent
125b663f20
commit
d742b386c3
|
@ -11,6 +11,7 @@ from .deprecated import COLLECT_DIRECTORY_HOOK
|
||||||
from _pytest.compat import TYPE_CHECKING
|
from _pytest.compat import TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
import warnings
|
||||||
from _pytest.config import Config
|
from _pytest.config import Config
|
||||||
from _pytest.main import Session
|
from _pytest.main import Session
|
||||||
from _pytest.reports import BaseReport
|
from _pytest.reports import BaseReport
|
||||||
|
@ -653,7 +654,12 @@ def pytest_warning_captured(warning_message, when, item, location):
|
||||||
|
|
||||||
|
|
||||||
@hookspec(historic=True)
|
@hookspec(historic=True)
|
||||||
def pytest_warning_recorded(warning_message, when, nodeid, location):
|
def pytest_warning_recorded(
|
||||||
|
warning_message: "warnings.WarningMessage",
|
||||||
|
when: str,
|
||||||
|
nodeid: str,
|
||||||
|
location: Tuple[str, int, str],
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
Process a warning captured by the internal pytest warnings plugin.
|
Process a warning captured by the internal pytest warnings plugin.
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,12 @@ def catch_warnings_for_item(config, ihook, when, item):
|
||||||
kwargs=dict(warning_message=warning_message, when=when, item=item)
|
kwargs=dict(warning_message=warning_message, when=when, item=item)
|
||||||
)
|
)
|
||||||
ihook.pytest_warning_recorded.call_historic(
|
ihook.pytest_warning_recorded.call_historic(
|
||||||
kwargs=dict(warning_message=warning_message, nodeid=nodeid, when=when)
|
kwargs=dict(
|
||||||
|
warning_message=warning_message,
|
||||||
|
nodeid=nodeid,
|
||||||
|
when=when,
|
||||||
|
location=None,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -268,20 +269,49 @@ def test_warning_captured_hook(testdir):
|
||||||
collected = []
|
collected = []
|
||||||
|
|
||||||
class WarningCollector:
|
class WarningCollector:
|
||||||
def pytest_warning_recorded(self, warning_message, when, nodeid):
|
def pytest_warning_recorded(self, warning_message, when, nodeid, location):
|
||||||
collected.append((str(warning_message.message), when, nodeid))
|
collected.append((str(warning_message.message), when, nodeid, location))
|
||||||
|
|
||||||
result = testdir.runpytest(plugins=[WarningCollector()])
|
result = testdir.runpytest(plugins=[WarningCollector()])
|
||||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||||
|
|
||||||
expected = [
|
expected = [
|
||||||
("config warning", "config", ""),
|
(
|
||||||
("collect warning", "collect", ""),
|
"config warning",
|
||||||
("setup warning", "runtest", "test_warning_captured_hook.py::test_func"),
|
"config",
|
||||||
("call warning", "runtest", "test_warning_captured_hook.py::test_func"),
|
"",
|
||||||
("teardown warning", "runtest", "test_warning_captured_hook.py::test_func"),
|
(
|
||||||
|
r"/tmp/pytest-of-.+/pytest-\d+/test_warning_captured_hook0/conftest.py",
|
||||||
|
3,
|
||||||
|
"pytest_configure",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("collect warning", "collect", "", None),
|
||||||
|
("setup warning", "runtest", "test_warning_captured_hook.py::test_func", None),
|
||||||
|
("call warning", "runtest", "test_warning_captured_hook.py::test_func", None),
|
||||||
|
(
|
||||||
|
"teardown warning",
|
||||||
|
"runtest",
|
||||||
|
"test_warning_captured_hook.py::test_func",
|
||||||
|
None,
|
||||||
|
),
|
||||||
]
|
]
|
||||||
assert collected == expected, str(collected)
|
for index in range(len(expected)):
|
||||||
|
collected_result = collected[index]
|
||||||
|
expected_result = expected[index]
|
||||||
|
|
||||||
|
assert collected_result[0] == expected_result[0], str(collected)
|
||||||
|
assert collected_result[1] == expected_result[1], str(collected)
|
||||||
|
assert collected_result[2] == expected_result[2], str(collected)
|
||||||
|
|
||||||
|
if expected_result[3] is not None:
|
||||||
|
assert re.match(expected_result[3][0], collected_result[3][0]), str(
|
||||||
|
collected
|
||||||
|
)
|
||||||
|
assert collected_result[3][1] == expected_result[3][1], str(collected)
|
||||||
|
assert collected_result[3][2] == expected_result[3][2], str(collected)
|
||||||
|
else:
|
||||||
|
assert expected_result[3] == collected_result[3], str(collected)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.filterwarnings("always")
|
@pytest.mark.filterwarnings("always")
|
||||||
|
|
Loading…
Reference in New Issue