예제 #1
0
    def test_sdr_validation_watershed_missing_ws_id_value(self):
        """SDR test validation notices bad value in `ws_id` watershed."""
        from natcap.invest import sdr

        vector_driver = ogr.GetDriverByName("ESRI Shapefile")
        test_watershed_path = os.path.join(self.workspace_dir, 'watershed.shp')
        vector = vector_driver.CreateDataSource(test_watershed_path)
        srs = osr.SpatialReference()
        srs.ImportFromEPSG(4326)
        layer = vector.CreateLayer("watershed", srs, ogr.wkbPoint)
        # forget to add a 'ws_id' field
        layer.CreateField(ogr.FieldDefn("ws_id", ogr.OFTInteger))
        feature = ogr.Feature(layer.GetLayerDefn())
        # intentionally not setting ws_id
        feature.SetGeometry(ogr.CreateGeometryFromWkt("POINT(-112.2 42.5)"))
        layer.CreateFeature(feature)
        feature = None
        layer = None
        vector = None

        # use predefined directory so test can clean up files during teardown
        args = SDRTests.generate_base_args(self.workspace_dir)
        args['watersheds_path'] = test_watershed_path

        validate_result = sdr.validate(args, limit_to=None)
        self.assertTrue(validate_result,
                        'expected a validation error but didn\'t get one')
        self.assertTrue(
            'feature 0 has an invalid value of' in validate_result[0][1],
            'expected an invalid `ws_id` value but got %s' % (validate_result))
예제 #2
0
    def test_sdr_validation_missing_key(self):
        """SDR test validation that's missing keys."""
        from natcap.invest import sdr

        # use predefined directory so test can clean up files during teardown
        args = {}
        with self.assertRaises(KeyError) as context:
            validate_result = sdr.validate(args, limit_to=None)
        self.assertTrue(
            'The following keys were expected' in str(context.exception))
예제 #3
0
    def test_sdr_validation_key_no_value(self):
        """SDR test validation that's missing a value on a key."""
        from natcap.invest import sdr

        # use predefined directory so test can clean up files during teardown
        args = SDRTests.generate_base_args(self.workspace_dir)
        args['dem_path'] = ''
        validate_result = sdr.validate(args, limit_to=None)
        self.assertTrue(validate_result,
                        'expected a validation error but didn\'t get one')
예제 #4
0
    def test_sdr_validation(self):
        """SDR test regular validation."""
        from natcap.invest import sdr

        # use predefined directory so test can clean up files during teardown
        args = SDRTests.generate_base_args(self.workspace_dir)
        args['drainage_path'] = os.path.join(REGRESSION_DATA,
                                             'sample_drainage.tif')
        validate_result = sdr.validate(args, limit_to=None)
        self.assertFalse(
            validate_result, "expected no failed validations instead got %s" %
            str(validate_result))
예제 #5
0
    def test_sdr_validation_wrong_types(self):
        """SDR test validation for wrong GIS types."""
        from natcap.invest import sdr

        # use predefined directory so test can clean up files during teardown
        args = SDRTests.generate_base_args(self.workspace_dir)
        # swap watershed and dem for different types
        args['dem_path'], args['watersheds_path'] = (args['watersheds_path'],
                                                     args['dem_path'])
        validate_result = sdr.validate(args, limit_to=None)
        self.assertTrue(validate_result,
                        "expected failed validations instead didn't get any")
        self.assertTrue(
            all([
                x[1] in ['not a raster', 'not a vector']
                for x in validate_result
            ]))