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