1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """Test functions in grass.script.setup"""
- import multiprocessing
- import os
- import pytest
- import grass.script as gs
- import grass.script.setup as grass_setup
- # All init tests change the global environment, but when it really matters,
- # we use a separate process.
- # Ideally, the functions would support env parameter and the test
- # would mostly use that.
- def run_in_subprocess(function):
- """Run function in a separate process
- The function must take a Queue and put its result there.
- The result is then returned from this function.
- """
- queue = multiprocessing.Queue()
- process = multiprocessing.Process(target=function, args=(queue,))
- process.start()
- result = queue.get()
- process.join()
- return result
- def test_init_as_context_manager(tmp_path):
- """Check that init function return value works as a context manager"""
- location = "test"
- gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access
- with grass_setup.init(tmp_path / location):
- gs.run_command("g.region", flags="p")
- session_file = os.environ["GISRC"]
- assert not os.path.exists(session_file)
- def test_init_session_finish(tmp_path):
- """Check that init works with finish on the returned session object"""
- location = "test"
- gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access
- session = grass_setup.init(tmp_path / location)
- gs.run_command("g.region", flags="p")
- session_file = os.environ["GISRC"]
- session.finish()
- with pytest.raises(ValueError):
- session.finish()
- assert not session.active
- assert not os.path.exists(session_file)
- def test_init_finish_global_functions(tmp_path):
- """Check that init and finish global functions work"""
- location = "test"
- gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access
- grass_setup.init(tmp_path / location)
- gs.run_command("g.region", flags="p")
- session_file = os.environ["GISRC"]
- grass_setup.finish()
- assert not os.path.exists(session_file)
- def test_init_finish_global_functions_capture_strerr(tmp_path):
- """Check that init and finish global functions work"""
- def init_finish(queue):
- gs.set_capture_stderr(True)
- location = "test"
- gs.core._create_location_xy( # pylint: disable=protected-access
- tmp_path, location
- )
- grass_setup.init(tmp_path / location)
- gs.run_command("g.region", flags="p")
- queue.put(os.environ["GISRC"])
- grass_setup.finish()
- session_file = run_in_subprocess(init_finish)
- assert session_file, "Expected file name from the subprocess"
- assert not os.path.exists(session_file), "Session file not deleted"
|