#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({"预览状态"}), "wtf"); fsm->handleEvent("确认_改变样式"); CCASSERT(fsm->getRunningStateNames() == std::vector({"待机状态"}), "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({"待机状态"}), "wtf"); fsm->handleEvent("长按TOUCH"); CCASSERT(fsm->getRunningStateNames() == std::vector({"预览状态"}), "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({"待机状态"}), "wtf"); fsm->handleEvent("长按TOUCH1"); fsm->handleEvent("长按TOUCH"); CCASSERT(fsm->getRunningStateNames() == std::vector({"预览状态"}), "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({"开始待机状态"}), "wtf"); fsm->handleEvent("建造"); CCASSERT(fsm->getRunningStateNames() == std::vector({"建造1步后待机状态"}), "wtf"); fsm->handleEvent("建造"); CCASSERT(fsm->getRunningStateNames() == std::vector({"结束待机状态"}), "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::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({"旧样式状态","待机状态"}), "wtf"); fsm->handleEvent("建造"); CCASSERT(fsm->getRunningStateNames() == std::vector({"新样式状态","待机状态"}), "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({"新样式状态","待机状态"}), "wtf"); fsm->handleEvent("长按TOUCH"); CCASSERT(fsm->getRunningStateNames() == std::vector({"新样式状态","预览状态"}), "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({"旧样式状态","待机状态"}), "wtf"); fsm->handleEvent("建造"); CCASSERT(fsm->getRunningStateNames() == std::vector({"旧样式状态","建造1步后待机状态"}), "wtf"); fsm->handleEvent("建造"); CCASSERT(fsm->getRunningStateNames() == std::vector({"新样式状态","待机状态"}), "wtf"); FSMLOG("[单元测试][hfsmTest5结束]"); } void TestStateDelegate::beforeSwitch(State* state, const std::vector& stateActInfo, StateActInfo evt, std::function actFinishCb) { StateDelegate::beforeSwitch(state, stateActInfo, evt, actFinishCb); } void TestStateDelegate::execStateAct(State* state, const StateActInfo* stateActInfo, const std::map& eventParams, const std::function& actFinishCb) { std::vector 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