"""
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
from grass.script.core import read_command

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 """

INPUT_TSV = """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 """

INPUT_UNCOMMON = """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",
        )

    def test_tsv(self):
        """Test loading TSV"""
        self.assertModule(
            "r.in.ascii",
            input="-",
            output=self.ascii_test,
            type="CELL",
            stdin_=INPUT_TSV,
        )
        self.assertRasterMinMax(
            map=self.ascii_test,
            refmin=1,
            refmax=15,
            msg="ascii_test in degrees must be between 1 and 15",
        )

    def test_uncommon_delims(self):
        """Test loading with uncommon delimiters"""
        self.assertModule(
            "r.in.ascii",
            input="-",
            output=self.ascii_test,
            type="CELL",
            stdin_=INPUT_UNCOMMON,
        )
        self.assertRasterMinMax(
            map=self.ascii_test,
            refmin=1,
            refmax=15,
            msg="ascii_test in degrees must be between 1 and 15",
        )


if __name__ == "__main__":
    test()
