diff --git a/pyproject.toml b/pyproject.toml index 8432d5d2b..a4139a5c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta" write_to = "src/_pytest/_version.py" [tool.pytest.ini_options] -#minversion = "2.0" +minversion = "2.0" addopts = "-rfEX -p pytester --strict-markers" python_files = ["test_*.py", "*_test.py", "testing/python/*.py"] python_classes = ["Test", "Acceptance"] diff --git a/src/_pytest/recwarn.py b/src/_pytest/recwarn.py index 9d8816556..5484d6f3b 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -206,20 +206,17 @@ class WarningsRecorder(warnings.catch_warnings): # type:ignore[type-arg] return len(self._list) def pop(self, cls: Type[Warning] = Warning) -> "warnings.WarningMessage": - """Pop the first recorded warning which is an instance of ``cls``. - - But not an instance of a child class of any other match. + """Pop the first recorded warning which is an instance of ``cls``, + but not an instance of a child class of any other match. Raises ``AssertionError`` if there is no match. - """ - - best_idx = None + best_idx: Optional[int] = None for i, w in enumerate(self._list): if w.category == cls: return self._list.pop(i) # exact match, stop looking if issubclass(w.category, cls) and ( best_idx is None - or not issubclass(w.category, self._list[best_idx].category) # type: ignore[unreachable] + or not issubclass(w.category, self._list[best_idx].category) ): best_idx = i if best_idx is not None: diff --git a/testing/test_recwarn.py b/testing/test_recwarn.py index 3a35c255e..8b70c8aff 100644 --- a/testing/test_recwarn.py +++ b/testing/test_recwarn.py @@ -54,7 +54,7 @@ class TestSubclassWarningPop: for warn in _warnings: warnings.warn(f"Warning {warn().__repr__()}", warn) - def test_pop(self): + def test_pop_finds_exact_match(self): with pytest.warns((self.ParentWarning, self.ChildWarning)) as record: self.raise_warnings_from_list( [self.ChildWarning, self.ParentWarning, self.ChildOfChildWarning] @@ -64,13 +64,13 @@ class TestSubclassWarningPop: _warn = record.pop(self.ParentWarning) assert _warn.category is self.ParentWarning - def test_pop_raises(self): + def test_pop_raises_if_no_match(self): with pytest.raises(AssertionError): with pytest.warns(self.ParentWarning) as record: self.raise_warnings_from_list([self.ParentWarning]) record.pop(self.ChildOfChildWarning) - def test_pop_most_recent(self): + def test_pop_finds_best_inexact_match(self): with pytest.warns(self.ParentWarning) as record: self.raise_warnings_from_list( [self.ChildOfChildWarning, self.ChildWarning, self.ChildOfChildWarning]