123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- #include "RUFsmUnitTest.h"
- #include "RUStateMachineLoader.h"
- #include "RUDelegateFactory.h"
- #include "RUState.h"
- #define FSM_TEST_FILE_1 "家装物件-单层-新样式-有预览"
- #define FSM_TEST_FILE_2 "家装物件-单层-新样式-无预览"
- #define FSM_TEST_FILE_3 "家装物件-单层-旧样式-0步建造"
- #define FSM_TEST_FILE_4 "家装物件-单层-旧样式-1步建造-开始有待机-结束有待机"
- #define FSM_TEST_FILE_5 "家装物件-多层-1旧1新"
- #define FSM_TEST_FILE_6 "家装物件-单层-旧样式-2步建造-开始无待机-结束无待机"
- NS_RU_BEGIN
- void FsmUnitTest::runTest()
- {
- //单层状态机测试
- fsmTest1();
- fsmTest2();
- fsmTest3();
- fsmTest4();
- // fsmTest5();
- fsmTest6();
- fsmTest7();
-
- //分层状态机测试
- hfsmTest1();
- hfsmTest2();
- hfsmTest3();
- hfsmTest4();
- hfsmTest5();
- }
- void FsmUnitTest::fsmTest1()
- {
- FSMLOG("[单元测试][fsmTest1开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1);
- fsm->debugInfo();
- FSMLOG("[单元测试][fsmTest1结束]");
- }
- void FsmUnitTest::fsmTest2()
- {
- FSMLOG("[单元测试][fsmTest2开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1);
- fsm->debugInfo();
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"预览状态"}), "wtf");
- fsm->handleEvent("确认_改变样式");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"待机状态"}), "wtf");
- FSMLOG("[单元测试][fsmTest2结束]");
- }
- void FsmUnitTest::fsmTest3()
- {
- FSMLOG("[单元测试][fsmTest3开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1);
- fsm->debugInfo();
- fsm->setRunningStateName("待机状态");
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"待机状态"}), "wtf");
- fsm->handleEvent("长按TOUCH");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"预览状态"}), "wtf");
- FSMLOG("[单元测试][fsmTest3结束]");
- }
- void FsmUnitTest::fsmTest4()
- {
- FSMLOG("[单元测试][fsmTest4开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1);
- fsm->debugInfo();
- fsm->setRunningStateName("待机状态");
- fsm->handleEvent("长按TOUCH");
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"待机状态"}), "wtf");
- fsm->handleEvent("长按TOUCH1");
- fsm->handleEvent("长按TOUCH");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"预览状态"}), "wtf");
- FSMLOG("[单元测试][fsmTest4结束]");
- }
- void FsmUnitTest::fsmTest5()
- {
- FSMLOG("[单元测试][fsmTest5开始]");
- auto testStateDelegateCreator = [=](void){
- TestStateDelegate* stateDelegate = new TestStateDelegate();
- return stateDelegate;
- };
- DelegateFactory::getInstance()->registerStateDelegateCreator("家装物件", testStateDelegateCreator);
-
- std::string * userObj4StateDelegate = new std::string("我是状态代理类的userObject");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1, userObj4StateDelegate);
-
- fsm->debugInfo();
- fsm->runMachine();
- FSMLOG("[单元测试][fsmTest5结束]");
- }
- void FsmUnitTest::fsmTest6()
- {
- FSMLOG("[单元测试][fsmTest6开始]");
- auto testStateDelegateCreator = [=](void){
- TestStateDelegate* stateDelegate = new TestStateDelegate();
- return stateDelegate;
- };
- DelegateFactory::getInstance()->registerStateDelegateCreator("家装物件", testStateDelegateCreator);
-
- std::string * userObj4StateDelegate = new std::string("我是状态代理类的userObject");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_1, userObj4StateDelegate);
-
- fsm->debugInfo();
- fsm->runMachine();
- fsm->handleEvent("确认_改变样式",{{"key1","value1"},{"key2","value2"}});
- FSMLOG("[单元测试][fsmTest6结束]");
- }
- void FsmUnitTest::fsmTest7()
- {
- FSMLOG("[单元测试][fsmTest7开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_6);
- fsm->debugInfo();
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"开始待机状态"}), "wtf");
- fsm->handleEvent("建造");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"建造1步后待机状态"}), "wtf");
- fsm->handleEvent("建造");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"结束待机状态"}), "wtf");
- FSMLOG("[单元测试][fsmTest7结束]");
- }
- void FsmUnitTest::hfsmTest1()
- {
- FSMLOG("[单元测试][hfsmTest1开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_5);
- fsm->debugInfo();
- FSMLOG("[单元测试][hfsmTest1结束]");
- }
- void FsmUnitTest::hfsmTest2()
- {
- FSMLOG("[单元测试][hfsmTest2开始]");
- std::map<std::vector<std::string>, std::string> stateMachine4FullStatePath = {
- {{"旧样式状态"},FSM_TEST_FILE_3},
- {{"旧样式状态","待机状态"},FSM_TEST_FILE_3},
- {{"新样式状态"},FSM_TEST_FILE_2}
- };
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_5);
- fsm->debugInfo();
- FSMLOG("[单元测试][hfsmTest2结束]");
- }
- void FsmUnitTest::hfsmTest3()
- {
- FSMLOG("[单元测试][hfsmTest3开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_5);
- fsm->debugInfo();
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"旧样式状态","待机状态"}), "wtf");
- fsm->handleEvent("建造");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"新样式状态","待机状态"}), "wtf");
- FSMLOG("[单元测试][hfsmTest3结束]");
- }
- void FsmUnitTest::hfsmTest4()
- {
- FSMLOG("[单元测试][hfsmTest4开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_5);
- fsm->debugInfo();
- fsm->setRunningStateNames({"新样式状态","待机状态"});
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"新样式状态","待机状态"}), "wtf");
- fsm->handleEvent("长按TOUCH");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"新样式状态","预览状态"}), "wtf");
- FSMLOG("[单元测试][hfsmTest4结束]");
- }
- void FsmUnitTest::hfsmTest5()
- {
- FSMLOG("[单元测试][hfsmTest5开始]");
- StateMachine* fsm = StateMachineLoader::getInstance()->createStateMachine(FSM_TEST_FILE_5);
- fsm->debugInfo();
- fsm->runMachine();
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"旧样式状态","待机状态"}), "wtf");
- fsm->handleEvent("建造");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"旧样式状态","建造1步后待机状态"}), "wtf");
- fsm->handleEvent("建造");
- CCASSERT(fsm->getRunningStateNames() == std::vector<std::string>({"新样式状态","待机状态"}), "wtf");
- FSMLOG("[单元测试][hfsmTest5结束]");
- }
- void TestStateDelegate::beforeSwitch(State* state, const std::vector<StateActInfo>& stateActInfo, StateActInfo evt, std::function<void(void)> actFinishCb) {
- StateDelegate::beforeSwitch(state, stateActInfo, evt, actFinishCb);
- }
- void TestStateDelegate::execStateAct(State* state, const StateActInfo* stateActInfo, const std::map<string, string>& eventParams, const std::function<void(void)>& actFinishCb)
- {
- std::vector<std::string> fullStatePath = state->getFullStatePath();
- std::string* userObject = (std::string *)getUserObject();
- if(userObject){
- FSMLOG("[状态代理的userObject\"%s\"]",userObject->c_str());
- }
- /// 打印日志
- std::string stateLog;
- for (int i = 0; i < fullStatePath.size(); i++) {
- if (i == fullStatePath.size() - 1) {
- stateLog = stateLog + fullStatePath[i];
- }else{
- stateLog = stateLog + fullStatePath[i] + "#";
- }
- }
- std::string paramsLog;
- paramsLog = paramsLog+"{";
- for(auto paramIter : eventParams ){
- std::string paramKey = paramIter.first;
- std::string paramValue = paramIter.second;
- paramsLog = paramsLog + "\"" + paramKey +"\":\"" + paramValue +"\":";
- }
- paramsLog = paramsLog+"}";
-
- FSMLOG("[执行动作...][状态名:\"%s\",事件参数:%s]",stateLog.c_str(),paramsLog.c_str());
-
- if (actFinishCb) {
- actFinishCb();
- }
- }
- NS_RU_END
|