Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

TestCaseFSM_2.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCaseFSM_2.cpp 00005 // 00006 // Version 1.1 00007 // Date 04.04.03 00008 // Author A. Pasetti (P&P Software) 00009 00010 #include "TestCaseFSM_2.h" 00011 #include "../GeneralInclude/CompilerSwitches.h" 00012 #include "../GeneralInclude/ClassId.h" 00013 #include "../GeneralInclude/BasicTypes.h" 00014 #include "../GeneralInclude/Constants.h" 00015 #include "../FSM/CC_FSM.h" 00016 #include "../FSM/DC_DummyFsmState.h" 00017 #include "../FSM/DC_FsmEvent.h" 00018 #include "../Base/CC_RootObject.h" 00019 #include "../Event/DC_EventRepository.h" 00020 00021 TestCaseFSM_2::TestCaseFSM_2(void) : 00022 TestCaseGenericSetUp(ID_FSM*10+2,"TestCaseFSM_2") { 00023 return; 00024 } 00025 00026 void TestCaseFSM_2::runTestCase(void) { 00027 00028 CC_FSM* pFsm = new CC_FSM(); 00029 00030 // Configure the FSM 00031 pFsm->setNumberOfStates(4); 00032 00033 DC_DummyFsmState* pState[4]; 00034 for (TD_FsmStateIndex i=0; i<pFsm->getNumberOfStates(); i++) 00035 pState[i] = new DC_DummyFsmState(); 00036 00037 for (TD_FsmStateIndex i=0; i<pFsm->getNumberOfStates(); i++) 00038 pFsm->setState(i,pState[i]); 00039 00040 pFsm->reset(); 00041 00042 // FSM object should now be configured 00043 if ( (pFsm->isObjectConfigured() == NOT_CONFIGURED) ) 00044 { setTestResult(TEST_FAILURE, 00045 "Wrong FSM configuration status after configuration was completed"); 00046 return; 00047 } 00048 00049 // Create and configure the FsmEvents 00050 DC_FsmEvent* pFsmEvt_1 = new DC_FsmEvent(); 00051 DC_FsmEvent* pFsmEvt_2 = new DC_FsmEvent(); 00052 DC_FsmEvent* pFsmEvt_3 = new DC_FsmEvent(); 00053 pFsmEvt_1->setTargetFsm(pFsm); 00054 pFsmEvt_2->setTargetFsm(pFsm); 00055 pFsmEvt_3->setTargetFsm(pFsm); 00056 pFsmEvt_1->setTargetState(1); 00057 pFsmEvt_2->setTargetState(2); 00058 pFsmEvt_3->setTargetState(0); 00059 00060 // Activate FSM twice (just to exercise the FSM) 00061 pFsm->activate(); 00062 pFsm->activate(); 00063 00064 // Fire FsmEvent 1 and check transition 00065 pFsmEvt_1->execute(); 00066 if ( pFsm->getCurrentState() != 0) 00067 { setTestResult(TEST_FAILURE, 00068 "No state transition should have occurred"); 00069 return; 00070 } 00071 pFsm->activate(); 00072 if ( pFsm->getCurrentState() != 1) 00073 { setTestResult(TEST_FAILURE, 00074 "Wrong state after FsmEvt_1 firing"); 00075 return; 00076 } 00077 00078 // Check that the correct event was created 00079 DC_EventRepository* pRep = CC_RootObject::getEventRepository(); 00080 pRep->latest(); 00081 if ( pRep->getEventType() != EVT_FSM_TRANSITION ) 00082 { setTestResult(TEST_FAILURE, 00083 "Wrong event after state transition"); 00084 return; 00085 } 00086 00087 // Activate FSM twice and check that no state transition takes place 00088 pFsm->activate(); 00089 pFsm->activate(); 00090 if ( pFsm->getCurrentState() != 1) 00091 { setTestResult(TEST_FAILURE, 00092 "Wrong state after activation of FSM"); 00093 return; 00094 } 00095 00096 // Fire events 2 and 3 and check that only second firing has an effect 00097 pFsmEvt_2->execute(); 00098 pFsmEvt_3->execute(); 00099 pFsm->activate(); 00100 if ( pFsm->getCurrentState() != 0) 00101 { setTestResult(TEST_FAILURE, 00102 "Wrong state after FsmEvt_2 and FsmEvt_3 firing"); 00103 return; 00104 } 00105 00106 // Activate FSM twice (just to exercise state 0) 00107 pFsm->activate(); 00108 pFsm->activate(); 00109 00110 // Disable transitions into state 2, fire FsmEvt_2 and check that 00111 // no transition takes place 00112 pFsm->setTransitionEnableStatus(2,DISABLED); 00113 pFsmEvt_2->execute(); 00114 pFsm->activate(); 00115 if ( pFsm->getCurrentState() != 0) 00116 { setTestResult(TEST_FAILURE, 00117 "Wrong state after FsmEvt_2 firing"); 00118 return; 00119 } 00120 00121 // Check that the correct event was created 00122 pRep->latest(); 00123 if ( pRep->getEventType() != EVT_FSM_TRANSITION_DISABLED ) 00124 { setTestResult(TEST_FAILURE, 00125 "Wrong event after state transition"); 00126 return; 00127 } 00128 00129 // Attempt to disable transition into non-existent state 00130 if (isNonNominalCheckAllowed()) { 00131 pFsm->setTransitionEnableStatus(4,DISABLED); 00132 pRep->latest(); 00133 if ( pRep->getEventType() != EVT_ILLEGAL_FS ) 00134 { setTestResult(TEST_FAILURE, 00135 "Failure of non-nominal behaviour check"); 00136 return; 00137 } 00138 } 00139 00140 setTestResult(TEST_SUCCESS,"Test Successful"); 00141 return; 00142 }
Copyright 2003 P&P Software GmbH - All Rights Reserved