Skip to content

Commit 7f2abae

Browse files
committed
add re_emit keyword
1 parent 8a6446d commit 7f2abae

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/_pytest/recwarn.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ def warns( # noqa: F811
108108
expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]] = Warning,
109109
*args: Any,
110110
match: Optional[Union[str, Pattern[str]]] = None,
111+
re_emit: bool = False,
111112
**kwargs: Any,
112113
) -> Union["WarningsChecker", Any]:
113114
r"""Assert that code raises a particular class of warning.
@@ -158,12 +159,14 @@ def warns( # noqa: F811
158159
f"Unexpected keyword arguments passed to pytest.warns: {argnames}"
159160
"\nUse context-manager form instead?"
160161
)
161-
return WarningsChecker(expected_warning, match_expr=match, _ispytest=True)
162+
return WarningsChecker(
163+
expected_warning, match_expr=match, _ispytest=True, re_emit=re_emit
164+
)
162165
else:
163166
func = args[0]
164167
if not callable(func):
165168
raise TypeError(f"{func!r} object (type: {type(func)}) must be callable")
166-
with WarningsChecker(expected_warning, _ispytest=True):
169+
with WarningsChecker(expected_warning, _ispytest=True, re_emit=re_emit):
167170
return func(*args[1:], **kwargs)
168171

169172

@@ -256,6 +259,7 @@ def __init__(
256259
match_expr: Optional[Union[str, Pattern[str]]] = None,
257260
*,
258261
_ispytest: bool = False,
262+
re_emit: bool = False,
259263
) -> None:
260264
check_ispytest(_ispytest)
261265
super().__init__(_ispytest=True)
@@ -276,6 +280,7 @@ def __init__(
276280

277281
self.expected_warning = expected_warning_tup
278282
self.match_expr = match_expr
283+
self.re_emit = re_emit
279284

280285
def __exit__(
281286
self,
@@ -318,7 +323,8 @@ def re_emit(remove=None):
318323
for r in self:
319324
if issubclass(r.category, self.expected_warning):
320325
if re.compile(self.match_expr).search(str(r.message)):
321-
re_emit(r)
326+
if self.re_emit:
327+
re_emit(r)
322328
break
323329
else:
324330
fail(
@@ -328,4 +334,5 @@ def re_emit(remove=None):
328334
Emitted warnings: {found_str()}"""
329335
)
330336
else:
331-
re_emit()
337+
if self.re_emit:
338+
re_emit()

testing/test_recwarn.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,12 +406,12 @@ def test_warns_context_manager_with_kwargs(self) -> None:
406406

407407
def test_reemit_no_match(self) -> None:
408408
with pytest.warns(DeprecationWarning):
409-
with pytest.warns(UserWarning):
409+
with pytest.warns(UserWarning, re_emit=True):
410410
warnings.warn("my warning", UserWarning)
411411
warnings.warn("some deprecation warning", DeprecationWarning)
412412

413413
def test_reemit_with_match(self) -> None:
414414
with pytest.warns(DeprecationWarning):
415-
with pytest.warns(UserWarning, match="my warning"):
415+
with pytest.warns(UserWarning, match="my warning", re_emit=True):
416416
warnings.warn("my warning", UserWarning)
417417
warnings.warn("some deprecation warning", DeprecationWarning)

0 commit comments

Comments
 (0)