mod common;
#[cfg(test)]
mod road_network_test {
use maliput::common::MaliputError;
use std::{any::Any, collections::HashMap};
#[test]
fn road_network_new() {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/TShapeRoad.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = maliput::api::RoadNetwork::new(
maliput::api::RoadNetworkBackend::MaliputMalidrive,
&road_network_properties,
);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with TShapeRoad.xodr"
);
let rn = rn_res.unwrap();
let rg = rn.road_geometry();
assert_eq!(rg.id(), "my_rg_from_rust");
}
#[test]
fn road_network_new_error() {
let invalid_xodr_path = "/hopefully/this/path/does/not/exist.xodr";
let road_network = maliput::api::RoadNetwork::new(
maliput::api::RoadNetworkBackend::MaliputMalidrive,
&HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", invalid_xodr_path),
]),
);
assert!(
road_network.is_err(),
"Expected an error when creating RoadNetwork with an invalid xodr_path"
);
match road_network {
Ok(_) => panic!("Expected RoadNetwork creation to fail with an invalid xodr_path"),
Err(e) => {
assert!(
e.type_id() == std::any::TypeId::of::<MaliputError>(),
"Expected MaliputError, got: {:?}",
e.type_id()
);
if let maliput::common::MaliputError::AssertionError(_) = e {
} else {
panic!("Expected MaliputError::AssertionError, got: {:?}", e);
}
}
}
}
#[test]
fn road_network_description_parser_error_test() {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/tests/data/xodr/IllFormed.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = maliput::api::RoadNetwork::new(
maliput::api::RoadNetworkBackend::MaliputMalidrive,
&road_network_properties,
);
assert!(
rn_res.is_err(),
"Expected RoadNetworkDescriptionParserError with IllFormed.xodr"
);
match rn_res {
Ok(_) => panic!("Expected RoadNetwork creation to fail with an ill formed XODR."),
Err(e) => {
assert!(
e.type_id() == std::any::TypeId::of::<MaliputError>(),
"Expected MaliputError, got: {:?}",
e.type_id()
);
if let maliput::common::MaliputError::RoadNetworkDescriptionParserError(_) = e {
} else {
panic!("Expected MaliputError::RoadNetworkDescriptionParserError, got: {:?}", e);
}
}
}
}
#[test]
fn create_malidrive_road_network_xodr_only() {
let rn = super::common::create_malidrive_road_network("TShapeRoad.xodr", None, None);
assert_eq!(rn.road_geometry().id(), "my_rg_from_rust");
}
#[test]
fn create_malidrive_road_network_with_yaml() {
let rn = super::common::create_malidrive_road_network("TShapeRoad.xodr", Some("TShapeRoad.yaml"), None);
assert_eq!(rn.road_geometry().id(), "my_rg_from_rust");
assert!(!rn.traffic_light_book().traffic_lights().is_empty());
}
#[test]
fn create_malidrive_road_network_with_traffic_signal_db() {
let rn = super::common::create_malidrive_road_network(
"TwoRoadsWithTrafficSigns.xodr",
None,
Some("traffic_signal_db_example.yaml"),
);
assert_eq!(rn.road_geometry().id(), "my_rg_from_rust");
assert_eq!(rn.traffic_sign_book().traffic_signs().len(), 2);
}
}