[GRASS-SVN] r71605 - in grass-addons/grass7/vector/v.profile: . testsuite

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Oct 29 03:18:41 PDT 2017


Author: marisn
Date: 2017-10-29 03:18:41 -0700 (Sun, 29 Oct 2017)
New Revision: 71605

Added:
   grass-addons/grass7/vector/v.profile/testsuite/
   grass-addons/grass7/vector/v.profile/testsuite/test_v_profile.py
Log:
v.profile: add simple tests


Added: grass-addons/grass7/vector/v.profile/testsuite/test_v_profile.py
===================================================================
--- grass-addons/grass7/vector/v.profile/testsuite/test_v_profile.py	                        (rev 0)
+++ grass-addons/grass7/vector/v.profile/testsuite/test_v_profile.py	2017-10-29 10:18:41 UTC (rev 71605)
@@ -0,0 +1,105 @@
+"""
+Name:       v.profile test
+Purpose:    Tests v.profile input parsing and simle output generation.
+            Uses NC Basic data set.
+
+Author:     Maris Nartiss
+Copyright:  (C) 2017 by Maris Nartiss 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.
+TODO:       Convert to synthetic dataset. It would allow to shorten output sample length.
+            Cover more input/output combinations.
+"""
+
+import os
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+
+output_full = """Number|Distance|cat|feature_id|featurenam|class|st_alpha|st_num|county|county_num|primlat_dm|primlon_dm|primlatdec|primlondec|srclat_dms|srclon_dms|srclatdec|srclondec|elev_m|map_name
+1|19537.97|572|986138|"Greshams Lake"|"Reservoir"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+2|19537.97|1029|999647|"Greshams Lake Dam"|"Dam"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+"""
+
+output_nocols = """1|19537.97|572|986138|"Greshams Lake"|"Reservoir"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+2|19537.97|1029|999647|"Greshams Lake Dam"|"Dam"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+"""
+
+output_filtered = """Number|Distance|cat|feature_id|featurenam|class|st_alpha|st_num|county|county_num|primlat_dm|primlon_dm|primlatdec|primlondec|srclat_dms|srclon_dms|srclatdec|srclondec|elev_m|map_name
+1|19537.97|1029|999647|"Greshams Lake Dam"|"Dam"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+"""
+
+output_coords = """Number|Distance|cat|feature_id|featurenam|class|st_alpha|st_num|county|county_num|primlat_dm|primlon_dm|primlatdec|primlondec|srclat_dms|srclon_dms|srclatdec|srclondec|elev_m|map_name
+1|24.34|572|986138|"Greshams Lake"|"Reservoir"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+2|24.34|1029|999647|"Greshams Lake Dam"|"Dam"|"NC"|37|"Wake"|183|"078:34:31W"|"35:52:43N"|35.878484|-78.57528|""|""|""|""|77|"Wake Forest"
+"""
+
+
+class TestProfiling(TestCase):
+    in_points = 'points_of_interest'
+    in_map = 'roadsmajor'
+    where = "cat='354'"
+    prof_ponts = (647952, 236176, 647950, 236217)
+    outfile = 'test_out.csv'
+
+    def testParsing(self):
+        """Test input parameter parsing"""
+        # Positive buffer size
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=0)
+        # Where without input map
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=10,
+            profile_where=self.where)
+        # Both coords and input vector is not supported
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=10,
+            profile_map=self.in_map)
+        # Neither of coords or input line are provided
+        self.assertModuleFail('v.profile', input=self.in_points, buffer=10)
+        # Two coordinate parirs are reqiured
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=(647952, 236176), buffer=10)
+        # Wrong object match count
+        self.assertModuleFail('v.profile', input=self.in_points, profile_map=self.in_map, buffer=10,
+            profile_where="ROAD_NAME='wrong'")
+        self.assertModuleFail('v.profile', input=self.in_points, profile_map=self.in_map, buffer=10,
+            profile_where="ROAD_NAME='US-1'")
+        self.assertModuleFail('v.profile', input=self.in_points, profile_map=self.in_map, buffer=10)
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=10,
+            where="class='wrong'")
+        # Wrong output name
+        self.assertModuleFail('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=10,
+            map_output='5cats')
+    
+    def testFileExists(self):
+        """This function checks if the output file is written correctly"""
+        self.runModule('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=10,
+            output=self.outfile)
+        self.assertFileExists(self.outfile)
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+    
+    def testOutput(self):
+        """Test correctness of output"""
+        # Normal output
+        vpro = SimpleModule('v.profile', input=self.in_points, profile_map=self.in_map, buffer=200,
+            profile_where=self.where)
+        vpro.run()
+        self.assertLooksLike(reference=output_full, actual=vpro.outputs.stdout)
+        # Without column names
+        vpro = SimpleModule('v.profile', input=self.in_points, profile_map=self.in_map, buffer=200,
+            profile_where=self.where, c=True)
+        vpro.run()
+        self.assertLooksLike(reference=output_nocols, actual=vpro.outputs.stdout)
+        # Filtering input points
+        vpro = SimpleModule('v.profile', input=self.in_points, profile_map=self.in_map, buffer=200,
+            where="class='Dam'", profile_where=self.where)
+        vpro.run()
+        self.assertLooksLike(reference=output_filtered, actual=vpro.outputs.stdout)
+        # Providing profiling line from coordinates
+        vpro = SimpleModule('v.profile', input=self.in_points, coordinates=self.prof_ponts, buffer=200)
+        vpro.run()
+        self.assertLooksLike(reference=output_coords, actual=vpro.outputs.stdout)
+
+
+if __name__ == '__main__':
+    test()



More information about the grass-commit mailing list