Skip to content

Commit

Permalink
recwarn: fix pytest.warns handling of Warnings with multiple arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
reaganjlee authored and flying-sheep committed Apr 9, 2024
1 parent 38f49d0 commit 64da6dc
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog/11906.bugfix.rst
@@ -0,0 +1 @@
Fix regression with :func:`pytest.warns` using custom warning subclasses which have more than one parameter in their `__init__`.
8 changes: 4 additions & 4 deletions src/_pytest/recwarn.py
Expand Up @@ -334,10 +334,10 @@ def found_str() -> str:
for w in self:
if not self.matches(w):
warnings.warn_explicit(
str(w.message),
w.message.__class__, # type: ignore[arg-type]
w.filename,
w.lineno,
message=w.message,
category=w.category,
filename=w.filename,
lineno=w.lineno,
module=w.__module__,
source=w.source,
)
Expand Down
14 changes: 14 additions & 0 deletions testing/test_recwarn.py
Expand Up @@ -581,3 +581,17 @@ def test_raise_type_error_on_invalid_warning_message_cpython() -> None:
with warnings.catch_warnings():
warnings.filterwarnings("ignore", "test")
warnings.warn(1) # type: ignore


def test_multiple_arg_custom_warning() -> None:
"""Test for issue #11906."""

class CustomWarning(UserWarning):
def __init__(self, a, b):
pass

with pytest.warns(CustomWarning):
with pytest.raises(pytest.fail.Exception, match="DID NOT WARN"):
with pytest.warns(CustomWarning, match="not gonna match"):
a, b = 1, 2
warnings.warn(CustomWarning(a, b))

0 comments on commit 64da6dc

Please sign in to comment.