1# -*- coding: utf-8 -*- 2from grass.exceptions import OpenError 3from grass.gunittest.case import TestCase 4from grass.gunittest.main import test 5 6from grass.pygrass.raster import RasterRow 7 8 9class RasterRowTestCase(TestCase): 10 11 name = "RasterRowTestCase_map" 12 13 @classmethod 14 def setUpClass(cls): 15 """Create test raster map and region""" 16 cls.use_temp_region() 17 cls.runModule("g.region", n=40, s=0, e=40, w=0, res=10) 18 cls.runModule("r.mapcalc", expression="%s = row() + (10.0 * col())" % (cls.name), 19 overwrite=True) 20 21 @classmethod 22 def tearDownClass(cls): 23 """Remove the generated vector map, if exist""" 24 cls.runModule("g.remove", flags='f', type='raster', 25 name=cls.name) 26 cls.del_temp_region() 27 28 def test_type(self): 29 r = RasterRow(self.name) 30 r.open(mode='r') 31 self.assertTrue(r.mtype, 'DCELL') 32 r.close() 33 34 def test_isopen(self): 35 r = RasterRow(self.name) 36 self.assertFalse(r.is_open()) 37 r.open(mode='r') 38 self.assertTrue(r.is_open()) 39 r.close() 40 self.assertFalse(r.is_open()) 41 42 def test_name(self): 43 r = RasterRow(self.name) 44 r.open(mode='r') 45 self.assertEqual(r.name, self.name) 46 fullname = "{name}@{mapset}".format(name=r.name, mapset=r.mapset) 47 self.assertEqual(r.fullname(), fullname) 48 r.close() 49 50 def test_exist(self): 51 notexist = RasterRow(self.name + 'notexist') 52 self.assertFalse(notexist.exist()) 53 exist = RasterRow(self.name) 54 self.assertTrue(exist.exist()) 55 56 def test_open_r(self): 57 notexist = RasterRow(self.name + 'notexist') 58 with self.assertRaises(OpenError): 59 # raster does not exist 60 notexist.open(mode='r') 61 r = RasterRow(self.name) 62 r.open(mode='r', mtype='FCELL') 63 # ignore the mtype if is open in read mode 64 self.assertEqual(r.mtype, 'DCELL') 65 r.close() 66 67 def test_open_w(self): 68 r = RasterRow(self.name) 69 with self.assertRaises(OpenError): 70 # raster type is not defined! 71 r.open(mode='w') 72 with self.assertRaises(OpenError): 73 # raster already exist 74 r.open(mode='w', mtype='DCELL') 75 # open in write mode and overwrite 76 r.open(mode='w', mtype='DCELL', overwrite=True) 77 self.assertTrue(r.mtype, 'DCELL') 78 r.close() 79 80 def test_row_range(self): 81 r = RasterRow(self.name) 82 with self.assertRaises(IndexError): 83 # Map is not open yet 84 r[1] 85 with self.assertRaises(IndexError): 86 # Index is out of range 87 r.open() 88 r[9999] 89 r.close() 90 91 92if __name__ == '__main__': 93 test() 94