From 0a385ac67a91de200a89fdda08cf345827089650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:47:56 +0000 Subject: [PATCH] grass.pygrass: Close RasterRow via context manager in region tests test_resampling_1 and test_resampling_2 called rast.close() as a bare statement after their assertions, so a failing assertion (or any other exception) would skip it, leaving the RasterRow open. This repo's own Region.set_raster_region() documents the consequence: "All raster objects must be closed or the process will be terminated." The next test in this file, test_resampling_to_numpy, calls exactly that method on every resampling step, so an open handle carried over from an earlier test crashes it with an unrelated-looking C-level FERROR instead of the real assertion failure ever being reported. Use `with rast:` instead, matching RasterRow's documented context manager support, so the raster is always closed, including when an assertion fails. Co-Authored-By: Claude Sonnet 5 --- .../raster/testsuite/test_raster_region.py | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/python/grass/pygrass/raster/testsuite/test_raster_region.py b/python/grass/pygrass/raster/testsuite/test_raster_region.py index 259c16c11f7..3c4e28e3289 100644 --- a/python/grass/pygrass/raster/testsuite/test_raster_region.py +++ b/python/grass/pygrass/raster/testsuite/test_raster_region.py @@ -39,16 +39,13 @@ def test_resampling_1(self): rast = RasterRow(self.name) rast.set_region(region) - rast.open(mode="r") - - self.assertCountEqual( - rast[0].tolist(), [22, 22, 22, 22, 22, 32, 32, 32, 32, 32] - ) - self.assertCountEqual( - rast[5].tolist(), [23, 23, 23, 23, 23, 33, 33, 33, 33, 33] - ) - - rast.close() + with rast: + self.assertCountEqual( + rast[0].tolist(), [22, 22, 22, 22, 22, 32, 32, 32, 32, 32] + ) + self.assertCountEqual( + rast[5].tolist(), [23, 23, 23, 23, 23, 33, 33, 33, 33, 33] + ) def test_resampling_2(self): region = Region() @@ -63,21 +60,18 @@ def test_resampling_2(self): rast = RasterRow(self.name) rast.set_region(region) - rast.open(mode="r") - - # [nan, nan, nan, nan, nan, nan, nan, nan] - # [nan, nan, nan, nan, nan, nan, nan, nan] - # [nan, nan, 11.0, 21.0, 31.0, 41.0, nan, nan] - # [nan, nan, 12.0, 22.0, 32.0, 42.0, nan, nan] - # [nan, nan, 13.0, 23.0, 33.0, 43.0, nan, nan] - # [nan, nan, 14.0, 24.0, 34.0, 44.0, nan, nan] - # [nan, nan, nan, nan, nan, nan, nan, nan] - # [nan, nan, nan, nan, nan, nan, nan, nan] - - self.assertCountEqual(rast[2].tolist()[2:6], [11.0, 21.0, 31.0, 41.0]) - self.assertCountEqual(rast[5].tolist()[2:6], [14.0, 24.0, 34.0, 44.0]) - - rast.close() + with rast: + # [nan, nan, nan, nan, nan, nan, nan, nan] + # [nan, nan, nan, nan, nan, nan, nan, nan] + # [nan, nan, 11.0, 21.0, 31.0, 41.0, nan, nan] + # [nan, nan, 12.0, 22.0, 32.0, 42.0, nan, nan] + # [nan, nan, 13.0, 23.0, 33.0, 43.0, nan, nan] + # [nan, nan, 14.0, 24.0, 34.0, 44.0, nan, nan] + # [nan, nan, nan, nan, nan, nan, nan, nan] + # [nan, nan, nan, nan, nan, nan, nan, nan] + + self.assertCountEqual(rast[2].tolist()[2:6], [11.0, 21.0, 31.0, 41.0]) + self.assertCountEqual(rast[5].tolist()[2:6], [14.0, 24.0, 34.0, 44.0]) def test_resampling_to_numpy(self): region = Region()