diff --git a/raster/r.in.ascii/tests/r_in_ascii_test.py b/raster/r.in.ascii/tests/r_in_ascii_test.py new file mode 100644 index 00000000000..ece3f1b3e51 --- /dev/null +++ b/raster/r.in.ascii/tests/r_in_ascii_test.py @@ -0,0 +1,83 @@ +import io +import os + +import pytest + +import grass.script as gs +from grass.tools import Tools + +INPUT_EXPLICIT_NULL = """north: 4299000.00 +south: 4247000.00 +east: 528000.00 +west: 500000.00 +rows: 10 +cols: 15 +null: -9999 + +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 -9999 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 -9999 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15""" + +INPUT_DEFAULT_NULL = """north: 220542 +south: 220528 +east: 638492 +west: 638478 +rows: 7 +cols: 7 +3 2 5 3 5 3 4 +1 4 5 5 5 * 4 +2 1 * 3 5 5 2 +4 2 4 4 4 5 4 +4 4 2 * 5 2 4 +1 2 1 1 2 2 2 +5 4 1 2 3 4 2""" + + +@pytest.fixture +def session(tmp_path): + """An isolated GRASS session with no maps.""" + project = tmp_path / "r_in_ascii_project" + gs.create_project(project) + with gs.setup.init(project, env=os.environ.copy()) as session: + yield session + + +def test_explicit_null_value(session): + """Cells matching the null= header become NULL, not data.""" + tools = Tools(session=session) + tools.g_region( + n=4299000.00, s=4247000.00, e=528000.00, w=500000.00, rows=10, cols=15 + ) + + tools.r_in_ascii( + input=io.StringIO(INPUT_EXPLICIT_NULL), output="ascii", type="CELL" + ) + + info = tools.r_info(map="ascii", format="json").json + assert info["min"] == 1 + assert info["max"] == 15 + + univar = tools.r_univar(map="ascii", format="json").json + assert univar["null_cells"] == 2 + + +def test_default_null_character(session): + """Without a null= header, a bare * marks a cell as NULL.""" + tools = Tools(session=session) + tools.g_region(n=220542, s=220528, e=638492, w=638478, rows=7, cols=7) + + tools.r_in_ascii(input=io.StringIO(INPUT_DEFAULT_NULL), output="ascii", type="CELL") + + info = tools.r_info(map="ascii", format="json").json + assert info["min"] == 1 + assert info["max"] == 5 + + univar = tools.r_univar(map="ascii", format="json").json + assert univar["null_cells"] == 3 diff --git a/raster/r.in.ascii/testsuite/data/input_ascii.txt b/raster/r.in.ascii/testsuite/data/input_ascii.txt deleted file mode 100644 index af1d0a476d7..00000000000 --- a/raster/r.in.ascii/testsuite/data/input_ascii.txt +++ /dev/null @@ -1,13 +0,0 @@ -north: 220542 -south: 220528 -east: 638492 -west: 638478 -rows: 7 -cols: 7 -3 2 5 3 5 3 4 -1 4 5 5 5 * 4 -2 1 * 3 5 5 2 -4 2 4 4 4 5 4 -4 4 2 * 5 2 4 -1 2 1 1 2 2 2 -5 4 1 2 3 4 2 diff --git a/raster/r.in.ascii/testsuite/test_r_in_ascii.py b/raster/r.in.ascii/testsuite/test_r_in_ascii.py deleted file mode 100644 index 8db06f83517..00000000000 --- a/raster/r.in.ascii/testsuite/test_r_in_ascii.py +++ /dev/null @@ -1,85 +0,0 @@ -""" -Name: r.in.ascii test -Purpose: Tests r.in.ascii and its flags/options. - -Author: Sunveer Singh, Google Code-in 2017 -Copyright: (C) 2017 by Sunveer Singh and the GRASS Development Team -Licence: This program is free software under the GNU General Public - License (>=v2). Read the file COPYING that comes with GRASS - for details. -""" - -from grass.gunittest.case import TestCase -from grass.gunittest.main import test - -INPUT_NOQUOTES = """north: 4299000.00 -south: 4247000.00 -east: 528000.00 -west: 500000.00 -rows: 10 -cols: 15 -null: -9999 - -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 """ - - -class SimpleCsvTestCase(TestCase): - ascii_test = "ascii" - - @classmethod - def setUpClass(cls): - """Use temporary region settings""" - cls.use_temp_region() - cls.runModule("g.region", n=4299000.00, s=4247000.00, e=528000.00, w=500000.00) - - @classmethod - def tearDownClass(cls): - cls.del_temp_region() - - def tearDown(self): - """Remove the raster map after each test method""" - self.runModule("g.remove", flags="f", type="raster", pattern=self.ascii_test) - - def test_no_text_delimeter(self): - """Test loading no quotes""" - self.assertModule( - "r.in.ascii", - input="-", - output=self.ascii_test, - type="CELL", - stdin_=INPUT_NOQUOTES, - ) - self.assertRasterMinMax( - map=self.ascii_test, - refmin=1, - refmax=15, - msg="ascii_test in degrees must be between 1 and 15", - ) - - def test_text_delimeter(self): - """Testing with external file""" - self.assertModule( - "r.in.ascii", - input="data/input_ascii.txt", - output=self.ascii_test, - type="CELL", - ) - self.assertRasterMinMax( - map=self.ascii_test, - refmin=1, - refmax=5, - msg="ascii_test in degrees must be between 1 and 5", - ) - - -if __name__ == "__main__": - test()