Beispiel #1
0
    def test_validation_required_args(self):
        """RouteDEM: test required args in validation."""
        from natcap.invest import routedem
        args = {}

        required_keys = ['workspace_dir', 'dem_path']

        with self.assertRaises(KeyError) as cm:
            routedem.validate(args)
        for key in required_keys:
            self.assertTrue(key in repr(cm.exception))
Beispiel #2
0
    def test_validation_required_args_threshold(self):
        """RouteDEM: test required args in validation (with threshold)."""
        from natcap.invest import routedem

        args = {'calculate_stream_threshold': True}
        required_keys = [
            'workspace_dir', 'dem_path', 'threshold_flow_accumulation'
        ]

        with self.assertRaises(KeyError) as cm:
            routedem.validate(args)
        for key in required_keys:
            self.assertTrue(key in repr(cm.exception))
Beispiel #3
0
    def test_validation_required_args_empty(self):
        """RouteDEM: test validation of a present but empty args."""
        from natcap.invest import routedem
        from natcap.invest import validation

        required_keys = ['workspace_dir', 'dem_path', 'algorithm']
        args = dict((k, '') for k in required_keys)

        validation_errors = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_errors)
        self.assertEqual(invalid_keys, set(required_keys))
Beispiel #4
0
    def test_validation_required_args(self):
        """RouteDEM: test required args in validation."""
        from natcap.invest import routedem
        from natcap.invest import validation
        args = {}

        required_keys = ['workspace_dir', 'dem_path']

        validation_warnings = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_warnings)
        self.assertTrue(set(required_keys).issubset(invalid_keys))
Beispiel #5
0
    def test_validation_required_args_empty(self):
        """RouteDEM: test validation of a present but empty args."""
        from natcap.invest import routedem
        required_keys = ['workspace_dir', 'dem_path']
        args = dict((k, '') for k in required_keys)

        validation_errors = routedem.validate(args)
        self.assertEqual(len(validation_errors), 1)
        self.assertEqual(
            set(required_keys) - set(validation_errors[0][0]), set([]))
        self.assertEqual(validation_errors[0][1], 'parameter has no value')
Beispiel #6
0
    def test_validation_dem_not_found(self):
        """RouteDEM: test validation of a missing DEM."""
        from natcap.invest import routedem

        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'notafile.txt')
        }
        validation_errors = routedem.validate(args)
        self.assertEqual(len(validation_errors), 1)
        self.assertEqual(validation_errors[0],
                         (['dem_path'], 'not found on disk'))
Beispiel #7
0
    def test_validation_band_index_negative_value(self):
        """RouteDEM: test validation of a negative band index."""
        from natcap.invest import routedem
        from natcap.invest import validation

        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'notafile.txt'),
            'dem_band_index': -5,
        }

        validation_errors = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_errors)
        self.assertEqual(invalid_keys, set(['dem_path', 'dem_band_index',
                                            'algorithm']))
Beispiel #8
0
    def test_validation_invalid_raster(self):
        """RouteDEM: test validation of an invalid DEM."""
        from natcap.invest import routedem

        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'badraster.tif'),
        }

        with open(args['dem_path'], 'w') as bad_raster:
            bad_raster.write('This is an invalid raster format.')

        validation_errors = routedem.validate(args)
        self.assertEqual(len(validation_errors), 1)
        self.assertEqual(validation_errors[0], (['dem_path'], 'not a raster'))
Beispiel #9
0
    def test_validation_invalid_raster(self):
        """RouteDEM: test validation of an invalid DEM."""
        from natcap.invest import routedem
        from natcap.invest import validation

        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'badraster.tif'),
        }

        with open(args['dem_path'], 'w') as bad_raster:
            bad_raster.write('This is an invalid raster format.')

        validation_errors = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_errors)
        self.assertTrue('dem_path' in invalid_keys)
Beispiel #10
0
    def test_validation_required_args_threshold(self):
        """RouteDEM: test required args in validation (with threshold)."""
        from natcap.invest import routedem
        from natcap.invest import validation

        args = {'calculate_stream_threshold': True}
        required_keys = [
            'workspace_dir', 'dem_path', 'algorithm',

            # Required because calculate_stream_threshold
            'threshold_flow_accumulation']

        validation_warnings = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_warnings)
        for key in required_keys:
            self.assertTrue(key in invalid_keys)
Beispiel #11
0
    def test_validation_band_index_value_too_large(self):
        """RouteDEM: test validation of a too-large band index."""
        from natcap.invest import routedem
        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'raster.tif'),
            'dem_band_index': 5,
        }

        # Has two bands, so band index 5 is too large.
        RouteDEMTests._make_dem(args['dem_path'])

        validation_errors = routedem.validate(args)
        self.assertEqual(len(validation_errors), 1)
        self.assertEqual(validation_errors[0],
                         (['dem_band_index'], 'Must be between 1 and 2'))
Beispiel #12
0
    def test_validation_band_index_negative_value(self):
        """RouteDEM: test validation of a negative band index."""
        from natcap.invest import routedem
        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'notafile.txt'),
            'dem_band_index': -5,
        }

        validation_errors = routedem.validate(args)
        self.assertEqual(len(validation_errors), 2)
        self.assertEqual(
            validation_errors[0],
            (['dem_band_index'], 'must be a positive, nonzero integer'))
        self.assertEqual(validation_errors[1],
                         (['dem_path'], 'not found on disk'))
Beispiel #13
0
    def test_validation_band_index_value_too_large(self):
        """RouteDEM: test validation of a too-large band index."""
        from natcap.invest import routedem
        from natcap.invest import validation

        args = {
            'workspace_dir': self.workspace_dir,
            'dem_path': os.path.join(self.workspace_dir, 'raster.tif'),
            'dem_band_index': 5,
        }

        # Has two bands, so band index 5 is too large.
        RouteDEMTests._make_dem(args['dem_path'])

        validation_errors = routedem.validate(args)
        invalid_keys = validation.get_invalid_keys(validation_errors)

        self.assertEqual(invalid_keys, set(['algorithm', 'dem_band_index']))