diff --git a/engine/src/OpenScenarioEngine.cpp b/engine/src/OpenScenarioEngine.cpp index fd160301d4baefe38683707f8f250963e23d93da..b1ffd41ad141b52fccc1c68691748a8d2e662a54 100644 --- a/engine/src/OpenScenarioEngine.cpp +++ b/engine/src/OpenScenarioEngine.cpp @@ -95,6 +95,8 @@ void OpenScenarioEngine::Init() controller_creator_->GetControllerService()->ResetControllerMappings(); + SetEnvironmentDefaults(); + ParseScenarioFile(); LoadRoadNetwork(); @@ -104,8 +106,6 @@ void OpenScenarioEngine::Init() CreateControllers(); CreateAndInitStoryboard(); - - SetEnvironmentDefaults(); } mantle_api::ScenarioInfo OpenScenarioEngine::GetScenarioInfo() const @@ -333,7 +333,8 @@ mantle_api::Time OpenScenarioEngine::GetDuration() const for (const auto& condition_group : condition_groups) { auto conditions = condition_group->GetConditions(); - std::for_each(conditions.begin(), conditions.end(), [&durations](const auto& condition) { + std::for_each(conditions.begin(), conditions.end(), [&durations](const auto& condition) + { if (const auto& by_val_condition = condition->GetByValueCondition()) { if (const auto& sim_time_condition = by_val_condition->GetSimulationTimeCondition()) diff --git a/engine/src/Utils/ControllerCreator.cpp b/engine/src/Utils/ControllerCreator.cpp index 1b0133123277988caff968f452cbc76fcf78775b..540dc1e2fb2f22c51f5b07ef4ef773da651d00c7 100644 --- a/engine/src/Utils/ControllerCreator.cpp +++ b/engine/src/Utils/ControllerCreator.cpp @@ -136,7 +136,7 @@ void ControllerCreator::CreateControllers(const std::vector<std::shared_ptr<NET_ if (detail::IsNotControllable(scenario_object)) { Logger::Info("ControllerCreator: No controller created for non-vehicle and non-pedestrian type scenario object \"" + entity_name + "\""); - return; + continue; } const auto entity = environment_.GetEntityRepository().Get(entity_name); diff --git a/engine/tests/OpenScenarioEngineTest.cpp b/engine/tests/OpenScenarioEngineTest.cpp index b28445c33401b92ce276e5e238db5d17783d33c5..baa8fdfa4bd786608fbbe468dc93859ffadbea4c 100644 --- a/engine/tests/OpenScenarioEngineTest.cpp +++ b/engine/tests/OpenScenarioEngineTest.cpp @@ -46,11 +46,15 @@ class OpenScenarioEngineTest : public OpenScenarioEngineTestBase std::string controller_name {"TestController"s}; }; -TEST_F(OpenScenarioEngineTest, GivenValidScenarioFile_WhenInitialized_ThenDefaultRoutingBehaviourIsSetToRandom) +TEST_F(OpenScenarioEngineTest, GivenValidScenarioFile_WhenInitialized_ThenDefaultRoutingBehaviourIsSetBeforeControllersAreCreated) { std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_}; - EXPECT_CALL(*env_, SetDefaultRoutingBehavior(mantle_api::DefaultRoutingBehavior::kRandomRoute)).Times(1); + { + testing::InSequence s; + EXPECT_CALL(*env_, SetDefaultRoutingBehavior(mantle_api::DefaultRoutingBehavior::kRandomRoute)).Times(1); + EXPECT_CALL(env_->GetControllerRepository(), Create(_)).Times(2); + } OpenScenarioEngine::v1_2::OpenScenarioEngine engine(xosc_file_path, env_); diff --git a/engine/tests/Utils/ControllerCreatorTest.cpp b/engine/tests/Utils/ControllerCreatorTest.cpp index b56659c95d09e6eb2585f2172d5b49bdb3862e49..3273dee9ba12478d19cb6402367062fcf1d83131 100644 --- a/engine/tests/Utils/ControllerCreatorTest.cpp +++ b/engine/tests/Utils/ControllerCreatorTest.cpp @@ -144,6 +144,17 @@ TEST_F(ControllerCreator, GivenUncontrollableScenarioObject_WhenCreateIsCalled_T EXPECT_THAT(LOGGER->LastLogMessage(), HasSubstr("test_entity")); } +TEST_F(ControllerCreator, GivenUncontrollableAndControllableScenarioObject_WhenCreateIsCalled_ThenControllerOnlyForControllableObjectIsCreated) +{ + SETUP_ENTITY("uncontrollable_entity", 1234, false, false); + SETUP_ENTITY("entity_2", 5678, true, false); + + EXPECT_CALL(mockControllerRepository, Create(_)).Times(1).WillOnce(ReturnRef(mockController)); + OpenScenarioEngine::v1_2::ControllerCreator controller_creator(mockEnvironment); + + controller_creator.CreateControllers(scenario_objects); +} + TEST_F(ControllerCreator, GivenScenarioObjectWithController_WhenCreateIsCalled_ThenCreatesDefaultAndUserDefinedController) { SETUP_ENTITY("test_entity", 1234, true, true);