Improve:KeyControl test tool.
This commit is contained in:
		
							parent
							
								
									48a5c6f4ba
								
							
						
					
					
						commit
						5989d9df2d
					
				|  | @ -40,7 +40,6 @@ public: | |||
|     VKeyHal() = default; | ||||
|     virtual ~VKeyHal() = default; | ||||
|     virtual void CheckKeyStatus(void) {} | ||||
|     // virtual const std::string GetKeyName(void) { return "undefine"; }
 | ||||
|     virtual void GetHoldPressingTimeMs(long int &holdTimeMs, VirtualKeyEvent &event) {} | ||||
|     virtual void SetKeyMonitor(std::shared_ptr<VKeyHalMonitor> &monitor) {} | ||||
| }; | ||||
|  |  | |||
|  | @ -79,6 +79,13 @@ public: | |||
|     void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override; | ||||
|     const std::string GetKeyName(void) override { return mKeyName; } | ||||
| 
 | ||||
| private: | ||||
|     virtual StatusCode KeyEventTriggerTrace(const std::string &keyName, const KeyEvent &event, | ||||
|                                             const unsigned int &timeMs) | ||||
|     { | ||||
|         return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     const std::string mKeyName; | ||||
|     std::weak_ptr<VKeyHalMonitor> mMonitor; | ||||
|  | @ -88,7 +95,13 @@ class KeyControlMock : public KeyControlTest | |||
| public: | ||||
|     KeyControlMock(const std::string &keyName); | ||||
|     virtual ~KeyControlMock() = default; | ||||
|     // void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override;
 | ||||
|     void SetKeyEvent(const KeyHalEvent &event); | ||||
|     bool SetKeyClick(const unsigned int &pressingTimeMs = 200); | ||||
|     MOCK_METHOD3(KeyEventTriggerTrace, StatusCode(const std::string &, const KeyEvent &, const unsigned int &)); | ||||
| 
 | ||||
| private: | ||||
|     std::mutex mMutex; | ||||
| }; | ||||
| class HalTestTool | ||||
| { | ||||
|  | @ -101,6 +114,9 @@ public: | |||
|     void SetKeyEvent(const std::string keyName, const KeyHalEvent &event); | ||||
|     void SetKeyClick(const std::string &keyName, const unsigned int &pressingTimeMs = 200); | ||||
| 
 | ||||
| private: | ||||
|     void KeyEventHappendOnce(std::shared_ptr<KeyControlMock> &mock, const unsigned int &pressingTimeMs); | ||||
| 
 | ||||
| private: | ||||
|     void HalMockInit(std::shared_ptr<HalCppMock> &mock); | ||||
|     void SetAllKeysResult(std::shared_ptr<HalCppMock> &mock, std::map<std::string, std::shared_ptr<VKeyHal>> &allKeys); | ||||
|  |  | |||
|  | @ -61,6 +61,7 @@ void KeyControlTest::CheckKeyStatus(void) | |||
| void KeyControlTest::KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) | ||||
| { | ||||
|     LogInfo("KeyEventTrigger keyName = %s, event = %s, time = %u\n", keyName.c_str(), PrintKeyEvent(event), timeMs); | ||||
|     KeyEventTriggerTrace(keyName, event, timeMs); | ||||
|     auto monitor = mMonitor.lock(); | ||||
|     if (mMonitor.expired()) { | ||||
|         LogError("monitor is nullptr.\n"); | ||||
|  | @ -77,6 +78,24 @@ void KeyControlMock::SetKeyEvent(const KeyHalEvent &event) | |||
|     //
 | ||||
|     KeyHalEventTrigger(event); | ||||
| } | ||||
| bool KeyControlMock::SetKeyClick(const unsigned int &pressingTimeMs) | ||||
| { | ||||
|     if (mMutex.try_lock()) { | ||||
|         auto keyClickThread = [=](std::shared_ptr<KeyControlMock> key) { | ||||
|             key->KeyHalEventTrigger(KeyHalEvent::PRESSING); | ||||
|             std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs)); | ||||
|             key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); | ||||
|             mMutex.unlock(); | ||||
|         }; | ||||
|         std::shared_ptr<KeyControl> tmp = KeyControl::shared_from_this(); | ||||
|         std::shared_ptr<KeyControlMock> key = std::dynamic_pointer_cast<KeyControlMock>(tmp); | ||||
|         std::thread clickThread = std::thread(keyClickThread, key); | ||||
|         clickThread.detach(); | ||||
|         return true; | ||||
|     } | ||||
|     LogWarning("SetKeyClick failed, becase key was lock.\n"); | ||||
|     return false; | ||||
| } | ||||
| void HalTestTool::Init(void) | ||||
| { | ||||
|     mHalMock = std::make_shared<HalCppMock>(); | ||||
|  | @ -109,13 +128,23 @@ void HalTestTool::SetKeyClick(const std::string &keyName, const unsigned int &pr | |||
|         LogError("Can't set key event, key not found.\n"); | ||||
|         return; | ||||
|     } | ||||
|     auto keyClickThread = [=](std::shared_ptr<KeyControlMock> key) { | ||||
|         key->KeyHalEventTrigger(KeyHalEvent::PRESSING); | ||||
|         std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs)); | ||||
|         key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); | ||||
|     }; | ||||
|     std::thread clickThread = std::thread(keyClickThread, key); | ||||
|     clickThread.detach(); | ||||
|     if (key->SetKeyClick(pressingTimeMs)) { | ||||
|         KeyEventHappendOnce(key, pressingTimeMs); | ||||
|     } | ||||
| } | ||||
| void HalTestTool::KeyEventHappendOnce(std::shared_ptr<KeyControlMock> &mock, const unsigned int &pressingTimeMs) | ||||
| { | ||||
|     constexpr int CLICK_EVENT_HAPPENED_ONLY_ONCE = 1; | ||||
|     if (KEY_ACTION_SHORT_CLICK <= pressingTimeMs && pressingTimeMs < KEY_ACTION_HOLD_DWON) { | ||||
|         EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::SHORT_CLICK, _)) | ||||
|             .Times(CLICK_EVENT_HAPPENED_ONLY_ONCE) | ||||
|             .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); | ||||
|     } | ||||
|     if (KEY_ACTION_HOLD_DWON <= pressingTimeMs) { | ||||
|         EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::HOLD_DOWN, _)) | ||||
|             .Times(AtLeast(1)) | ||||
|             .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); | ||||
|     } | ||||
| } | ||||
| void HalTestTool::SetAllKeysResult(std::shared_ptr<HalCppMock> &mock, | ||||
|                                    std::map<std::string, std::shared_ptr<VKeyHal>> &allKeys) | ||||
|  |  | |||
|  | @ -60,8 +60,11 @@ long int KeyControl::GetHoldPressingTimeMs(void) | |||
| } | ||||
| void KeyControl::KeyPressingTrigger(const std::string &key) | ||||
| { | ||||
|     if (mLongClickTime <= mPressingTime) // Do not support long click, it should be count in application code.
 | ||||
|     { | ||||
|     if (mLongClickTime <= mPressingTime) { | ||||
|         /**
 | ||||
|          * @brief Long press events are not currently supported here. Developers believe that it is better to handle | ||||
|          * long press events at the application level. | ||||
|          */ | ||||
|     } | ||||
|     if (mPressingTime != KEY_NOT_PRESSING && mPressingTime % KEY_ACTION_HOLD_DWON == 0) { | ||||
|         KeyEventTrigger(key, KeyEvent::HOLD_DOWN, mPressingTime); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Fancy code
						Fancy code