1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include "event_util_test.h" 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#include <iomanip> 19c29fa5a6Sopenharmony_ci 20c29fa5a6Sopenharmony_ci#include "mmi_log.h" 21c29fa5a6Sopenharmony_ci 22c29fa5a6Sopenharmony_ci#undef MMI_LOG_TAG 23c29fa5a6Sopenharmony_ci#define MMI_LOG_TAG "EventUtilTest" 24c29fa5a6Sopenharmony_ci 25c29fa5a6Sopenharmony_cinamespace OHOS { 26c29fa5a6Sopenharmony_cinamespace MMI { 27c29fa5a6Sopenharmony_cinamespace { 28c29fa5a6Sopenharmony_ciconstexpr int32_t TIME_WAIT_FOR_EVENT { 1000 }; 29c29fa5a6Sopenharmony_ciconstexpr int32_t SEC_TO_NANOSEC { 1000000000 }; 30c29fa5a6Sopenharmony_ci} // namespace 31c29fa5a6Sopenharmony_ci 32c29fa5a6Sopenharmony_civoid InputEventConsumer::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent) const 33c29fa5a6Sopenharmony_ci{ 34c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 35c29fa5a6Sopenharmony_ci RECV_FLAG flag = TestUtil->GetRecvFlag(); 36c29fa5a6Sopenharmony_ci if (flag == RECV_FLAG::RECV_FOCUS || flag == RECV_FLAG::RECV_MARK_CONSUMED) { 37c29fa5a6Sopenharmony_ci keyEvent->MarkProcessed(); 38c29fa5a6Sopenharmony_ci ASSERT_TRUE(keyEvent != nullptr); 39c29fa5a6Sopenharmony_ci TestUtil->AddEventDump(TestUtil->DumpInputEvent(keyEvent)); 40c29fa5a6Sopenharmony_ci } 41c29fa5a6Sopenharmony_ci} 42c29fa5a6Sopenharmony_ci 43c29fa5a6Sopenharmony_civoid InputEventConsumer::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent) const 44c29fa5a6Sopenharmony_ci{ 45c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 46c29fa5a6Sopenharmony_ci RECV_FLAG flag = TestUtil->GetRecvFlag(); 47c29fa5a6Sopenharmony_ci if (flag == RECV_FLAG::RECV_FOCUS || flag == RECV_FLAG::RECV_MARK_CONSUMED) { 48c29fa5a6Sopenharmony_ci pointerEvent->MarkProcessed(); 49c29fa5a6Sopenharmony_ci ASSERT_TRUE(pointerEvent != nullptr); 50c29fa5a6Sopenharmony_ci auto pointerAction = pointerEvent->GetPointerAction(); 51c29fa5a6Sopenharmony_ci if (pointerAction != PointerEvent::POINTER_ACTION_ENTER_WINDOW && 52c29fa5a6Sopenharmony_ci pointerAction != PointerEvent::POINTER_ACTION_LEAVE_WINDOW && 53c29fa5a6Sopenharmony_ci pointerAction != PointerEvent::POINTER_ACTION_PULL_IN_WINDOW && 54c29fa5a6Sopenharmony_ci pointerAction != PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW) { 55c29fa5a6Sopenharmony_ci TestUtil->AddEventDump(TestUtil->DumpInputEvent(pointerEvent)); 56c29fa5a6Sopenharmony_ci } 57c29fa5a6Sopenharmony_ci } 58c29fa5a6Sopenharmony_ci} 59c29fa5a6Sopenharmony_ci 60c29fa5a6Sopenharmony_civoid InputEventCallback::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent) const 61c29fa5a6Sopenharmony_ci{ 62c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 63c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 64c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_MONITOR); 65c29fa5a6Sopenharmony_ci ASSERT_TRUE(pointerEvent != nullptr); 66c29fa5a6Sopenharmony_ci TestUtil->AddEventDump(TestUtil->DumpInputEvent(pointerEvent)); 67c29fa5a6Sopenharmony_ci lastPointerEventId_ = pointerEvent->GetId(); 68c29fa5a6Sopenharmony_ci } 69c29fa5a6Sopenharmony_ci} 70c29fa5a6Sopenharmony_ci 71c29fa5a6Sopenharmony_civoid InputEventCallback::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent) const 72c29fa5a6Sopenharmony_ci{ 73c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 74c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 75c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_MONITOR); 76c29fa5a6Sopenharmony_ci ASSERT_TRUE(keyEvent != nullptr); 77c29fa5a6Sopenharmony_ci TestUtil->AddEventDump(TestUtil->DumpInputEvent(keyEvent)); 78c29fa5a6Sopenharmony_ci } 79c29fa5a6Sopenharmony_ci} 80c29fa5a6Sopenharmony_ci 81c29fa5a6Sopenharmony_civoid PriorityMiddleCallback::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent) const 82c29fa5a6Sopenharmony_ci{ 83c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 84c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 85c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_INTERCEPT); 86c29fa5a6Sopenharmony_ci ASSERT_TRUE(pointerEvent != nullptr); 87c29fa5a6Sopenharmony_ci TestUtil->AddEventDump("Call middle interceptor"); 88c29fa5a6Sopenharmony_ci } 89c29fa5a6Sopenharmony_ci} 90c29fa5a6Sopenharmony_ci 91c29fa5a6Sopenharmony_civoid PriorityMiddleCallback::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent) const 92c29fa5a6Sopenharmony_ci{ 93c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 94c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 95c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_INTERCEPT); 96c29fa5a6Sopenharmony_ci ASSERT_TRUE(keyEvent != nullptr); 97c29fa5a6Sopenharmony_ci TestUtil->AddEventDump("Call middle interceptor"); 98c29fa5a6Sopenharmony_ci } 99c29fa5a6Sopenharmony_ci} 100c29fa5a6Sopenharmony_ci 101c29fa5a6Sopenharmony_civoid PriorityHighCallback::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent) const 102c29fa5a6Sopenharmony_ci{ 103c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 104c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 105c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_INTERCEPT); 106c29fa5a6Sopenharmony_ci ASSERT_TRUE(pointerEvent != nullptr); 107c29fa5a6Sopenharmony_ci TestUtil->AddEventDump("Call high interceptor"); 108c29fa5a6Sopenharmony_ci } 109c29fa5a6Sopenharmony_ci} 110c29fa5a6Sopenharmony_ci 111c29fa5a6Sopenharmony_civoid PriorityHighCallback::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent) const 112c29fa5a6Sopenharmony_ci{ 113c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 114c29fa5a6Sopenharmony_ci if (TestUtil->GetRecvFlag() != RECV_FLAG::RECV_MARK_CONSUMED) { 115c29fa5a6Sopenharmony_ci TestUtil->SetRecvFlag(RECV_FLAG::RECV_INTERCEPT); 116c29fa5a6Sopenharmony_ci ASSERT_TRUE(keyEvent != nullptr); 117c29fa5a6Sopenharmony_ci TestUtil->AddEventDump("Call high interceptor"); 118c29fa5a6Sopenharmony_ci } 119c29fa5a6Sopenharmony_ci} 120c29fa5a6Sopenharmony_ci 121c29fa5a6Sopenharmony_civoid WindowEventConsumer::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent) const 122c29fa5a6Sopenharmony_ci{ 123c29fa5a6Sopenharmony_ci threadId_ = GetThisThreadId(); 124c29fa5a6Sopenharmony_ci MMI_HILOGD("Consumer callback keyEvent is threadId:%{public}" PRIu64, threadId_); 125c29fa5a6Sopenharmony_ci} 126c29fa5a6Sopenharmony_ci 127c29fa5a6Sopenharmony_civoid WindowEventConsumer::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent) const 128c29fa5a6Sopenharmony_ci{ 129c29fa5a6Sopenharmony_ci threadId_ = GetThisThreadId(); 130c29fa5a6Sopenharmony_ci MMI_HILOGD("Consumer callback pointerEvent is threadId:%{public}" PRIu64, threadId_); 131c29fa5a6Sopenharmony_ci} 132c29fa5a6Sopenharmony_ci 133c29fa5a6Sopenharmony_ciuint64_t WindowEventConsumer::GetConsumerThreadId() 134c29fa5a6Sopenharmony_ci{ 135c29fa5a6Sopenharmony_ci return threadId_; 136c29fa5a6Sopenharmony_ci} 137c29fa5a6Sopenharmony_ci 138c29fa5a6Sopenharmony_ciEventUtilTest::EventUtilTest() {} 139c29fa5a6Sopenharmony_ciEventUtilTest::~EventUtilTest() {} 140c29fa5a6Sopenharmony_ci 141c29fa5a6Sopenharmony_civoid EventUtilTest::AddEventDump(std::string eventDump) 142c29fa5a6Sopenharmony_ci{ 143c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 144c29fa5a6Sopenharmony_ci std::lock_guard<std::mutex> lockGuard(mutex_); 145c29fa5a6Sopenharmony_ci if (eventDump.empty()) { 146c29fa5a6Sopenharmony_ci strEventDump_.clear(); 147c29fa5a6Sopenharmony_ci return; 148c29fa5a6Sopenharmony_ci } 149c29fa5a6Sopenharmony_ci strEventDump_.push_back(eventDump); 150c29fa5a6Sopenharmony_ci MMI_HILOGD("Setting the Dump event, strEventDump_:%{public}s", eventDump.c_str()); 151c29fa5a6Sopenharmony_ci conditionVariable_.notify_one(); 152c29fa5a6Sopenharmony_ci} 153c29fa5a6Sopenharmony_ci 154c29fa5a6Sopenharmony_cistd::string EventUtilTest::GetEventDump() 155c29fa5a6Sopenharmony_ci{ 156c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 157c29fa5a6Sopenharmony_ci std::unique_lock<std::mutex> uniqueLock(mutex_); 158c29fa5a6Sopenharmony_ci std::string str = ""; 159c29fa5a6Sopenharmony_ci if (strEventDump_.empty()) { 160c29fa5a6Sopenharmony_ci MMI_HILOGD("Waiting for an event to fire"); 161c29fa5a6Sopenharmony_ci if (conditionVariable_.wait_for(uniqueLock, 162c29fa5a6Sopenharmony_ci std::chrono::milliseconds(TIME_WAIT_FOR_EVENT)) == std::cv_status::timeout) { 163c29fa5a6Sopenharmony_ci MMI_HILOGD("Timeout"); 164c29fa5a6Sopenharmony_ci return str; 165c29fa5a6Sopenharmony_ci } 166c29fa5a6Sopenharmony_ci } 167c29fa5a6Sopenharmony_ci str = strEventDump_.front(); 168c29fa5a6Sopenharmony_ci strEventDump_.pop_front(); 169c29fa5a6Sopenharmony_ci return str; 170c29fa5a6Sopenharmony_ci} 171c29fa5a6Sopenharmony_ci 172c29fa5a6Sopenharmony_cibool EventUtilTest::Init() 173c29fa5a6Sopenharmony_ci{ 174c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 175c29fa5a6Sopenharmony_ci if (!WindowUtilsTest::GetInstance()->DrawTestWindow()) { 176c29fa5a6Sopenharmony_ci return false; 177c29fa5a6Sopenharmony_ci } 178c29fa5a6Sopenharmony_ci sptr<Rosen::Window> window_ = WindowUtilsTest::GetInstance()->GetWindow(); 179c29fa5a6Sopenharmony_ci CHKPF(window_); 180c29fa5a6Sopenharmony_ci auto listener_ = GetPtr<InputEventConsumer>(); 181c29fa5a6Sopenharmony_ci CHKPF(listener_); 182c29fa5a6Sopenharmony_ci const std::string threadTest = "EventUtilTest"; 183c29fa5a6Sopenharmony_ci auto runner = AppExecFwk::EventRunner::Create(threadTest); 184c29fa5a6Sopenharmony_ci CHKPF(runner); 185c29fa5a6Sopenharmony_ci auto eventHandler = std::make_shared<AppExecFwk::EventHandler>(runner); 186c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->SetWindowInputEventConsumer(listener_, eventHandler); 187c29fa5a6Sopenharmony_ci return true; 188c29fa5a6Sopenharmony_ci} 189c29fa5a6Sopenharmony_ci 190c29fa5a6Sopenharmony_cistd::string EventUtilTest::DumpInputEvent(const std::shared_ptr<PointerEvent>& pointerEvent) 191c29fa5a6Sopenharmony_ci{ 192c29fa5a6Sopenharmony_ci const int precision = 2; 193c29fa5a6Sopenharmony_ci std::ostringstream ostream; 194c29fa5a6Sopenharmony_ci std::vector<int32_t> pointerIds { pointerEvent->GetPointerIds() }; 195c29fa5a6Sopenharmony_ci std::string str; 196c29fa5a6Sopenharmony_ci std::vector<uint8_t> buffer = pointerEvent->GetBuffer(); 197c29fa5a6Sopenharmony_ci for (const auto& buff : buffer) { 198c29fa5a6Sopenharmony_ci str += std::to_string(buff); 199c29fa5a6Sopenharmony_ci } 200c29fa5a6Sopenharmony_ci ostream << "ClientMsgHandler: in OnPointerEvent" 201c29fa5a6Sopenharmony_ci << ",EventType:" << pointerEvent->GetEventType() 202c29fa5a6Sopenharmony_ci << ",ActionTime:" << pointerEvent->GetActionTime() 203c29fa5a6Sopenharmony_ci << ",Action:" << pointerEvent->GetAction() 204c29fa5a6Sopenharmony_ci << ",ActionStartTime:" << pointerEvent->GetActionStartTime() 205c29fa5a6Sopenharmony_ci << ",Flag:" << pointerEvent->GetFlag() 206c29fa5a6Sopenharmony_ci << ",PointerAction:" << pointerEvent->DumpPointerAction() 207c29fa5a6Sopenharmony_ci << ",SourceType:" << pointerEvent->DumpSourceType() 208c29fa5a6Sopenharmony_ci << ",ButtonId:" << pointerEvent->GetButtonId() 209c29fa5a6Sopenharmony_ci << ",DeviceId:" << pointerEvent->GetDeviceId() 210c29fa5a6Sopenharmony_ci << ",VerticalAxisValue:" << std::fixed << std::setprecision(precision) 211c29fa5a6Sopenharmony_ci << pointerEvent->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_VERTICAL) 212c29fa5a6Sopenharmony_ci << ",HorizontalAxisValue:" << std::fixed << std::setprecision(precision) 213c29fa5a6Sopenharmony_ci << pointerEvent->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL) 214c29fa5a6Sopenharmony_ci <<",BufferCount:" << buffer.size() 215c29fa5a6Sopenharmony_ci <<",Buffer:" << str.c_str(); 216c29fa5a6Sopenharmony_ci for (const auto &pointerId : pointerIds) { 217c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 218c29fa5a6Sopenharmony_ci if (!pointerEvent->GetPointerItem(pointerId, item)) { 219c29fa5a6Sopenharmony_ci MMI_HILOGE("Invalid pointer:%{public}d.", pointerId); 220c29fa5a6Sopenharmony_ci return ostream.str(); 221c29fa5a6Sopenharmony_ci } 222c29fa5a6Sopenharmony_ci ostream << ",pointerId:" << pointerId << ",DownTime:" << item.GetDownTime() 223c29fa5a6Sopenharmony_ci << ",IsPressed:" << std::boolalpha << item.IsPressed() 224c29fa5a6Sopenharmony_ci << ",DisplayX:" << item.GetDisplayX() << ",DisplayY:" << item.GetDisplayY() 225c29fa5a6Sopenharmony_ci << ",Width:" << item.GetWidth() << ",Height:" << item.GetHeight() 226c29fa5a6Sopenharmony_ci << ",TiltX:" << std::fixed << std::setprecision(precision) << item.GetTiltX() 227c29fa5a6Sopenharmony_ci << ",TiltY:" << std::fixed << std::setprecision(precision) << item.GetTiltY() 228c29fa5a6Sopenharmony_ci << ",ToolDisplayX:" << item.GetToolDisplayX() << ",ToolDisplayY:" << item.GetToolDisplayY() 229c29fa5a6Sopenharmony_ci << ",ToolWindowX:" << item.GetToolWindowX() << ",ToolWindowY:" << item.GetToolWindowY() 230c29fa5a6Sopenharmony_ci << ",ToolWidth:" << item.GetToolWidth() << ",ToolHeight:" << item.GetToolHeight() 231c29fa5a6Sopenharmony_ci << ",Pressure:" << item.GetPressure() << ",ToolType:" << item.GetToolType() 232c29fa5a6Sopenharmony_ci << ",LongAxis:" << item.GetLongAxis() << ",ShortAxis:" << item.GetShortAxis() 233c29fa5a6Sopenharmony_ci << ",DeviceId:" << item.GetDeviceId() << ",RawDx:" << item.GetRawDx() 234c29fa5a6Sopenharmony_ci << ",RawDy:" << item.GetRawDy(); 235c29fa5a6Sopenharmony_ci } 236c29fa5a6Sopenharmony_ci 237c29fa5a6Sopenharmony_ci return ostream.str(); 238c29fa5a6Sopenharmony_ci} 239c29fa5a6Sopenharmony_ci 240c29fa5a6Sopenharmony_cistd::string EventUtilTest::DumpInputEvent(const std::shared_ptr<KeyEvent>& keyEvent) 241c29fa5a6Sopenharmony_ci{ 242c29fa5a6Sopenharmony_ci std::ostringstream strm; 243c29fa5a6Sopenharmony_ci strm << "InputManagerTest: in OnKeyEvent" 244c29fa5a6Sopenharmony_ci << ", KeyCode:" << keyEvent->GetKeyCode() 245c29fa5a6Sopenharmony_ci << ", ActionTime:" << keyEvent->GetActionTime() 246c29fa5a6Sopenharmony_ci << ", Action:" << keyEvent->GetAction() 247c29fa5a6Sopenharmony_ci << ", ActionStartTime:" << keyEvent->GetActionStartTime() 248c29fa5a6Sopenharmony_ci << ", EventType:" << keyEvent->GetEventType() 249c29fa5a6Sopenharmony_ci << ", KeyAction:" << keyEvent->GetKeyAction(); 250c29fa5a6Sopenharmony_ci std::vector<int32_t> pressedKeys = keyEvent->GetPressedKeys(); 251c29fa5a6Sopenharmony_ci for (const int32_t &key : pressedKeys) { 252c29fa5a6Sopenharmony_ci std::optional<KeyEvent::KeyItem> keyItem = keyEvent->GetKeyItem(key); 253c29fa5a6Sopenharmony_ci if (!keyItem) { 254c29fa5a6Sopenharmony_ci MMI_HILOGE("keyItem is nullopt"); 255c29fa5a6Sopenharmony_ci return ""; 256c29fa5a6Sopenharmony_ci } 257c29fa5a6Sopenharmony_ci strm << ", KeyCode:" << keyItem->GetKeyCode() 258c29fa5a6Sopenharmony_ci << ", DeviceId:" << keyItem->GetDeviceId() 259c29fa5a6Sopenharmony_ci << ", Unicode:" << keyItem->GetUnicode(); 260c29fa5a6Sopenharmony_ci } 261c29fa5a6Sopenharmony_ci return strm.str(); 262c29fa5a6Sopenharmony_ci} 263c29fa5a6Sopenharmony_ci 264c29fa5a6Sopenharmony_cibool EventUtilTest::CompareDump(const std::shared_ptr<PointerEvent>& pointerEvent) 265c29fa5a6Sopenharmony_ci{ 266c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 267c29fa5a6Sopenharmony_ci std::string before = DumpInputEvent(pointerEvent); 268c29fa5a6Sopenharmony_ci MMI_HILOGD("before:%{public}s", before.c_str()); 269c29fa5a6Sopenharmony_ci strEventDump_.clear(); 270c29fa5a6Sopenharmony_ci InputManager::GetInstance()->SimulateInputEvent(pointerEvent); 271c29fa5a6Sopenharmony_ci std::string after = GetEventDump(); 272c29fa5a6Sopenharmony_ci MMI_HILOGD("after:%{public}s", after.c_str()); 273c29fa5a6Sopenharmony_ci pointerEvent->AddFlag(InputEvent::EVENT_FLAG_SIMULATE); 274c29fa5a6Sopenharmony_ci std::string result = DumpInputEvent(pointerEvent); 275c29fa5a6Sopenharmony_ci MMI_HILOGD("result:%{public}s", result.c_str()); 276c29fa5a6Sopenharmony_ci return result == after; 277c29fa5a6Sopenharmony_ci} 278c29fa5a6Sopenharmony_ci 279c29fa5a6Sopenharmony_cibool EventUtilTest::CompareDump(const std::shared_ptr<KeyEvent>& keyEvent) 280c29fa5a6Sopenharmony_ci{ 281c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 282c29fa5a6Sopenharmony_ci std::string before = DumpInputEvent(keyEvent); 283c29fa5a6Sopenharmony_ci MMI_HILOGD("before:%{public}s", before.c_str()); 284c29fa5a6Sopenharmony_ci strEventDump_.clear(); 285c29fa5a6Sopenharmony_ci InputManager::GetInstance()->SimulateInputEvent(keyEvent); 286c29fa5a6Sopenharmony_ci std::string after = GetEventDump(); 287c29fa5a6Sopenharmony_ci MMI_HILOGD("after:%{public}s", after.c_str()); 288c29fa5a6Sopenharmony_ci keyEvent->AddFlag(InputEvent::EVENT_FLAG_SIMULATE); 289c29fa5a6Sopenharmony_ci std::string result = DumpInputEvent(keyEvent); 290c29fa5a6Sopenharmony_ci MMI_HILOGD("result:%{public}s", result.c_str()); 291c29fa5a6Sopenharmony_ci return result == after; 292c29fa5a6Sopenharmony_ci} 293c29fa5a6Sopenharmony_ci 294c29fa5a6Sopenharmony_ciint64_t GetNanoTime() 295c29fa5a6Sopenharmony_ci{ 296c29fa5a6Sopenharmony_ci struct timespec time = { 0 }; 297c29fa5a6Sopenharmony_ci clock_gettime(CLOCK_MONOTONIC, &time); 298c29fa5a6Sopenharmony_ci return static_cast<int64_t>(time.tv_sec) * SEC_TO_NANOSEC + time.tv_nsec; 299c29fa5a6Sopenharmony_ci} 300c29fa5a6Sopenharmony_ci 301c29fa5a6Sopenharmony_civoid DumpWindowData(const std::shared_ptr<PointerEvent>& pointerEvent) 302c29fa5a6Sopenharmony_ci{ 303c29fa5a6Sopenharmony_ci CALL_DEBUG_ENTER; 304c29fa5a6Sopenharmony_ci pointerEvent->GetAxes(); 305c29fa5a6Sopenharmony_ci pointerEvent->GetPressedKeys(); 306c29fa5a6Sopenharmony_ci pointerEvent->GetPressedButtons(); 307c29fa5a6Sopenharmony_ci PointerEvent::PointerItem item; 308c29fa5a6Sopenharmony_ci item.GetDisplayX(); 309c29fa5a6Sopenharmony_ci item.GetDisplayY(); 310c29fa5a6Sopenharmony_ci item.GetTargetWindowId(); 311c29fa5a6Sopenharmony_ci} 312c29fa5a6Sopenharmony_ci} // namespace MMI 313c29fa5a6Sopenharmony_ci} // namespace OHOS