mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
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