Skip to content

Commit 0c2b066

Browse files
committed
GeoJSON IO test - valid/invalid "empty" geometries test.
1 parent 898335f commit 0c2b066

1 file changed

Lines changed: 28 additions & 24 deletions

File tree

test/python_tests/geometry_io_test.py

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
from binascii import unhexlify
55

6-
from nose.tools import eq_
6+
from nose.tools import eq_, assert_raises
77

88
import mapnik
99

@@ -101,23 +101,25 @@ def setup():
101101
'{"coordinates":[[[[-178.32319,71.518365],[-178.321586,71.518439],[-178.259635,71.510688],[-178.304862,71.513129],[-178.32319,71.518365]]],[[[-178.32319,71.518365],[-178.341544,71.517524],[-178.32244,71.505439],[-178.215323,71.478034],[-178.193473,71.47663],[-178.147757,71.485175],[-178.124442,71.481879],[-178.005729,71.448615],[-178.017203,71.441413],[-178.054191,71.428778],[-178.047049,71.425727],[-178.033439,71.417792],[-178.026236,71.415107],[-178.030082,71.413459],[-178.039908,71.40766],[-177.970878,71.39643],[-177.779837,71.333197],[-177.718375,71.305243],[-177.706412,71.3039],[-177.68212,71.304877],[-177.670279,71.301825],[-177.655387,71.293158],[-177.587577,71.285956],[-177.548575,71.294867],[-177.531119,71.296332],[-177.51409,71.293402],[-177.498649,71.284735],[-177.506217,71.268622],[-177.486991,71.258734],[-177.459708,71.249884],[-177.443412,71.237006],[-177.445914,71.222663],[-177.457755,71.209357],[-177.507804,71.173774],[-177.581168,71.147589],[-177.637626,71.117011],[-177.684134,71.110968],[-177.751883,71.092963],[-177.819266,71.084662],[-177.877677,71.052558],[-177.930472,71.041449],[-178.206595,71.038398],[-178.310111,71.013617],[-178.875907,70.981024],[-178.980277,70.95069],[-179.342093,70.908026],[-179.336234,70.911078],[-179.322257,70.921698],[-179.364493,70.930243],[-179.457511,70.915534],[-179.501212,70.919684],[-179.666007,70.965461],[-179.853385,70.979438],[-179.888785,70.993598],[-179.907523,70.996772],[-179.999989,70.992011],[-179.999989,71.024848],[-179.999989,71.058661],[-179.999989,71.126166],[-179.999989,71.187018],[-179.999989,71.224189],[-179.999989,71.27497],[-179.999989,71.312079],[-179.999989,71.356024],[-179.999989,71.410041],[-179.999989,71.487799],[-179.999989,71.536689],[-179.862845,71.538642],[-179.912223,71.555854],[-179.900748,71.558478],[-179.798819,71.569098],[-179.757438,71.583197],[-179.735953,71.586432],[-179.715445,71.583258],[-179.697501,71.577338],[-179.678702,71.573676],[-179.610831,71.585211],[-179.372062,71.569098],[-179.326774,71.555487],[-179.306815,71.557563],[-179.287162,71.562934],[-179.24285,71.569098],[-179.204642,71.583197],[-179.074576,71.600043],[-178.395438,71.539008],[-178.32319,71.518365]]]],"type":"MultiPolygon"}'
102102
]
103103

104-
geojson_nulls = [
105-
'{ "type": "Feature", "properties": { }, "geometry": null }',
106-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [] }}',
107-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": [ [] ] }}',
108-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [] ] ] } }',
109-
'{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [], "type": "Point" }}',
110-
'{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [ [] ], "type": "LineString" }}',
111-
'{ "type": "Feature", "properties": { }, "geometry": { "coordinates": [ [ [] ] ], "type": "Polygon" } }',
112-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPoint", "coordinates": [ [] ] }}',
113-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPoint", "coordinates": [ [],[] ] }}',
114-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiLineString", "coordinates": [ [] ] }}',
115-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiLineString", "coordinates": [ [ [] ] ] }}',
116-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [] ] }}',
117-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [] ] ] }}',
118-
'{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [] ] ] ] }}',
104+
valid_empty_geometries = [
105+
'null', # Point can't be empty
106+
'{ "type": "LineString" , "coordinates": []}',
107+
'{ "type": "Polygon" , "coordinates": [[]]}',
108+
'{ "type": "MultiPoint" , "coordinates": []}',
109+
'{ "type": "MultiLineString" , "coordinates": [[]]}',
110+
'{ "type": "MultiPolygon" , "coordinates": [[[]]]}',
119111
]
120112

113+
invalid_empty_geometries = [
114+
'{ "type": "Point" , "coordinates": []}', # Point can't be empty
115+
'{ "type": "LineString" , "coordinates": [[]]}',
116+
'{ "type": "Polygon" , "coordinates": [[[]]]}',
117+
'{ "type": "MultiPoint" , "coordinates": [[]]}',
118+
'{ "type": "MultiLineString" , "coordinates": [[[]]]}',
119+
'{ "type": "MultiPolygon" , "coordinates": [[[[]]]]}',
120+
]
121+
122+
121123
# valid, but empty wkb's
122124
# (http://trac.osgeo.org/postgis/wiki/DevWikiEmptyGeometry)
123125
empty_wkbs = [
@@ -329,15 +331,17 @@ def test_creating_feature_from_geojson():
329331
eq_(feat['name'], u'value')
330332

331333

332-
def test_handling_geojson_null_geoms():
333-
for j in geojson_nulls:
334-
ctx = mapnik.Context()
335-
out_json = mapnik.Feature.from_geojson(j, ctx).to_geojson()
336-
expected = '{"type":"Feature","id":1,"geometry":null,"properties":{}}'
337-
eq_(out_json, expected)
338-
# ensure it round trips
339-
eq_(mapnik.Feature.from_geojson(out_json, ctx).to_geojson(), expected)
334+
def test_handling_valid_geojson_empty_geometries():
335+
for json in valid_empty_geometries:
336+
geom = mapnik.Geometry.from_geojson(json)
337+
out_json = geom.to_geojson()
338+
# check round trip
339+
eq_(json.replace(" ",""), out_json)
340+
340341

342+
def test_handling_invalid_geojson_empty_geometries():
343+
for json in invalid_empty_geometries:
344+
assert_raises(RuntimeError, mapnik.Geometry.from_geojson, json)
341345

342346
if __name__ == "__main__":
343347
setup()

0 commit comments

Comments
 (0)