fix #10342: put location into warning exceptions
as the warning systems own warn_explicit looses the information we add them explicitly to the warning exceptions
This commit is contained in:
parent
2be1b8f355
commit
14919c4bbb
|
@ -158,7 +158,7 @@ def warn_explicit_for(method: FunctionType, message: PytestWarning) -> None:
|
||||||
filename = inspect.getfile(method)
|
filename = inspect.getfile(method)
|
||||||
module = method.__module__
|
module = method.__module__
|
||||||
mod_globals = method.__globals__
|
mod_globals = method.__globals__
|
||||||
|
try:
|
||||||
warnings.warn_explicit(
|
warnings.warn_explicit(
|
||||||
message,
|
message,
|
||||||
type(message),
|
type(message),
|
||||||
|
@ -167,3 +167,5 @@ def warn_explicit_for(method: FunctionType, message: PytestWarning) -> None:
|
||||||
registry=mod_globals.setdefault("__warningregistry__", {}),
|
registry=mod_globals.setdefault("__warningregistry__", {}),
|
||||||
lineno=lineno,
|
lineno=lineno,
|
||||||
)
|
)
|
||||||
|
except Warning as w:
|
||||||
|
raise type(w)(f"{w}\n at {filename}:{lineno}") from None
|
||||||
|
|
|
@ -36,3 +36,11 @@ def test_pytest_warnings_repr_integration_test(pytester: Pytester) -> None:
|
||||||
)
|
)
|
||||||
result = pytester.runpytest()
|
result = pytester.runpytest()
|
||||||
result.stdout.fnmatch_lines(["E pytest.PytestWarning: some warning"])
|
result.stdout.fnmatch_lines(["E pytest.PytestWarning: some warning"])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.filterwarnings("error")
|
||||||
|
def test_warn_explicit_for_annotates_errors_with_location():
|
||||||
|
with pytest.raises(Warning, match="(?m)test\n at .*python_api.py:\\d+"):
|
||||||
|
warning_types.warn_explicit_for(
|
||||||
|
pytest.raises, warning_types.PytestWarning("test") # type: ignore
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue