00001
00002
00003
00004
00005
00006
00007
00008
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
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
00043
if ( (pFsm->
isObjectConfigured() ==
NOT_CONFIGURED) )
00044 { setTestResult(
TEST_FAILURE,
00045
"Wrong FSM configuration status after configuration was completed");
00046
return;
00047 }
00048
00049
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
00061 pFsm->
activate();
00062 pFsm->
activate();
00063
00064
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
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
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
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
00107 pFsm->
activate();
00108 pFsm->
activate();
00109
00110
00111
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
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
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 }