Improve:KeyControl test tool.

This commit is contained in:
Fancy code 2024-02-16 21:44:01 -08:00
parent 48a5c6f4ba
commit 5989d9df2d
4 changed files with 57 additions and 10 deletions

View File

@ -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) {}
};

View File

@ -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);

View File

@ -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)

View File

@ -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);