#include "util/exception.hpp" #include "util/geojson_validation.hpp" #include BOOST_AUTO_TEST_SUITE(geojson_validation) using namespace osrm; BOOST_AUTO_TEST_CASE(timezone_coordinate_validation_test) { rapidjson::Document doc; char valid_coord[] = "[8.28369,48.88277]"; doc.Parse(valid_coord); BOOST_CHECK_NO_THROW(util::validateCoordinate(doc)); char non_array[] = "{\"x\": 48.88277}"; doc.Parse(non_array); BOOST_CHECK_THROW(util::validateCoordinate(doc), util::exception); char too_many[] = "[8.28369, 48.88277, 8.2806]"; doc.Parse(too_many); BOOST_CHECK_THROW(util::validateCoordinate(doc), util::exception); char nan[] = "[8.28369, y]"; doc.Parse(nan); BOOST_CHECK_THROW(util::validateCoordinate(doc), util::exception); } BOOST_AUTO_TEST_CASE(timezone_validation_test) { char json[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; rapidjson::Document doc; doc.Parse(json); BOOST_CHECK_NO_THROW(util::validateFeature(doc)); char missing_type[] = "{\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { " "\"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_type); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_props[] = "{ \"type\" : \"Feature\"," "\"props\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_props); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char nonobj_props[] = "{ \"type\" : \"Feature\"," "\"properties\" : [ \"TZID\", \"Europe/Berlin\"], \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(nonobj_props); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_tzid[] = "{ \"type\" : \"Feature\"," "\"properties\" : { }, \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_tzid); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char tzid_err[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : []}, \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(tzid_err); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_geom[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometries\" : { " "\"type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_geom); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char nonobj_geom[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : [ \"type\", \"polygon\", " "\"coordinates\", [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] ]}"; doc.Parse(nonobj_geom); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_geom_type[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { " "\"no_type\": \"polygon\", " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_geom_type); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char nonstring_geom_type[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : " "{ \"type\": [\"polygon\"], " "\"coordinates\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(nonstring_geom_type); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_coords[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { \"type\": \"polygon\", " "\"coords\": [[[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]]] }}"; doc.Parse(missing_coords); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); char missing_outerring[] = "{ \"type\" : \"Feature\"," "\"properties\" : { \"TZID\" : \"Europe/Berlin\"}, \"geometry\" : { \"type\": \"polygon\", " "\"coordinates\": [[8.28369,48.88277], [8.57757, " "48.88277], [8.57757, 49.07206], [8.28369, " "49.07206], [8.28369, 48.88277]] }}"; doc.Parse(missing_outerring); BOOST_CHECK_THROW(util::validateFeature(doc), util::exception); } BOOST_AUTO_TEST_SUITE_END()