def test_vectors_equal(self): """Verify that two primitive vectors assert to be equal.""" from pygeoprocessing.testing import assert_vectors_equal from pygeoprocessing.testing.sampledata import SRS_COLOMBIA from pygeoprocessing.testing.sampledata import create_vector_on_disk #TODO: does this not work for a single field? create_vector = functools.partial( VectorTests.create_vector, geometries=[LineString([(0, 0), (1, 1)])], projection=SRS_COLOMBIA.projection, fields={ 'a': 'real', 'b': 'real' }, attributes=[{ 'a': 0.12, 'b': 0.1 }]) filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') create_vector(filename=filename_a) create_vector(filename=filename_b) assert_vectors_equal(filename_a, filename_b, 1e-9)
def test_file_not_found(self): """IOError should be raised when a vector does not exist.""" from pygeoprocessing.testing import assert_vectors_equal nonexistent_file_a = os.path.join(self.workspace, 'foo') nonexistent_file_b = os.path.join(self.workspace, 'bar') with self.assertRaises(IOError): assert_vectors_equal(nonexistent_file_a, nonexistent_file_b, 0.1)
def test_different_geometries(self): """Assert we can test geometric values of the same type.""" from pygeoprocessing.testing import assert_vectors_equal filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') VectorTests.create_vector(geometries=[Point(0, 1)], filename=filename_a) VectorTests.create_vector(geometries=[Point(0, 0)], filename=filename_b) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)
def test_mismatched_geometry_type(self): """Assert mismatched geometry types.""" from pygeoprocessing.testing import assert_vectors_equal filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') VectorTests.create_vector(filename=filename_a) VectorTests.create_vector(filename=filename_b, geometries=[LineString([(0, 0), (0, 1)])]) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)
def test_different_nonnumeric_field_values(self): """Assert that nonnumeric field values can be checked correctly.""" from pygeoprocessing.testing import assert_vectors_equal create_vector = functools.partial(VectorTests.create_vector, fields={'a': 'string'}) filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') create_vector(filename=filename_a, attributes=[{'a': 'aaa'}]) create_vector(filename=filename_b, attributes=[{'a': 'bbb'}]) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)
def test_mismatched_projections(self): """Raise assertionerror when projections differ.""" from pygeoprocessing.testing import assert_vectors_equal from pygeoprocessing.testing.sampledata import SRS_WILLAMETTE,\ SRS_COLOMBIA filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') VectorTests.create_vector(filename=filename_a, projection=SRS_WILLAMETTE.projection) VectorTests.create_vector(filename=filename_b, projection=SRS_COLOMBIA.projection) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)
def test_mismatched_layer_counts(self): """Mismatched layer counts should raise assertionerror.""" from pygeoprocessing.testing import assert_vectors_equal # creating manually, since create_vector_on_disk can't create vectors # with multiple layers at the moment. # Using KML for readability and multi-layer support. driver = ogr.GetDriverByName('KML') filepath_a = os.path.join(self.workspace, 'foo.kml') out_vector_a = driver.CreateDataSource(filepath_a) out_vector_a.CreateLayer('a') out_vector_a.CreateLayer('b') out_vector_a = None filepath_b = os.path.join(self.workspace, 'bar.kml') out_vector_b = driver.CreateDataSource(filepath_b) out_vector_b.CreateLayer('a') out_vector_b = None with self.assertRaises(AssertionError): assert_vectors_equal(filepath_a, filepath_b, 0.1)
def test_field_mismatch(self): """Assert we can catch when fieldnames don't match.""" from pygeoprocessing.testing import assert_vectors_equal filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') create_vector = functools.partial(VectorTests.create_vector, geometries=[Point(0, 1)]) create_vector(filename=filename_a, fields={'a': 'string'}, attributes=[{ 'a': 'foo' }]) create_vector(filename=filename_b, fields={'b': 'string'}, attributes=[{ 'b': 'foo' }]) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)
def test_field_count_mismatch(self): """Assert we can catch when field counts don't match.""" from pygeoprocessing.testing import assert_vectors_equal filename_a = os.path.join(self.workspace, 'foo') filename_b = os.path.join(self.workspace, 'bar') VectorTests.create_vector(fields={ 'a': 'string', 'b': 'string' }, attributes=[{ 'a': 'foo', 'b': 'foo' }], filename=filename_a) VectorTests.create_vector(fields={'b': 'string'}, attributes=[{ 'b': 'foo' }], filename=filename_b) with self.assertRaises(AssertionError): assert_vectors_equal(filename_a, filename_b, 0.1)