"""Test of gis library environment management

@author Soeren Gebbert
"""
from grass.gunittest.case import TestCase
import grass.lib.gis as libgis


class GisLibraryTestEnv(TestCase):
    @classmethod
    def setUpClass(cls):
        libgis.G_gisinit("GisLibraryTestEnv")

    def test_gisrc(self):
        # File access
        libgis.G_setenv("TEST", "A")

        value = libgis.G_getenv("TEST")
        self.assertEqual(value, b"A")
        value = libgis.G_getenv2("TEST", libgis.G_VAR_GISRC)
        self.assertEqual(value, b"A")

        # In memory management
        libgis.G_setenv_nogisrc("TEST", "B")

        value = libgis.G_getenv_nofatal("TEST")
        self.assertEqual(value, b"B")
        value = libgis.G_getenv_nofatal2("TEST", libgis.G_VAR_GISRC)
        self.assertEqual(value, b"B")
        # Force reading
        libgis.G__read_gisrc_env()
        value = libgis.G_getenv("TEST")
        self.assertEqual(value, b"A")
        value = libgis.G_getenv2("TEST", libgis.G_VAR_GISRC)
        self.assertEqual(value, b"A")

    def test_switch_env(self):
        libgis.G_setenv_nogisrc("TEST", "SWITCH")
        libgis.G_setenv_nogisrc2("TEST", "SWITCH2", libgis.G_VAR_MAPSET)
        # Create alternative env
        libgis.G_create_alt_env()
        libgis.G_setenv_nogisrc("TEST", "TARGET")
        libgis.G_setenv_nogisrc2("TEST", "TARGET2", libgis.G_VAR_MAPSET)
        value = libgis.G_getenv("TEST")
        self.assertEqual(value, b"TARGET")
        value = libgis.G_getenv2("TEST", libgis.G_VAR_MAPSET)
        self.assertEqual(value, b"TARGET2")
        # Switch back to orig env
        libgis.G_switch_env()
        value = libgis.G_getenv("TEST")
        self.assertEqual(value, b"SWITCH")
        value = libgis.G_getenv2("TEST", libgis.G_VAR_MAPSET)
        self.assertEqual(value, b"SWITCH2")

    def test_mapset(self):
        # Mapset VAR file
        libgis.G_setenv2("TEST", "C", libgis.G_VAR_MAPSET)
        value = libgis.G_getenv2("TEST", libgis.G_VAR_MAPSET)
        self.assertEqual(value, b"C")

        libgis.G_setenv_nogisrc2("TEST", "D", libgis.G_VAR_MAPSET)
        value = libgis.G_getenv_nofatal2("TEST", libgis.G_VAR_MAPSET)
        self.assertEqual(value, b"D")
        # Force reading
        libgis.G__read_mapset_env()
        value = libgis.G_getenv2("TEST", libgis.G_VAR_MAPSET)
        self.assertEqual(value, b"C")


if __name__ == "__main__":
    from grass.gunittest.main import test

    test()
