diff --git a/general/g.list/tests/conftest.py b/general/g.list/tests/conftest.py new file mode 100644 index 00000000000..40c1bced310 --- /dev/null +++ b/general/g.list/tests/conftest.py @@ -0,0 +1,57 @@ +import os +import grass.script as gs +import pytest + +TEST_MAPSETS = ["test_1", "test_2"] + + +@pytest.fixture +def simple_dataset(tmp_path_factory, monkeypatch): + """Set up a GRASS session for the tests.""" + tmp_path = tmp_path_factory.mktemp("simple_dataset") + project = "test_project" + + # Create a test project + gs.create_project(tmp_path, project) + + # Initialize the GRASS session + with gs.setup.init(tmp_path / project, env=os.environ.copy()) as session: + for key, value in session.env.items(): + monkeypatch.setenv(key, value) + + gs.run_command("g.region", rows=3, cols=3, env=session.env) + + # Create Mock Mapsets and data in each + for mapset in TEST_MAPSETS: + gs.run_command( + "g.mapset", project=project, mapset=mapset, flags="c", env=session.env + ) + + # Create a raster in this mapset + gs.mapcalc(f"raster_{mapset} = int(row())", env=session.env) + gs.run_command( + "r.support", + map=f"raster_{mapset}", + title=f"Raster title {mapset}", + env=session.env, + ) + + # Create a vector in this mapset + gs.run_command( + "v.mkgrid", + map=f"vector_{mapset}", + grid=[10, 10], + type="point", + env=session.env, + ) + gs.run_command( + "v.support", + map=f"vector_{mapset}", + map_name=f"Vector title {mapset}", + env=session.env, + ) + + # Set current mapset to test_1 + gs.run_command("g.mapset", project=project, mapset="test_1", env=session.env) + + yield session diff --git a/general/g.list/tests/g_list_test.py b/general/g.list/tests/g_list_test.py new file mode 100644 index 00000000000..413d2a27f9a --- /dev/null +++ b/general/g.list/tests/g_list_test.py @@ -0,0 +1,117 @@ +import grass.script as gs + + +def test_default_output(simple_dataset): + """Test default output of g.list.""" + # Current mapset only + actual = gs.read_command("g.list", type="all", env=simple_dataset.env).splitlines() + expected = ["raster_test_1", "vector_test_1"] + assert actual == expected + + # All mapsets + actual = gs.read_command( + "g.list", type="all", mapset="*", env=simple_dataset.env + ).splitlines() + expected = [ + "raster_test_1", + "raster_test_2", + "vector_test_1", + "vector_test_2", + ] + assert actual == expected + + +def test_data_types_output(simple_dataset): + """Test g.list with t flag.""" + # Current mapset only + actual = gs.read_command( + "g.list", type="all", flags="t", env=simple_dataset.env + ).splitlines() + expected = ["raster/raster_test_1", "vector/vector_test_1"] + assert actual == expected + + # All mapsets + actual = gs.read_command( + "g.list", type="all", flags="t", mapset="*", env=simple_dataset.env + ).splitlines() + expected = [ + "raster/raster_test_1", + "raster/raster_test_2", + "vector/vector_test_1", + "vector/vector_test_2", + ] + assert actual == expected + + +def test_full_map_output(simple_dataset): + """Test g.list with m flag.""" + # Current mapset only + actual = gs.read_command( + "g.list", type="all", flags="m", env=simple_dataset.env + ).splitlines() + expected = ["raster_test_1@test_1", "vector_test_1@test_1"] + assert actual == expected + + # All mapsets + actual = gs.read_command( + "g.list", type="all", flags="m", mapset="*", env=simple_dataset.env + ).splitlines() + expected = [ + "raster_test_1@test_1", + "raster_test_2@test_2", + "vector_test_1@test_1", + "vector_test_2@test_2", + ] + assert actual == expected + + +def test_human_readable_output(simple_dataset): + """Test g.list with p flag.""" + # Current mapset only + actual = gs.read_command( + "g.list", type="all", flags="p", env=simple_dataset.env + ).splitlines() + expected = [ + "raster files available in mapset :", + "raster_test_1", + "no 3D raster files available in current mapset", + "vector files available in mapset :", + "vector_test_1", + "no label files available in current mapset", + "no region definition files available in current mapset", + "no imagery group files available in current mapset", + ] + for line in expected: + assert line in actual, f"Expected line not found: {line}" + + # All mapsets + actual = gs.read_command( + "g.list", type="all", flags="p", mapset="*", env=simple_dataset.env + ).splitlines() + expected = [ + "raster files available in mapset :", + "raster_test_1", + "raster files available in mapset :", + "raster_test_2", + "no 3D raster files available in current mapset", + "vector files available in mapset :", + "vector_test_1", + "vector files available in mapset :", + "vector_test_2", + "no label files available in current mapset", + "no region definition files available in current mapset", + "no imagery group files available in current mapset", + ] + for line in expected: + assert line in actual, f"Expected line not found: {line}" + + +def test_verbose_listing_output(simple_dataset): + """Test g.list with f flag.""" + actual = gs.read_command( + "g.list", type="all", flags="f", mapset="*", env=simple_dataset.env + ).splitlines() + expected = gs.read_command( + "r.info", map="raster_test_1", env=simple_dataset.env + ).splitlines() + assert expected == actual