From 306a50e344522a3f321d49d95488f457975fa553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Wed, 31 Jan 2024 11:31:26 +0100 Subject: [PATCH 1/2] test_dataset: remove incorrect pytest.warns() to fix pytest-8 Remove two incorrect `pytest.warns()` assertions to fix test failures with pytest-8.0.0. Prior to this version, an exception raised would cause `pytest.warns()` to be ignored. This way fixed in 8.0.0, and now warnings must actually be emitted prior to the exception. In `test_drop_index_labels()`, the exception is raised at the very beginning of the function, prior to the deprecation warning. In `test_rename_multiindex()`, the warning is not emitted at all (it is not applicable to the call in question). --- xarray/tests/test_dataset.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index fa9448f2f4..77d172f00b 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -2724,8 +2724,7 @@ def test_drop_index_labels(self) -> None: assert_identical(data, actual) with pytest.raises(ValueError): - with pytest.warns(DeprecationWarning): - data.drop(["c"], dim="x", errors="wrong_value") # type: ignore[arg-type] + data.drop(["c"], dim="x", errors="wrong_value") # type: ignore[arg-type] with pytest.warns(DeprecationWarning): actual = data.drop(["a", "b", "c"], "x", errors="ignore") @@ -3159,8 +3158,7 @@ def test_rename_multiindex(self) -> None: original.rename({"a": "x"}) with pytest.raises(ValueError, match=r"'b' conflicts"): - with pytest.warns(UserWarning, match="does not create an index anymore"): - original.rename({"a": "b"}) + original.rename({"a": "b"}) def test_rename_perserve_attrs_encoding(self) -> None: # test propagate attrs/encoding to new variable(s) created from Index object From 3bc5abf4da35edda1f0c3e9e0d53e39331c1a76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Wed, 31 Jan 2024 11:35:04 +0100 Subject: [PATCH 2/2] test_groupby: Clear recorded warnings for pytest-8 compatibility Clear the warnings recorded during the `pytest.warns()` use in `test_groupby_dims_property`, to fix test failures with pytest-8.0.0. Prior to this version, `pytest.warns()` invocation used to capture all warnings. Now it only captures the warnings that match the arguments, and the remaining warnings are re-emitted and therefore caught by `recwarn` fixture. To provide compatibility with both versions of pytest, clear the recorded warnings immediately after `pytest.warns()`. Fixes #8681 --- xarray/tests/test_groupby.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xarray/tests/test_groupby.py b/xarray/tests/test_groupby.py index 25fabd5e2b..b65c01fe76 100644 --- a/xarray/tests/test_groupby.py +++ b/xarray/tests/test_groupby.py @@ -67,6 +67,8 @@ def test_groupby_dims_property(dataset, recwarn) -> None: with pytest.warns(UserWarning, match="The `squeeze` kwarg"): assert dataset.groupby("x").dims == dataset.isel(x=1).dims assert dataset.groupby("y").dims == dataset.isel(y=1).dims + # in pytest-8, pytest.warns() no longer clears all warnings + recwarn.clear() # when squeeze=False, no warning should be raised assert tuple(dataset.groupby("x", squeeze=False).dims) == tuple(