From 56ea24b03b1736fdc6a3f41f8eca6d3284435b64 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Tue, 16 Feb 2016 20:09:12 +0100 Subject: [PATCH] Add tests for bearing parsing --- .../server/api/base_parameters_grammar.hpp | 10 +++++-- unit_tests/server/parameters_parser.cpp | 29 ++++++++++++++++++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/include/server/api/base_parameters_grammar.hpp b/include/server/api/base_parameters_grammar.hpp index fe1c48529..4a6aad926 100644 --- a/include/server/api/base_parameters_grammar.hpp +++ b/include/server/api/base_parameters_grammar.hpp @@ -37,8 +37,12 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar engine::api::BaseParameters ¶meters_) : BaseParametersGrammar::base_type(child_rule), base_parameters(parameters_) { - const auto add_bearing = [this](const boost::fusion::vector &bearing_range) { - engine::api::BaseParameters::Bearing bearing{boost::fusion::at_c<0>(bearing_range), boost::fusion::at_c<1>(bearing_range)}; + const auto add_bearing = [this](const boost::optional> &bearing_range) { + boost::optional bearing; + if (bearing_range) + { + bearing = engine::api::BaseParameters::Bearing {boost::fusion::at_c<0>(*bearing_range), boost::fusion::at_c<1>(*bearing_range)}; + } base_parameters.bearings.push_back(std::move(bearing)); }; const auto set_radiuses = [this](RadiusesT& radiuses) { @@ -57,7 +61,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar radiuses_rule = qi::lit("radiuses=") >> -qi::double_ % ";"; hints_rule = qi::lit("hints=") >> qi::as_string[qi::repeat(engine::ENCODED_HINT_SIZE)[base64_char]][add_hint] % ";"; bearings_rule = - qi::lit("bearings=") >> -((qi::short_ >> ',' >> qi::short_))[add_bearing] % ";"; + qi::lit("bearings=") >> (-(qi::short_ >> ',' >> qi::short_))[add_bearing] % ";"; base_rule = bearings_rule | radiuses_rule[set_radiuses] | hints_rule; } diff --git a/unit_tests/server/parameters_parser.cpp b/unit_tests/server/parameters_parser.cpp index 2648bb7c6..d9fa68a3e 100644 --- a/unit_tests/server/parameters_parser.cpp +++ b/unit_tests/server/parameters_parser.cpp @@ -165,7 +165,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) "0vMAAEAAQGLSzmR;_4ghA4JuzAD_" "IAAAo28BAOYAAAAzAAAAAgAAAEwAAAAAAAAAdIwAAJ4AAAAXiSEDfm7MAAEAAQGLSzmR;03AhA0vnzAA_SAAA_____" "3wEAAAYAAAAQAAAAB4AAABAAAAAoUYBAJ4AAADlcCEDSefMAAMAAQGLSzmR"); - BOOST_CHECK(result_3); + BOOST_CHECK(result_4); BOOST_CHECK_EQUAL(reference_4.steps, result_4->steps); BOOST_CHECK_EQUAL(reference_4.alternative, result_4->alternative); BOOST_CHECK_EQUAL(reference_4.geometries, result_4->geometries); @@ -174,6 +174,33 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) CHECK_EQUAL_RANGE(reference_4.bearings, result_4->bearings); CHECK_EQUAL_RANGE(reference_4.radiuses, result_4->radiuses); CHECK_EQUAL_RANGE(reference_4.coordinates, result_4->coordinates); + + std::vector> bearings_4 = { + boost::none, + engine::api::BaseParameters::Bearing {200, 10}, + engine::api::BaseParameters::Bearing {100, 5}, + }; + engine::api::RouteParameters reference_5{ + false, + true, + engine::api::RouteParameters::GeometriesType::Polyline, + engine::api::RouteParameters::OverviewType::Simplified, + std::vector>{}, + std::vector{}, + std::vector> {}, + std::vector>{}, + bearings_4}; + auto result_5 = api::parseParameters( + "steps=false&bearings=;200,10;100,5"); + BOOST_CHECK(result_5); + BOOST_CHECK_EQUAL(reference_5.steps, result_5->steps); + BOOST_CHECK_EQUAL(reference_5.alternative, result_5->alternative); + BOOST_CHECK_EQUAL(reference_5.geometries, result_5->geometries); + BOOST_CHECK_EQUAL(reference_5.overview, result_5->overview); + CHECK_EQUAL_RANGE(reference_5.uturns, result_5->uturns); + CHECK_EQUAL_RANGE(reference_5.bearings, result_5->bearings); + CHECK_EQUAL_RANGE(reference_5.radiuses, result_5->radiuses); + CHECK_EQUAL_RANGE(reference_5.coordinates, result_5->coordinates); } BOOST_AUTO_TEST_CASE(valid_table_urls)