Merge pull request #11991 from bluetech/warns-fix
recwarn: fix pytest.warns handling of Warnings with multiple arguments
This commit is contained in:
		
						commit
						fbe18fc7a9
					
				| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					Fix regression with :func:`pytest.warns` using custom warning subclasses which have more than one parameter in their `__init__`.
 | 
				
			||||||
| 
						 | 
					@ -334,10 +334,10 @@ class WarningsChecker(WarningsRecorder):
 | 
				
			||||||
            for w in self:
 | 
					            for w in self:
 | 
				
			||||||
                if not self.matches(w):
 | 
					                if not self.matches(w):
 | 
				
			||||||
                    warnings.warn_explicit(
 | 
					                    warnings.warn_explicit(
 | 
				
			||||||
                        str(w.message),
 | 
					                        message=w.message,
 | 
				
			||||||
                        w.message.__class__,  # type: ignore[arg-type]
 | 
					                        category=w.category,
 | 
				
			||||||
                        w.filename,
 | 
					                        filename=w.filename,
 | 
				
			||||||
                        w.lineno,
 | 
					                        lineno=w.lineno,
 | 
				
			||||||
                        module=w.__module__,
 | 
					                        module=w.__module__,
 | 
				
			||||||
                        source=w.source,
 | 
					                        source=w.source,
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -581,3 +581,17 @@ def test_raise_type_error_on_invalid_warning_message_cpython() -> None:
 | 
				
			||||||
        with warnings.catch_warnings():
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
            warnings.filterwarnings("ignore", "test")
 | 
					            warnings.filterwarnings("ignore", "test")
 | 
				
			||||||
            warnings.warn(1)  # type: ignore
 | 
					            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))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue