#include <mitkStateMachineFactory.h>#include <mitkState.h>#include "mitkTestingMacros.h"#include <mitkStandardFileLocations.h>#include <mitkInteractionConst.h>Go to the source code of this file.
Functions | |
| int | mitkStateMachineFactoryTest (int, char *[]) |
| int mitkStateMachineFactoryTest | ( | int | , |
| char * | [] | ||
| ) |
Definition at line 24 of file mitkStateMachineFactoryTest.cpp.
References mitk::AcDONOTHING, mitk::Transition::AddAction(), mitk::StateMachineFactory::AddStateMachinePattern(), mitk::EIDNULLEVENT, mitk::StandardFileLocations::GetInstance(), mitk::StateMachineFactory::GetStartState(), mitk::StateMachineFactory::LoadBehavior(), mitk::StateMachineFactory::LoadStandardBehavior(), MITK_TEST_BEGIN, MITK_TEST_CONDITION_REQUIRED, MITK_TEST_END, mitk::Action::New(), mitk::State::New(), mitk::StateMachineFactory::New(), and mitk::Transition::SetNextState().
{
MITK_TEST_BEGIN("StateMachineFactory")
//create statemachinefactory
mitk::StateMachineFactory* statemachineFactory = mitk::StateMachineFactory::New();
//load standard behavior
MITK_TEST_CONDITION_REQUIRED(statemachineFactory->LoadStandardBehavior(),"Testing LoadStandardBehavior(): ")
//get the first state of the statemachine "global" (mitkGlobalInteraction)
mitk::State::Pointer state = statemachineFactory->GetStartState("global");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing GetStartState() of GlobalInteraction state machine pattern: ")
std::string xmlFileName1( mitk::StandardFileLocations::GetInstance()->FindFile("TestStateMachine1.xml", "Core/Code/Testing/Data") );
MITK_TEST_CONDITION_REQUIRED(!xmlFileName1.empty(),"Getting xml file 1: ")
MITK_TEST_CONDITION_REQUIRED(statemachineFactory->LoadBehavior(xmlFileName1),"Parsing xml file 1: ")
state = statemachineFactory->GetStartState("test1");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing GetStartState() of test1 state machine pattern: ")
//global still accessible?
state = statemachineFactory->GetStartState("global");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if previous loaded state machine patterns are still accessible: ")
std::string xmlFileName2( mitk::StandardFileLocations::GetInstance()->FindFile("TestStateMachine2.xml", "Core/Code/Testing/Data") );
MITK_TEST_CONDITION_REQUIRED(!xmlFileName2.empty(),"Getting xml file 2: ")
MITK_TEST_CONDITION_REQUIRED(statemachineFactory->LoadBehavior(xmlFileName2),"Parsing xml file 2. Schould throw a fatal error due to already existing pattern name: ")
state = statemachineFactory->GetStartState("test4");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing GetStartState() of test4 state machine pattern: ")
state = statemachineFactory->GetStartState("global");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if previous loaded state machine pattern (global) is still accessible: ")
state = statemachineFactory->GetStartState("test1");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if previous loaded state machine pattern (test1) is still accessible: ")
//manually create a state machine pattern and add it to factory
std::string patternName("manuallyCreatedStateMachine");
mitk::StateMachineFactory::StateMachineMapType* allStatesMap = new mitk::StateMachineFactory::StateMachineMapType();
mitk::State::Pointer state1 = mitk::State::New("firstState", 1);
mitk::Transition* transition1 = new mitk::Transition("goto2", 2, mitk::EIDNULLEVENT);
mitk::Action::Pointer action1 = mitk::Action::New(mitk::AcDONOTHING);
transition1->AddAction(action1);
state1->AddTransition(transition1);
allStatesMap->insert(mitk::StateMachineFactory::StateMachineMapType::value_type(state1->GetId(), state1));
mitk::State::Pointer state2 = mitk::State::New("secondState", 2);
transition1->SetNextState(state2);
mitk::Transition* transition2 = new mitk::Transition("goto1", 1, mitk::EIDNULLEVENT);
mitk::Action::Pointer action2 = mitk::Action::New(mitk::AcDONOTHING);
transition2->AddAction(action2);
transition2->SetNextState(state1);
state2->AddTransition(transition2);
allStatesMap->insert(mitk::StateMachineFactory::StateMachineMapType::value_type(state2->GetId(), state2));
//now add to factory
statemachineFactory->AddStateMachinePattern(patternName.c_str(), state1, allStatesMap);
//check if it is accessable
state = statemachineFactory->GetStartState("global");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if previous loaded state machine pattern (global) is still accessible: ")
state = statemachineFactory->GetStartState("test1");
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if previous loaded state machine pattern (test1) is still accessible: ")
state = statemachineFactory->GetStartState(patternName.c_str());
MITK_TEST_CONDITION_REQUIRED(state.IsNotNull(),"Testing if manually created and added state machine pattern is accessible: ")
statemachineFactory->Delete();
//states, transitions and actions are freed in StateMachineFactory
// always end with this!
MITK_TEST_END();
}
1.7.2