From 5d6c27762cf3015def63151b204f5fcb4ad7d371 Mon Sep 17 00:00:00 2001 From: Dennis Date: Fri, 12 Jul 2024 19:13:16 +0200 Subject: [PATCH] Implement classes check --- build.rs | 12 ++++++------ tests/common/f64_utils.rs | 2 +- tests/common/osrm_error.rs | 2 +- tests/common/osrm_world.rs | 5 ++++- tests/common/route_response.rs | 5 ++--- tests/cucumber.rs | 27 ++++++++++++++++++++++++--- 6 files changed, 38 insertions(+), 15 deletions(-) diff --git a/build.rs b/build.rs index 13d428ac7..d06df7c9f 100644 --- a/build.rs +++ b/build.rs @@ -104,14 +104,14 @@ fn main() { .run(flatc_rust::Args { extra: &["--gen-all"], inputs: &[ - Path::new("include/engine/api/flatbuffers/position.fbs"), - Path::new("include/engine/api/flatbuffers/waypoint.fbs"), - Path::new("include/engine/api/flatbuffers/route.fbs"), - Path::new("include/engine/api/flatbuffers/table.fbs"), - Path::new("include/engine/api/flatbuffers/fbresult.fbs"), + Path::new("generated/include/engine/api/flatbuffers/position.fbs"), + Path::new("generated/include/engine/api/flatbuffers/waypoint.fbs"), + Path::new("generated/include/engine/api/flatbuffers/route.fbs"), + Path::new("generated/include/engine/api/flatbuffers/table.fbs"), + Path::new("generated/include/engine/api/flatbuffers/fbresult.fbs"), ], out_dir: Path::new("target/flatbuffers/"), ..Default::default() }) - .expect("flatc failed generated files"); + .expect("flatc failed generating files"); } diff --git a/tests/common/f64_utils.rs b/tests/common/f64_utils.rs index 7929f1cce..7ba0852f1 100644 --- a/tests/common/f64_utils.rs +++ b/tests/common/f64_utils.rs @@ -16,7 +16,7 @@ fn approx_equal_within_offset_range(actual: f64, expectation: f64, offset: f64) actual >= expectation - offset && actual <= expectation + offset } -pub fn approximate_within_range(actual: f64, expectation: f64, offset: &Offset) -> bool{ +pub fn approximate_within_range(actual: f64, expectation: f64, offset: &Offset) -> bool { match offset { Offset::Absolute(a) => approx_equal_within_offset_range(actual, expectation, *a), Offset::Percentage(p) => aprox_equal_within_percentage_range(actual, expectation, *p), diff --git a/tests/common/osrm_error.rs b/tests/common/osrm_error.rs index d0d34e166..f7395f8d8 100644 --- a/tests/common/osrm_error.rs +++ b/tests/common/osrm_error.rs @@ -14,4 +14,4 @@ impl OSRMError { }; response } -} \ No newline at end of file +} diff --git a/tests/common/osrm_world.rs b/tests/common/osrm_world.rs index ee69deb6c..c3540eecb 100644 --- a/tests/common/osrm_world.rs +++ b/tests/common/osrm_world.rs @@ -1,5 +1,8 @@ use super::{ - nearest_response::NearestResponse, osm::{OSMNode, OSMWay}, osm_db::OSMDb, osrm_error::OSRMError, + nearest_response::NearestResponse, + osm::{OSMNode, OSMWay}, + osm_db::OSMDb, + osrm_error::OSRMError, route_response::RouteResponse, }; use crate::{common::local_task::LocalTask, Location}; diff --git a/tests/common/route_response.rs b/tests/common/route_response.rs index 830acea30..541881283 100644 --- a/tests/common/route_response.rs +++ b/tests/common/route_response.rs @@ -1,5 +1,3 @@ - - use serde::Deserialize; use super::{location::Location, nearest_response::Waypoint}; @@ -11,7 +9,7 @@ pub struct Maneuver { pub location: Location, pub modifier: Option, // TODO: should be an enum pub r#type: String, // TODO: should be an enum - pub exit: Option + pub exit: Option, } #[derive(Debug, Clone, Deserialize)] @@ -37,6 +35,7 @@ pub struct Intersection { pub entry: Vec, pub bearings: Vec, pub location: Location, + pub classes: Option>, } #[derive(Deserialize, Default, Debug)] diff --git a/tests/cucumber.rs b/tests/cucumber.rs index f98293de7..c96e18620 100644 --- a/tests/cucumber.rs +++ b/tests/cucumber.rs @@ -16,8 +16,7 @@ use core::panic; use cucumber::{ codegen::ParametersProvider, gherkin::{Step, Table}, - given, then, when, - World, + given, then, when, World, }; use futures::{future, FutureExt}; use geo_types::Point; @@ -1124,6 +1123,28 @@ fn request_route(world: &mut OSRMWorld, step: &Step, state: String) { }; assert_eq!(actual, expectation); + }, + "classes" => { + // '[' + s.intersections.map(i => '(' + (i.classes ? i.classes.join(',') : '') + ')').join(',') + ']'); + + let (_, response) = route_result.as_ref().expect("no route response in 'classes'"); + let first_route = &response.routes[0]; + let first_leg = first_route.legs.first().expect("no first leg on route"); + let actual_classes = first_leg.steps.iter().map(|step| { + "[".to_string() + + &step.intersections.iter().map(|intersection| { + let tmp = match &intersection.classes { + Some(classes) => { + classes.join(",") + }, + None => "".to_string(), + }; + "(".to_string() + &tmp + ")" + }).collect::>().join(",") + "]" + }).collect::>().join(","); + + let expected_classes = test_case.get("classes").expect("test case classes not found"); + assert_eq!(&actual_classes, expected_classes, "classes don't match"); } // TODO: more checks need to be implemented _ => { @@ -1151,7 +1172,7 @@ fn main() { future::ready(()).boxed() }) // .with_writer(DotWriter::default().normalized()) - .filter_run("features/", |fe, r, sc| { + .filter_run("features", |fe, r, sc| { // .filter_run("features/bicycle/classes.feature", |fe, r, sc| { let tag = "todo".to_string(); !sc.tags.contains(&tag)