Merge pull request #2376 from oxidase/fix/addition-to-2356
Addition to fix #2356
This commit is contained in:
		
						commit
						4f6eef3d16
					
				| @ -75,11 +75,15 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature> | |||||||
|     BaseParametersGrammar(qi::rule<Iterator, Signature> &root_rule) |     BaseParametersGrammar(qi::rule<Iterator, Signature> &root_rule) | ||||||
|         : BaseParametersGrammar::base_type(root_rule) |         : BaseParametersGrammar::base_type(root_rule) | ||||||
|     { |     { | ||||||
|         const auto add_hint = [](engine::api::BaseParameters &base_parameters, const std::string &hint_string) |         const auto add_hint = [](engine::api::BaseParameters &base_parameters, const boost::optional<std::string> &hint_string) | ||||||
|         { |         { | ||||||
|             if (hint_string.size() > 0) |             if (hint_string) | ||||||
|             { |             { | ||||||
|                 base_parameters.hints.emplace_back(engine::Hint::FromBase64(hint_string)); |                 base_parameters.hints.emplace_back(engine::Hint::FromBase64(hint_string.get())); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 base_parameters.hints.emplace_back(boost::none); | ||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
| @ -134,7 +138,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature> | |||||||
| 
 | 
 | ||||||
|         hints_rule |         hints_rule | ||||||
|             = qi::lit("hints=") |             = qi::lit("hints=") | ||||||
|             > -qi::as_string[qi::repeat(engine::ENCODED_HINT_SIZE)[base64_char]][ph::bind(add_hint, qi::_r1, qi::_1)] % ';' |             > (-qi::as_string[qi::repeat(engine::ENCODED_HINT_SIZE)[base64_char]])[ph::bind(add_hint, qi::_r1, qi::_1)] % ';' | ||||||
|             ; |             ; | ||||||
| 
 | 
 | ||||||
|         bearings_rule |         bearings_rule | ||||||
|  | |||||||
| @ -44,6 +44,8 @@ BOOST_AUTO_TEST_CASE(invalid_route_urls) | |||||||
|                       32UL); |                       32UL); | ||||||
|     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&hints=foo"), |     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&hints=foo"), | ||||||
|                       29UL); |                       29UL); | ||||||
|  |     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&hints=;;; ;"), | ||||||
|  |                       32UL); | ||||||
|     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&geometries=foo"), |     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&geometries=foo"), | ||||||
|                       34UL); |                       34UL); | ||||||
|     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&overview=foo"), |     BOOST_CHECK_EQUAL(testInvalidOptions<RouteParameters>("1,2;3,4?overview=false&overview=foo"), | ||||||
| @ -88,6 +90,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_1.bearings, result_1->bearings); |     CHECK_EQUAL_RANGE(reference_1.bearings, result_1->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_1.radiuses, result_1->radiuses); |     CHECK_EQUAL_RANGE(reference_1.radiuses, result_1->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_1.coordinates, result_1->coordinates); |     CHECK_EQUAL_RANGE(reference_1.coordinates, result_1->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_1.hints, result_1->hints); | ||||||
| 
 | 
 | ||||||
|     RouteParameters reference_2{}; |     RouteParameters reference_2{}; | ||||||
|     reference_2.alternatives = true; |     reference_2.alternatives = true; | ||||||
| @ -104,6 +107,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_2.bearings, result_2->bearings); |     CHECK_EQUAL_RANGE(reference_2.bearings, result_2->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_2.radiuses, result_2->radiuses); |     CHECK_EQUAL_RANGE(reference_2.radiuses, result_2->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_2.coordinates, result_2->coordinates); |     CHECK_EQUAL_RANGE(reference_2.coordinates, result_2->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_2.hints, result_2->hints); | ||||||
| 
 | 
 | ||||||
|     RouteParameters reference_3{false, false, RouteParameters::GeometriesType::GeoJSON, |     RouteParameters reference_3{false, false, RouteParameters::GeometriesType::GeoJSON, | ||||||
|                                 RouteParameters::OverviewType::False, true}; |                                 RouteParameters::OverviewType::False, true}; | ||||||
| @ -120,6 +124,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_3.bearings, result_3->bearings); |     CHECK_EQUAL_RANGE(reference_3.bearings, result_3->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_3.radiuses, result_3->radiuses); |     CHECK_EQUAL_RANGE(reference_3.radiuses, result_3->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_3.coordinates, result_3->coordinates); |     CHECK_EQUAL_RANGE(reference_3.coordinates, result_3->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_3.hints, result_3->hints); | ||||||
| 
 | 
 | ||||||
|     std::vector<boost::optional<engine::Hint>> hints_4 = { |     std::vector<boost::optional<engine::Hint>> hints_4 = { | ||||||
|         engine::Hint::FromBase64("DAIAgP___" |         engine::Hint::FromBase64("DAIAgP___" | ||||||
| @ -154,6 +159,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_4.bearings, result_4->bearings); |     CHECK_EQUAL_RANGE(reference_4.bearings, result_4->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_4.radiuses, result_4->radiuses); |     CHECK_EQUAL_RANGE(reference_4.radiuses, result_4->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_4.coordinates, result_4->coordinates); |     CHECK_EQUAL_RANGE(reference_4.coordinates, result_4->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_4.hints, result_4->hints); | ||||||
| 
 | 
 | ||||||
|     std::vector<boost::optional<engine::Bearing>> bearings_4 = { |     std::vector<boost::optional<engine::Bearing>> bearings_4 = { | ||||||
|         boost::none, engine::Bearing{200, 10}, engine::Bearing{100, 5}, |         boost::none, engine::Bearing{200, 10}, engine::Bearing{100, 5}, | ||||||
| @ -177,6 +183,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_5.bearings, result_5->bearings); |     CHECK_EQUAL_RANGE(reference_5.bearings, result_5->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_5.radiuses, result_5->radiuses); |     CHECK_EQUAL_RANGE(reference_5.radiuses, result_5->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_5.coordinates, result_5->coordinates); |     CHECK_EQUAL_RANGE(reference_5.coordinates, result_5->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_5.hints, result_5->hints); | ||||||
| 
 | 
 | ||||||
|     std::vector<util::Coordinate> coords_2 = {{util::FloatLongitude(0), util::FloatLatitude(1)}, |     std::vector<util::Coordinate> coords_2 = {{util::FloatLongitude(0), util::FloatLatitude(1)}, | ||||||
|                                               {util::FloatLongitude(2), util::FloatLatitude(3)}, |                                               {util::FloatLongitude(2), util::FloatLatitude(3)}, | ||||||
| @ -194,6 +201,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_6.bearings, result_6->bearings); |     CHECK_EQUAL_RANGE(reference_6.bearings, result_6->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_6.radiuses, result_6->radiuses); |     CHECK_EQUAL_RANGE(reference_6.radiuses, result_6->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_6.coordinates, result_6->coordinates); |     CHECK_EQUAL_RANGE(reference_6.coordinates, result_6->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_6.hints, result_6->hints); | ||||||
| 
 | 
 | ||||||
|     auto result_7 = parseParameters<RouteParameters>("1,2;3,4?radiuses=;unlimited"); |     auto result_7 = parseParameters<RouteParameters>("1,2;3,4?radiuses=;unlimited"); | ||||||
|     RouteParameters reference_7{}; |     RouteParameters reference_7{}; | ||||||
| @ -208,6 +216,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_7.bearings, result_7->bearings); |     CHECK_EQUAL_RANGE(reference_7.bearings, result_7->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_7.radiuses, result_7->radiuses); |     CHECK_EQUAL_RANGE(reference_7.radiuses, result_7->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_7.coordinates, result_7->coordinates); |     CHECK_EQUAL_RANGE(reference_7.coordinates, result_7->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_7.hints, result_7->hints); | ||||||
| 
 | 
 | ||||||
|     auto result_8 = parseParameters<RouteParameters>("1,2;3,4?radiuses=;"); |     auto result_8 = parseParameters<RouteParameters>("1,2;3,4?radiuses=;"); | ||||||
|     RouteParameters reference_8{}; |     RouteParameters reference_8{}; | ||||||
| @ -223,11 +232,16 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     BOOST_CHECK(result_9); |     BOOST_CHECK(result_9); | ||||||
|     CHECK_EQUAL_RANGE(reference_9.radiuses, result_9->radiuses); |     CHECK_EQUAL_RANGE(reference_9.radiuses, result_9->radiuses); | ||||||
| 
 | 
 | ||||||
|     // Last Hint is empty
 |     // Some Hint's are empty
 | ||||||
|  |     std::vector<util::Coordinate> coords_3 = {{util::FloatLongitude(1), util::FloatLatitude(2)}, | ||||||
|  |                                               {util::FloatLongitude(3), util::FloatLatitude(4)}, | ||||||
|  |                                               {util::FloatLongitude(5), util::FloatLatitude(6)}, | ||||||
|  |                                               {util::FloatLongitude(7), util::FloatLatitude(8)}}; | ||||||
|     std::vector<boost::optional<engine::Hint>> hints_10 = { |     std::vector<boost::optional<engine::Hint>> hints_10 = { | ||||||
|         engine::Hint::FromBase64("DAIAgP___" |         engine::Hint::FromBase64("DAIAgP___" | ||||||
|                                  "38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_" |                                  "38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_" | ||||||
|                                  "mwIAAAEBl-Umfg=="), |                                  "mwIAAAEBl-Umfg=="), | ||||||
|  |         boost::none, | ||||||
|         engine::Hint::FromBase64("cgAAgP___" |         engine::Hint::FromBase64("cgAAgP___" | ||||||
|                                  "39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmw" |                                  "39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmw" | ||||||
|                                  "IFAAEBl-Umfg=="), |                                  "IFAAEBl-Umfg=="), | ||||||
| @ -237,13 +251,13 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|                                 RouteParameters::GeometriesType::Polyline, |                                 RouteParameters::GeometriesType::Polyline, | ||||||
|                                 RouteParameters::OverviewType::Simplified, |                                 RouteParameters::OverviewType::Simplified, | ||||||
|                                 boost::optional<bool>{}, |                                 boost::optional<bool>{}, | ||||||
|                                 coords_1, |                                 coords_3, | ||||||
|                                 hints_10, |                                 hints_10, | ||||||
|                                 std::vector<boost::optional<double>>{}, |                                 std::vector<boost::optional<double>>{}, | ||||||
|                                 std::vector<boost::optional<engine::Bearing>>{}}; |                                 std::vector<boost::optional<engine::Bearing>>{}}; | ||||||
|     auto result_10 = parseParameters<RouteParameters>( |     auto result_10 = parseParameters<RouteParameters>( | ||||||
|         "1,2;3,4?steps=false&hints=" |         "1,2;3,4;5,6;7,8?steps=false&hints=" | ||||||
|         "DAIAgP___38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_mwIAAAEBl-Umfg==;" |         "DAIAgP___38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_mwIAAAEBl-Umfg==;;" | ||||||
|         "cgAAgP___39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmwIFAAEBl-Umfg==;"); |         "cgAAgP___39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmwIFAAEBl-Umfg==;"); | ||||||
|     BOOST_CHECK(result_10); |     BOOST_CHECK(result_10); | ||||||
|     BOOST_CHECK_EQUAL(reference_10.steps, result_10->steps); |     BOOST_CHECK_EQUAL(reference_10.steps, result_10->steps); | ||||||
| @ -254,6 +268,7 @@ BOOST_AUTO_TEST_CASE(valid_route_urls) | |||||||
|     CHECK_EQUAL_RANGE(reference_10.bearings, result_10->bearings); |     CHECK_EQUAL_RANGE(reference_10.bearings, result_10->bearings); | ||||||
|     CHECK_EQUAL_RANGE(reference_10.radiuses, result_10->radiuses); |     CHECK_EQUAL_RANGE(reference_10.radiuses, result_10->radiuses); | ||||||
|     CHECK_EQUAL_RANGE(reference_10.coordinates, result_10->coordinates); |     CHECK_EQUAL_RANGE(reference_10.coordinates, result_10->coordinates); | ||||||
|  |     CHECK_EQUAL_RANGE(reference_10.hints, result_10->hints); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(valid_table_urls) | BOOST_AUTO_TEST_CASE(valid_table_urls) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user