• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "gtest/gtest.h"
16 #include "test/unittest/core/event/event_manager_test_ng.h"
17 #include "test/mock/core/pipeline/mock_pipeline_context.h"
18 #include "test/mock/core/render/mock_render_context.h"
19 #include "test/mock/core/common/mock_window.h"
20 #include "test/mock/core/common/mock_frontend.h"
21 
22 using namespace testing;
23 using namespace testing::ext;
24 namespace OHOS::Ace::NG {
25 
26 class MouseEventTargetTest : public MouseEventTarget {
27     DECLARE_ACE_TYPE(MouseEventTargetTest, MouseEventTarget);
28 
29 public:
MouseEventTargetTest(const std::string & nodeName,int32_t nodeId,bool setStopPropagation=false,int32_t expectedResult=0)30     MouseEventTargetTest(
31         const std::string& nodeName, int32_t nodeId, bool setStopPropagation = false, int32_t expectedResult = 0)
32         : MouseEventTarget(nodeName, nodeId), expectedResult_(expectedResult)
33     {
34         SetCallback([setStopPropagation, this](MouseInfo& info) {
35             info.SetStopPropagation(setStopPropagation);
36             callbackInvokeCount_++;
37         });
38     }
39 
GetCallbackInvokeCount() const40     int32_t GetCallbackInvokeCount() const
41     {
42         return callbackInvokeCount_;
43     }
44 
ResetCallbackInvokeCount()45     void ResetCallbackInvokeCount()
46     {
47         callbackInvokeCount_ = 0;
48     }
49 
GetExpectedResult() const50     int32_t GetExpectedResult() const
51     {
52         return expectedResult_;
53     }
54 
55 private:
56     int32_t callbackInvokeCount_ = 0;
57     int32_t expectedResult_ = 0;
58 };
59 
60 class EventManagerDispatchMouseEventNGTest : public EventManagerTestNg {
61 public:
SetUpTestSuite()62     static void SetUpTestSuite()
63     {
64         EventManagerTestNg::SetUpTestSuite();
65     }
TearDownTestSuite()66     static void TearDownTestSuite()
67     {
68         EventManagerTestNg::TearDownTestSuite();
69     }
70 };
71 
72 class APIVersionGuard final {
73 public:
APIVersionGuard(int32_t apiVersion)74     explicit APIVersionGuard(int32_t apiVersion)
75     {
76         backupApiVersion_ = AceApplicationInfo::GetInstance().GetApiTargetVersion();
77         AceApplicationInfo::GetInstance().SetApiTargetVersion(apiVersion);
78     }
79 
~APIVersionGuard()80     ~APIVersionGuard()
81     {
82         AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion_);
83     }
84 
85 private:
86     int32_t backupApiVersion_ = 0;
87 };
88 /**
89  * @tc.name: MouseEventTest001
90  * @tc.desc: Test DispatchMouseEventNG
91  * @tc.type: FUNC
92  */
93 HWTEST_F(EventManagerTestNg, MouseEventTest001, TestSize.Level1)
94 {
95     /**
96      * @tc.steps: step1. Create EventManager.
97      * @tc.expected: eventManager is not null.
98      */
99     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
100     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
101     auto eventManager = AceType::MakeRefPtr<EventManager>();
102     ASSERT_NE(eventManager, nullptr);
103 
104     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
105     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
106     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
107 
__anond804352b0202(MouseInfo& info) 108     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); };
109     mouseEventTarget->SetCallback(onMouse);
110 
111     /**
112      * @tc.steps: step2. Call DispatchMouseEventNG.
113      * @tc.expected: retFlag is FALSE.
114      */
115     MouseEvent event;
116     event.action = MouseAction::PRESS;
117     bool retFlag = eventManager->DispatchMouseEventNG(event);
118     EXPECT_FALSE(retFlag);
119 
120     event.action = MouseAction::RELEASE;
121     retFlag = eventManager->DispatchMouseEventNG(event);
122     EXPECT_FALSE(retFlag);
123 
124     event.action = MouseAction::MOVE;
125     retFlag = eventManager->DispatchMouseEventNG(event);
126     EXPECT_FALSE(retFlag);
127 
128     event.action = MouseAction::WINDOW_ENTER;
129     retFlag = eventManager->DispatchMouseEventNG(event);
130     EXPECT_FALSE(retFlag);
131 
132     event.action = MouseAction::WINDOW_LEAVE;
133     retFlag = eventManager->DispatchMouseEventNG(event);
134     EXPECT_FALSE(retFlag);
135 
136     event.action = MouseAction::WINDOW_LEAVE;
137     retFlag = eventManager->DispatchMouseEventNG(event);
138     EXPECT_FALSE(retFlag);
139     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
140 }
141 
142 /**
143  * @tc.name: MouseEventTest002
144  * @tc.desc: Test DispatchMouseEventNG
145  * @tc.type: FUNC
146  */
147 HWTEST_F(EventManagerTestNg, MouseEventTest002, TestSize.Level1)
148 {
149     /**
150      * @tc.steps: step1. Create EventManager.
151      * @tc.expected: eventManager is not null.
152      */
153     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
154     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
155     auto eventManager = AceType::MakeRefPtr<EventManager>();
156     ASSERT_NE(eventManager, nullptr);
157 
158     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
159     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
160     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
161 
__anond804352b0302(MouseInfo& info) 162     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
163     mouseEventTarget->SetCallback(onMouse);
164 
165     /**
166      * @tc.steps: step2. Call DispatchMouseEventNG.
167      * @tc.expected: retFlag is TRUE.
168      */
169     MouseEvent event;
170     event.action = MouseAction::PRESS;
171     bool retFlag = eventManager->DispatchMouseEventNG(event);
172     EXPECT_TRUE(retFlag);
173 
174     event.action = MouseAction::RELEASE;
175     retFlag = eventManager->DispatchMouseEventNG(event);
176     EXPECT_TRUE(retFlag);
177 
178     event.action = MouseAction::MOVE;
179     retFlag = eventManager->DispatchMouseEventNG(event);
180     EXPECT_TRUE(retFlag);
181 
182     event.action = MouseAction::WINDOW_ENTER;
183     retFlag = eventManager->DispatchMouseEventNG(event);
184     EXPECT_TRUE(retFlag);
185 
186     event.action = MouseAction::WINDOW_LEAVE;
187     retFlag = eventManager->DispatchMouseEventNG(event);
188     EXPECT_TRUE(retFlag);
189 
190     event.action = MouseAction::WINDOW_LEAVE;
191     retFlag = eventManager->DispatchMouseEventNG(event);
192     EXPECT_TRUE(retFlag);
193     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
194 }
195 
196 /**
197  * @tc.name: MouseEventTest003
198  * @tc.desc: Test DispatchMouseEventNG
199  * @tc.type: FUNC
200  */
201 HWTEST_F(EventManagerTestNg, MouseEventTest003, TestSize.Level1)
202 {
203     /**
204      * @tc.steps: step1. Create EventManager.
205      * @tc.expected: eventManager is not null.
206      */
207     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
208     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
209     auto eventManager = AceType::MakeRefPtr<EventManager>();
210     ASSERT_NE(eventManager, nullptr);
211 
212     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
213     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
214     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
215 
__anond804352b0402(MouseInfo& info) 216     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); };
217     mouseEventTarget->SetCallback(onMouse);
218 
219     /**
220      * @tc.steps: step2. Call DispatchMouseEventNG.
221      * @tc.expected: retFlag is FALSE.
222      */
223     MouseEvent event;
224     event.action = MouseAction::PRESS;
225     event.button = MouseButton::NONE_BUTTON;
226     bool retFlag = eventManager->DispatchMouseEventNG(event);
227     EXPECT_FALSE(retFlag);
228 
229     event.action = MouseAction::PRESS;
230     event.button = MouseButton::NONE_BUTTON;
231     retFlag = eventManager->DispatchMouseEventNG(event);
232     EXPECT_FALSE(retFlag);
233 
234     event.action = MouseAction::RELEASE;
235     event.button = MouseButton::NONE_BUTTON;
236     retFlag = eventManager->DispatchMouseEventNG(event);
237     EXPECT_FALSE(retFlag);
238 
239     event.action = MouseAction::MOVE;
240     event.button = MouseButton::NONE_BUTTON;
241     retFlag = eventManager->DispatchMouseEventNG(event);
242     EXPECT_FALSE(retFlag);
243 
244     event.action = MouseAction::WINDOW_ENTER;
245     event.button = MouseButton::NONE_BUTTON;
246     retFlag = eventManager->DispatchMouseEventNG(event);
247     EXPECT_FALSE(retFlag);
248 
249     event.action = MouseAction::WINDOW_LEAVE;
250     event.button = MouseButton::NONE_BUTTON;
251     retFlag = eventManager->DispatchMouseEventNG(event);
252     EXPECT_FALSE(retFlag);
253 
254     event.action = MouseAction::WINDOW_LEAVE;
255     event.button = MouseButton::NONE_BUTTON;
256     retFlag = eventManager->DispatchMouseEventNG(event);
257     EXPECT_FALSE(retFlag);
258     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
259 }
260 
261 /**
262  * @tc.name: MouseEventTest004
263  * @tc.desc: Test DispatchMouseEventNG function
264  * @tc.type: FUNC
265  */
266 HWTEST_F(EventManagerTestNg, MouseEventTest004, TestSize.Level1)
267 {
268     /**
269      * @tc.steps: step1. Create EventManager.
270      * @tc.expected: eventManager is not null.
271      */
272     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
273     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
274     auto eventManager = AceType::MakeRefPtr<EventManager>();
275     ASSERT_NE(eventManager, nullptr);
276 
277     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
278     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
279     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
280 
__anond804352b0502(MouseInfo& info) 281     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
282     mouseEventTarget->SetCallback(onMouse);
283 
284     /**
285      * @tc.steps: step2. Call DispatchMouseEventNG.
286      * @tc.expected: retFlag is false.
287      */
288     MouseEvent event;
289     event.action = MouseAction::HOVER;
290     event.button = MouseButton::LEFT_BUTTON;
291     bool retFlag = eventManager->DispatchMouseEventNG(event);
292     EXPECT_FALSE(retFlag);
293 
294     event.action = MouseAction::HOVER_ENTER;
295     event.button = MouseButton::RIGHT_BUTTON;
296     retFlag = eventManager->DispatchMouseEventNG(event);
297     EXPECT_FALSE(retFlag);
298 
299     event.action = MouseAction::HOVER_MOVE;
300     event.button = MouseButton::MIDDLE_BUTTON;
301     retFlag = eventManager->DispatchMouseEventNG(event);
302     EXPECT_FALSE(retFlag);
303 
304     event.action = MouseAction::HOVER_EXIT;
305     event.button = MouseButton::BACK_BUTTON;
306     retFlag = eventManager->DispatchMouseEventNG(event);
307     EXPECT_FALSE(retFlag);
308 
309     event.action = MouseAction::PULL_DOWN;
310     event.button = MouseButton::FORWARD_BUTTON;
311     retFlag = eventManager->DispatchMouseEventNG(event);
312     EXPECT_FALSE(retFlag);
313 
314     event.action = MouseAction::PULL_MOVE;
315     event.button = MouseButton::SIDE_BUTTON;
316     retFlag = eventManager->DispatchMouseEventNG(event);
317     EXPECT_FALSE(retFlag);
318 
319     event.action = MouseAction::PULL_UP;
320     event.button = MouseButton::EXTRA_BUTTON;
321     retFlag = eventManager->DispatchMouseEventNG(event);
322     EXPECT_FALSE(retFlag);
323 
324     event.action = MouseAction::CANCEL;
325     event.button = MouseButton::EXTRA_BUTTON;
326     retFlag = eventManager->DispatchMouseEventNG(event);
327     EXPECT_TRUE(retFlag);
328     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
329 }
330 
331 /**
332  * @tc.name: MouseEventTest005
333  * @tc.desc: Test DispatchMouseEventNG function
334  * @tc.type: FUNC
335  */
336 HWTEST_F(EventManagerTestNg, MouseEventTest005, TestSize.Level1)
337 {
338     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
339     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
340     auto eventManager = AceType::MakeRefPtr<EventManager>();
341     ASSERT_NE(eventManager, nullptr);
342 
343     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b0602(MouseInfo& info) 344     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
345     mouseEventTarget->SetCallback(onMouse);
346     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
347     auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2);
__anond804352b0702(MouseInfo& info) 348     const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); };
349     mouseEventTarget2->SetCallback(onMouse2);
350     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(mouseEventTarget2);
351 
352     MouseEvent event;
353     event.action = MouseAction::PULL_DOWN;
354     event.button = MouseButton::FORWARD_BUTTON;
355     bool retFlag = eventManager->DispatchMouseEventNG(event);
356     EXPECT_FALSE(retFlag);
357     event.action = MouseAction::PRESS;
358     event.button = MouseButton::LEFT_BUTTON;
359     retFlag = eventManager->DispatchMouseEventNG(event);
360     EXPECT_TRUE(retFlag);
361     event.action = MouseAction::HOVER;
362     event.button = MouseButton::LEFT_BUTTON;
363     retFlag = eventManager->DispatchMouseEventNG(event);
364     EXPECT_FALSE(retFlag);
365     event.action = MouseAction::HOVER_ENTER;
366     event.button = MouseButton::RIGHT_BUTTON;
367     retFlag = eventManager->DispatchMouseEventNG(event);
368     EXPECT_FALSE(retFlag);
369     event.action = MouseAction::HOVER_MOVE;
370     event.button = MouseButton::MIDDLE_BUTTON;
371     retFlag = eventManager->DispatchMouseEventNG(event);
372     EXPECT_FALSE(retFlag);
373     event.action = MouseAction::HOVER_EXIT;
374     event.button = MouseButton::BACK_BUTTON;
375     retFlag = eventManager->DispatchMouseEventNG(event);
376     EXPECT_FALSE(retFlag);
377     event.action = MouseAction::PULL_UP;
378     event.button = MouseButton::EXTRA_BUTTON;
379     retFlag = eventManager->DispatchMouseEventNG(event);
380     EXPECT_FALSE(retFlag);
381     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
382 }
383 
384 /**
385  * @tc.name: MouseEventTest006
386  * @tc.desc: Test DispatchMouseEventNG function.
387  * @tc.type: FUNC
388  */
389 HWTEST_F(EventManagerTestNg, MouseEventTest006, TestSize.Level1)
390 {
391     /**
392      * @tc.steps: step1. Create EventManager.
393      * @tc.expected: eventManager is not null.
394      */
395     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
396     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
397     auto eventManager = AceType::MakeRefPtr<EventManager>();
398     ASSERT_NE(eventManager, nullptr);
399 
400     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
401     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
__anond804352b0802(MouseInfo& info) 402     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
403     mouseEventTarget->SetCallback(onMouse);
404     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
405 
406     /**
407      * @tc.steps: step2. Call DispatchMouseEventNG.
408      * @tc.expected: retFlag is FALSE.
409      */
410     MouseEvent event;
411     event.action = MouseAction::MOVE;
412     event.button = MouseButton::LEFT_BUTTON;
413     bool result = eventManager->DispatchMouseEventNG(event);
414     EXPECT_FALSE(result);
415 
416     event.action = MouseAction::PRESS;
417     event.button = MouseButton::LEFT_BUTTON;
418     result = eventManager->DispatchMouseEventNG(event);
419     EXPECT_FALSE(result);
420     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
421 }
422 
423 /**
424  * @tc.name: MouseEventTest007
425  * @tc.desc: Test DispatchMouseEventNG function
426  * @tc.type: FUNC
427  */
428 HWTEST_F(EventManagerTestNg, MouseEventTest007, TestSize.Level1)
429 {
430     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
431     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
432     auto eventManager = AceType::MakeRefPtr<EventManager>();
433     ASSERT_NE(eventManager, nullptr);
434 
435     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b0902(MouseInfo& info) 436     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
437     mouseEventTarget->SetCallback(onMouse);
438     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
439     auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2);
__anond804352b0a02(MouseInfo& info) 440     const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); };
441     mouseEventTarget2->SetCallback(onMouse2);
442     eventManager->pressMouseTestResultsMap_[{0, MouseButton::RIGHT_BUTTON}].emplace_back(mouseEventTarget2);
443 
444     MouseEvent event;
445     event.action = MouseAction::RELEASE;
446     event.button = MouseButton::MIDDLE_BUTTON;
447     bool result = eventManager->DispatchMouseEventNG(event);
448     EXPECT_TRUE(result);
449     event.action = MouseAction::RELEASE;
450     event.button = MouseButton::BACK_BUTTON;
451     result = eventManager->DispatchMouseEventNG(event);
452     EXPECT_TRUE(result);
453     event.action = MouseAction::MOVE;
454     event.button = MouseButton::FORWARD_BUTTON;
455     result = eventManager->DispatchMouseEventNG(event);
456     EXPECT_TRUE(result);
457     event.action = MouseAction::WINDOW_ENTER;
458     event.button = MouseButton::SIDE_BUTTON;
459     result = eventManager->DispatchMouseEventNG(event);
460     EXPECT_TRUE(result);
461     event.action = MouseAction::WINDOW_LEAVE;
462     event.button = MouseButton::EXTRA_BUTTON;
463     result = eventManager->DispatchMouseEventNG(event);
464     EXPECT_TRUE(result);
465     event.action = MouseAction::PRESS;
466     event.button = MouseButton::LEFT_BUTTON;
467     result = eventManager->DispatchMouseEventNG(event);
468     EXPECT_TRUE(result);
469     event.action = MouseAction::RELEASE;
470     event.button = MouseButton::LEFT_BUTTON;
471     result = eventManager->DispatchMouseEventNG(event);
472     EXPECT_FALSE(result);
473     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
474 }
475 
476 /**
477  * @tc.name: MouseEventTest008
478  * @tc.desc: Test DispatchMouseEventNG function
479  * @tc.type: FUNC
480  */
481 HWTEST_F(EventManagerTestNg, MouseEventTest008, TestSize.Level1)
482 {
483     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
484     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
485     auto eventManager = AceType::MakeRefPtr<EventManager>();
486     ASSERT_NE(eventManager, nullptr);
487 
488     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b0b02(MouseInfo& info) 489     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); };
490     mouseEventTarget->SetCallback(onMouse);
491     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
492     auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2);
__anond804352b0c02(MouseInfo& info) 493     const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); };
494     mouseEventTarget2->SetCallback(onMouse2);
495     eventManager->pressMouseTestResultsMap_[{0, MouseButton::MIDDLE_BUTTON}].emplace_back(mouseEventTarget2);
496 
497     MouseEvent event;
498     event.action = MouseAction::MOVE;
499     event.button = MouseButton::BACK_BUTTON;
500     bool result = eventManager->DispatchMouseEventNG(event);
501     EXPECT_TRUE(result);
502     event.action = MouseAction::WINDOW_ENTER;
503     event.button = MouseButton::SIDE_BUTTON;
504     result = eventManager->DispatchMouseEventNG(event);
505     EXPECT_TRUE(result);
506     event.action = MouseAction::PRESS;
507     event.button = MouseButton::LEFT_BUTTON;
508     result = eventManager->DispatchMouseEventNG(event);
509     EXPECT_TRUE(result);
510     event.action = MouseAction::RELEASE;
511     event.button = MouseButton::LEFT_BUTTON;
512     result = eventManager->DispatchMouseEventNG(event);
513     EXPECT_FALSE(result);
514     event.action = MouseAction::RELEASE;
515     event.button = MouseButton::RIGHT_BUTTON;
516     result = eventManager->DispatchMouseEventNG(event);
517     EXPECT_TRUE(result);
518     event.action = MouseAction::RELEASE;
519     event.button = MouseButton::MIDDLE_BUTTON;
520     result = eventManager->DispatchMouseEventNG(event);
521     EXPECT_TRUE(result);
522     event.action = MouseAction::RELEASE;
523     event.button = MouseButton::BACK_BUTTON;
524     result = eventManager->DispatchMouseEventNG(event);
525     EXPECT_TRUE(result);
526     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
527 }
528 
529 /**
530  * @tc.name: MouseEventTest009
531  * @tc.desc: Test DispatchMouseEventNG function
532  * @tc.type: FUNC
533  */
534 HWTEST_F(EventManagerTestNg, MouseEventTest009, TestSize.Level1)
535 {
536     /**
537      * @tc.steps: step1. Create EventManager.
538      * @tc.expected: eventManager is not null.
539      */
540     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
541     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
542     auto eventManager = AceType::MakeRefPtr<EventManager>();
543     ASSERT_NE(eventManager, nullptr);
544 
545     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b0d02(MouseInfo& info) 546     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); };
547     mouseEventTarget->SetCallback(onMouse);
548     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
549 
550     auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2);
__anond804352b0e02(MouseInfo& info) 551     const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(true); };
552     mouseEventTarget2->SetCallback(onMouse2);
553     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(mouseEventTarget2);
554 
555     /**
556      * @tc.steps: step2. Call DispatchMouseEventNG.
557      * @tc.expected: retFlag is FALSE.
558      */
559     MouseEvent event;
560     event.action = MouseAction::PRESS;
561     event.button = MouseButton::LEFT_BUTTON;
562 
563     bool result = eventManager->DispatchMouseEventNG(event);
564     EXPECT_FALSE(result);
565 
566     event.action = MouseAction::RELEASE;
567     event.button = MouseButton::LEFT_BUTTON;
568     result = eventManager->DispatchMouseEventNG(event);
569     EXPECT_FALSE(result);
570 
571     event.action = MouseAction::RELEASE;
572     event.button = MouseButton::RIGHT_BUTTON;
573     result = eventManager->DispatchMouseEventNG(event);
574     EXPECT_FALSE(result);
575     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
576 }
577 
578 /**
579  * @tc.name: MouseEventTest010
580  * @tc.desc: Test DispatchMouseEventNG function
581  * @tc.type: FUNC
582  */
583 HWTEST_F(EventManagerTestNg, MouseEventTest010, TestSize.Level1)
584 {
585     /**
586      * @tc.steps: step1. Create EventManager.
587      * @tc.expected: eventManager is not null.
588      */
589     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
590     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
591     auto eventManager = AceType::MakeRefPtr<EventManager>();
592     ASSERT_NE(eventManager, nullptr);
593 
594     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
595     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget);
596     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
597 
__anond804352b0f02(MouseInfo& info) 598     const OnMouseEventFunc onMousePress = [](MouseInfo& info) -> bool {
599         info.SetStopPropagation(false);
600         return false;
601     };
__anond804352b1002(MouseInfo& info) 602     const OnMouseEventFunc onMouseRelease = [](MouseInfo& info) -> bool { return false; };
603     mouseEventTarget->SetCallback(onMousePress);
604 
605     /**
606      * @tc.steps: step2. Call DispatchMouseEventNG.
607      * @tc.expected: retFlag is FALSE.
608      */
609     MouseEvent pressEvent;
610     pressEvent.action = MouseAction::PRESS;
611     pressEvent.button = MouseButton::LEFT_BUTTON;
612     bool result = eventManager->DispatchMouseEventNG(pressEvent);
613     EXPECT_FALSE(result);
614 
615     MouseEvent releaseEvent;
616     releaseEvent.action = MouseAction::RELEASE;
617     releaseEvent.button = MouseButton::LEFT_BUTTON;
618     result = eventManager->DispatchMouseEventNG(releaseEvent);
619     EXPECT_FALSE(result);
620     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
621 }
622 
623 /**
624  * @tc.name: MouseEventTest011
625  * @tc.desc: Test DispatchMouseEventNG function
626  * @tc.type: FUNC
627  */
628 HWTEST_F(EventManagerTestNg, MouseEventTest011, TestSize.Level1)
629 {
630     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
631     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
632     auto eventManager = AceType::MakeRefPtr<EventManager>();
633     ASSERT_NE(eventManager, nullptr);
634 
635     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b1102(MouseInfo& info) 636     const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); };
637     mouseEventTarget->SetCallback(onMouse);
638     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
639 
640     /**
641      * @tc.steps: step2. Call DispatchMouseEventNG.
642      * @tc.expected: retFlag is FALSE.
643      */
644     MouseEvent event;
645     event.action = MouseAction::PRESS;
646     event.button = MouseButton::RIGHT_BUTTON;
647 
648     bool result = eventManager->DispatchMouseEventNG(event);
649     EXPECT_FALSE(result);
650 
651     event.action = MouseAction::RELEASE;
652     result = eventManager->DispatchMouseEventNG(event);
653     EXPECT_FALSE(result);
654     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
655 }
656 
657 /**
658  * @tc.name: MouseEventTest012
659  * @tc.desc: Test DispatchMouseEventNG function
660  * @tc.type: FUNC
661  */
662 HWTEST_F(EventManagerTestNg, MouseEventTest012, TestSize.Level1)
663 {
664     /**
665      * @tc.steps: step1. Create EventManager.
666      * @tc.expected: eventManager is not null.
667      */
668     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
669     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
670     auto eventManager = AceType::MakeRefPtr<EventManager>();
671     ASSERT_NE(eventManager, nullptr);
672 
673     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
__anond804352b1202(MouseInfo& info) 674     const OnMouseEventFunc onMouse = [](MouseInfo& info) {};
675     mouseEventTarget->SetCallback(onMouse);
676     eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget);
677 
678     /**
679      * @tc.steps: step2. Call DispatchMouseEventNG.
680      * @tc.expected: retFlag is FALSE.
681      */
682     MouseEvent event;
683     event.action = MouseAction::MOVE;
684     event.button = MouseButton::NONE_BUTTON;
685     bool retFlag = eventManager->DispatchMouseEventNG(event);
686     EXPECT_FALSE(retFlag);
687 
688     event.action = MouseAction::PRESS;
689     event.button = MouseButton::NONE_BUTTON;
690     retFlag = eventManager->DispatchMouseEventNG(event);
691     EXPECT_FALSE(retFlag);
692 
693     event.action = MouseAction::PRESS;
694     event.button = MouseButton::LEFT_BUTTON;
695     retFlag = eventManager->DispatchMouseEventNG(event);
696     EXPECT_FALSE(retFlag);
697 
698     event.action = MouseAction::WINDOW_ENTER;
699     event.button = MouseButton::RIGHT_BUTTON;
700     retFlag = eventManager->DispatchMouseEventNG(event);
701     EXPECT_FALSE(retFlag);
702 
703     event.action = MouseAction::MOVE;
704     event.button = MouseButton::MIDDLE_BUTTON;
705     retFlag = eventManager->DispatchMouseEventNG(event);
706     EXPECT_FALSE(retFlag);
707     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
708 }
709 
710 /**
711  * @tc.name: MouseEventTest013
712  * @tc.desc: Test DispatchMouseEventNG function
713  * @tc.type: FUNC
714  */
715 HWTEST_F(EventManagerTestNg, MouseEventTest013, TestSize.Level1)
716 {
717     /**
718      * @tc.steps: step1. Create EventManager.
719      * @tc.expected: eventManager is not null.
720      */
721     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
722     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
723     auto eventManager = AceType::MakeRefPtr<EventManager>();
724     ASSERT_NE(eventManager, nullptr);
725 
726     /**
727      * @tc.steps: step2. Call DispatchMouseEventNG.
728      * @tc.expected: retFlag is FALSE.
729      */
730     MouseEvent event;
731     event.action = MouseAction::NONE;
732     event.button = MouseButton::NONE_BUTTON;
733     bool retFlag = eventManager->DispatchMouseEventNG(event);
734     EXPECT_FALSE(retFlag);
735 
736     event.action = MouseAction::PRESS;
737     event.button = MouseButton::LEFT_BUTTON;
738     retFlag = eventManager->DispatchMouseEventNG(event);
739     EXPECT_FALSE(retFlag);
740 
741     event.action = MouseAction::RELEASE;
742     event.button = MouseButton::RIGHT_BUTTON;
743     retFlag = eventManager->DispatchMouseEventNG(event);
744     EXPECT_FALSE(retFlag);
745 
746     event.action = MouseAction::MOVE;
747     event.button = MouseButton::MIDDLE_BUTTON;
748     retFlag = eventManager->DispatchMouseEventNG(event);
749     EXPECT_FALSE(retFlag);
750 
751     event.action = MouseAction::WINDOW_ENTER;
752     event.button = MouseButton::BACK_BUTTON;
753     retFlag = eventManager->DispatchMouseEventNG(event);
754     EXPECT_FALSE(retFlag);
755 
756     event.action = MouseAction::WINDOW_LEAVE;
757     event.button = MouseButton::FORWARD_BUTTON;
758     retFlag = eventManager->DispatchMouseEventNG(event);
759     EXPECT_FALSE(retFlag);
760 
761     event.action = MouseAction::PRESS;
762     event.button = MouseButton::SIDE_BUTTON;
763     retFlag = eventManager->DispatchMouseEventNG(event);
764     EXPECT_FALSE(retFlag);
765 
766     event.action = MouseAction::RELEASE;
767     event.button = MouseButton::EXTRA_BUTTON;
768     retFlag = eventManager->DispatchMouseEventNG(event);
769     EXPECT_FALSE(retFlag);
770 
771     event.action = MouseAction::MOVE;
772     event.button = MouseButton::TASK_BUTTON;
773     retFlag = eventManager->DispatchMouseEventNG(event);
774     EXPECT_FALSE(retFlag);
775     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
776 }
777 
778 /**
779  * @tc.name: DispatchAxisEventIssueTest1
780  * @tc.desc: Test DispatchAxisEventNG, axisTestResultsMap_[event.id] is deleted each time it is dispatched.
781  * @tc.type: FUNC
782  */
783 HWTEST_F(EventManagerTestNg, DispatchAxisEventIssueTest1, TestSize.Level1)
784 {
785     /**
786      * @tc.steps: step1. Create EventManager.
787      * @tc.expected: eventManager is not null.
788      */
789     auto eventManager = AceType::MakeRefPtr<EventManager>();
790     ASSERT_NE(eventManager, nullptr);
791 
792     /**
793      * @tc.steps: step4. Call DispatchAxisEventNG with axisTestResultsMap_[event.id] not empty
794      * @tc.expected: eventManager->axisTestResultsMap_[event.id] is empty
795      */
796     auto axisEventTarget = AceType::MakeRefPtr<AxisEventTarget>();
__anond804352b1302(AxisInfo&) 797     auto onAxisCallback = [](AxisInfo&) -> void {};
798     axisEventTarget->SetOnAxisCallback(onAxisCallback);
799     AxisEvent event;
800     event.horizontalAxis = 0;
801     event.verticalAxis = 0;
802     event.pinchAxisScale = 0;
803     eventManager->axisTestResultsMap_[event.id].push_back(axisEventTarget);
804     eventManager->DispatchAxisEventNG(event);
805     EXPECT_TRUE(eventManager->axisTestResultsMap_[event.id].empty());
806 }
807 
808 /**
809  * @tc.name: MouseLocationTest001
810  * @tc.desc: Test HandleMouseEvent in less than API 14, the x、y location use coordinateOffset_.
811  * @tc.type: FUNC
812  */
813 HWTEST_F(EventManagerTestNg, MouseLocationTest001, TestSize.Level1)
814 {
815     /**
816      * @tc.steps: step1. Create EventManager and set mouse event target callback.
817      * @tc.expected: eventManager is not null.
818      */
819     auto eventManager = AceType::MakeRefPtr<EventManager>();
820     ASSERT_NE(eventManager, nullptr);
821     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
822     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
823     mouseEventTarget->coordinateOffset_ = Offset(-100, 0);
824     MouseInfo mouseInfo;
__anond804352b1402(MouseInfo& info) 825     const OnMouseEventFunc onMouse = [&mouseInfo](MouseInfo& info) { mouseInfo = info; };
826     mouseEventTarget->SetCallback(onMouse);
827 
828     /**
829      * @tc.steps: step2. Call DispatchMouseEventNG.
830      * @tc.expected: the mouse local location value is right.
831      */
832     MouseEvent event;
833     event.x = 200.0f;
834     event.y = 200.0f;
835     event.action = MouseAction::PRESS;
836     eventManager->DispatchMouseEventNG(event);
837     EXPECT_EQ(mouseInfo.GetLocalLocation().GetX(), 200.0f);
838     EXPECT_EQ(mouseInfo.GetLocalLocation().GetY(), 200.0f);
839 }
840 
841 /**
842  * @tc.name: MouseLocationTest002
843  * @tc.desc: Test HandleMouseEvent in great or equal API 14, the x、y location use Transform.
844  * @tc.type: FUNC
845  */
846 HWTEST_F(EventManagerTestNg, MouseLocationTest002, TestSize.Level1)
847 {
848     /**
849      * @tc.steps: step1. create FrameNode.
850      */
851     RefPtr<FrameNode> FRAME_NODE_0 = FrameNode::CreateFrameNode("0", 0, AceType::MakeRefPtr<Pattern>());
852     RefPtr<FrameNode> FRAME_NODE_1 = FrameNode::CreateFrameNode("1", 1, AceType::MakeRefPtr<Pattern>());
853     RefPtr<FrameNode> FRAME_NODE_2 = FrameNode::CreateFrameNode("2", 2, AceType::MakeRefPtr<Pattern>());
854     FRAME_NODE_2->SetParent(WeakPtr<FrameNode>(FRAME_NODE_1));
855     FRAME_NODE_1->SetParent(WeakPtr<FrameNode>(FRAME_NODE_0));
856 
857     /**
858      * @tc.steps: step2. mock local matrix.
859      */
860     FRAME_NODE_0->localMat_ = Matrix4::CreateIdentity();
861     FRAME_NODE_1->localMat_ = Matrix4::CreateIdentity();
862     FRAME_NODE_2->localMat_ = Matrix4::Invert(Matrix4::CreateTranslate(400, 0, 0));
863 
864     /**
865      * @tc.steps: step3. Create EventManager, and set mouse event target callback.
866      * @tc.expected: eventManager is not null.
867      */
868     int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion();
869     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWENTY));
870     auto eventManager = AceType::MakeRefPtr<EventManager>();
871     ASSERT_NE(eventManager, nullptr);
872 
873     auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID);
874     eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget);
875     mouseEventTarget->coordinateOffset_ = Offset(-100, 0);
876     mouseEventTarget->AttachFrameNode(FRAME_NODE_2);
877     MouseInfo mouseInfo;
__anond804352b1502(MouseInfo& info) 878     const OnMouseEventFunc onMouse = [&mouseInfo](MouseInfo& info) { mouseInfo = info; };
879     mouseEventTarget->SetCallback(onMouse);
880 
881     /**
882      * @tc.steps: step4. Call DispatchMouseEventNG.
883      * @tc.expected: the mouse local location value is right.
884      */
885     MouseEvent event;
886     event.x = 200.0f;
887     event.y = 200.0f;
888     event.action = MouseAction::PRESS;
889     eventManager->DispatchMouseEventNG(event);
890     EXPECT_EQ(mouseInfo.GetLocalLocation().GetX(), -200.0f);
891     EXPECT_EQ(mouseInfo.GetLocalLocation().GetY(), 200.0f);
892     AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion);
893 }
894 
895 /**
896  * @tc.name: EventManagerDispatchMouseEventNGTest001
897  * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget no-intersect, test mouse event dispatch.
898  * @tc.type: FUNC
899  */
900 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest001, TestSize.Level1)
901 {
902     /**
903      * @tc.steps: step1. Create EventManager.
904      * @tc.expected: eventManager is not null.
905      */
906     auto eventManager = AceType::MakeRefPtr<EventManager>();
907     ASSERT_NE(eventManager, nullptr);
908 
909     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
910         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true, 4),  // stop event propagation.
911         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 0), // not stop event propagation.
912         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4),  // stop event propagation.
913         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 0), // not stop event propagation.
914     };
915 
916     /**
917      * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
918      * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] non-intersect.
919      */
920     eventManager->pressMouseTestResults_.emplace_back(testCases[0]);
921     eventManager->pressMouseTestResults_.emplace_back(testCases[1]);
922 
923     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
924     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
925 
926     const std::vector<MockMouseEvent> mockMouseEvents = {
927         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
928         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
929         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
930         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, true },
931     };
932 
933     /**
934      * @tc.steps: step3. Inject mock mouseEvent
935      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result.
936      */
937     for (auto mockMouseEvent : mockMouseEvents) {
938         MouseEvent event;
939         event.action = mockMouseEvent.action;
940         event.button = mockMouseEvent.button;
941         auto result = eventManager->DispatchMouseEventNG(event);
942         EXPECT_EQ(result, mockMouseEvent.expectedResult);
943     }
944 
945     /**
946      * @tc.expected: index == 1 and index == 3 can not be invoked. other can be invoked.
947      */
948     for (auto i = 0; i < testCases.size(); i++) {
949         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
950     }
951 }
952 
953 /**
954  * @tc.name: EventManagerDispatchMouseEventNGTest002
955  * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget no-intersect, test
956  * mouse event dispatch.
957  * @tc.type: FUNC
958  */
959 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest002, TestSize.Level1)
960 {
961     /**
962      * @tc.steps: step1. Set API level 13.
963      * @tc.expected: current API level equal to 13.
964      */
965     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
966     ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN),
967         AceApplicationInfo::GetInstance().GetApiTargetVersion());
968 
969     /**
970      * @tc.steps: step2. Create EventManager.
971      * @tc.expected: eventManager is not null.
972      */
973     auto eventManager = AceType::MakeRefPtr<EventManager>();
974     ASSERT_NE(eventManager, nullptr);
975 
976     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
977         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true, 4),  // stop event propagation.
978         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 0), // not stop event propagation.
979         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4),  // stop event propagation.
980         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 0), // not stop event propagation.
981     };
982 
983     /**
984      * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
985      * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] non-intersect.
986      */
987     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]);
988     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]);
989 
990     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
991     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
992 
993     const std::vector<MockMouseEvent> mockMouseEvents = {
994         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
995         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
996         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true },
997         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, true },
998     };
999 
1000     /**
1001      * @tc.steps: step4. Inject mock mouseEvent
1002      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result.
1003      */
1004     for (auto mockMouseEvent : mockMouseEvents) {
1005         MouseEvent event;
1006         event.action = mockMouseEvent.action;
1007         event.button = mockMouseEvent.button;
1008         auto result = eventManager->DispatchMouseEventNG(event);
1009         EXPECT_EQ(result, mockMouseEvent.expectedResult);
1010     }
1011 
1012     /**
1013      * @tc.expected: index == 0 and index == 3 can not be invoked. other can be invoked.
1014      */
1015     for (auto i = 0; i < testCases.size(); i++) {
1016         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1017     }
1018 }
1019 
1020 /**
1021  * @tc.name: EventManagerDispatchMouseEventNGTest003
1022  * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, none one stop propagation, test mouse event
1023  * dispatch. expect every one will receive mouse event.
1024  * @tc.type: FUNC
1025  */
1026 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest003, TestSize.Level1)
1027 {
1028     /**
1029      * @tc.steps: step1. Create EventManager.
1030      * @tc.expected: eventManager is not null.
1031      */
1032     auto eventManager = AceType::MakeRefPtr<EventManager>();
1033     ASSERT_NE(eventManager, nullptr);
1034 
1035     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1036         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), // not stop event propagation.
1037         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), // not stop event propagation.
1038         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 4), // not stop event propagation.
1039         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), // not stop event propagation.
1040         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), // not stop event propagation.
1041     };
1042 
1043     /**
1044      * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1045      * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] intersect.
1046      */
1047     eventManager->pressMouseTestResults_.emplace_back(testCases[0]);
1048     eventManager->pressMouseTestResults_.emplace_back(testCases[1]);
1049     eventManager->pressMouseTestResults_.emplace_back(testCases[2]);
1050     eventManager->pressMouseTestResults_.emplace_back(testCases[3]);
1051 
1052     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1053     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1054     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1055     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1056 
1057     const std::vector<MockMouseEvent> mockMouseEvents = {
1058         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1059         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1060         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1061         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1062     };
1063 
1064     /**
1065      * @tc.steps: step3. Inject mock mouseEvent.
1066      */
1067     for (auto mockMouseEvent : mockMouseEvents) {
1068         MouseEvent event;
1069         event.action = mockMouseEvent.action;
1070         event.button = mockMouseEvent.button;
1071         auto result = eventManager->DispatchMouseEventNG(event);
1072         EXPECT_EQ(result, mockMouseEvent.expectedResult);
1073     }
1074 
1075     /**
1076      * @tc.expected: In this case, every mouse targer will receive four mouse events.
1077      */
1078     for (auto i = 0; i < testCases.size(); i++) {
1079         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1080     }
1081 }
1082 
1083 /**
1084  * @tc.name: EventManagerDispatchMouseEventNGTest004
1085  * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, none one
1086  * stop propagation, test mouse event dispatch. expect every one will receive mouse event.
1087  * @tc.type: FUNC
1088  */
1089 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest004, TestSize.Level1)
1090 {
1091     /**
1092      * @tc.steps: step1. Set API level 13.
1093      * @tc.expected: current API level equal to 13.
1094      */
1095     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
1096     ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN),
1097         AceApplicationInfo::GetInstance().GetApiTargetVersion());
1098     /**
1099      * @tc.steps: step2. Create EventManager.
1100      * @tc.expected: eventManager is not null.
1101      */
1102     auto eventManager = AceType::MakeRefPtr<EventManager>();
1103     ASSERT_NE(eventManager, nullptr);
1104 
1105     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1106         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), // not stop event propagation.
1107         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), // not stop event propagation.
1108         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 4), // not stop event propagation.
1109         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), // not stop event propagation.
1110         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), // not stop event propagation.
1111     };
1112 
1113     /**
1114      * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1115      * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] intersect.
1116      */
1117     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]);
1118     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]);
1119     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]);
1120     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[3]);
1121 
1122     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1123     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1124     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1125     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1126 
1127     const std::vector<MockMouseEvent> mockMouseEvents = {
1128         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1129         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1130         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1131         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1132     };
1133 
1134     /**
1135      * @tc.steps: step4. Inject mock mouseEvent.
1136      */
1137     for (auto mockMouseEvent : mockMouseEvents) {
1138         MouseEvent event;
1139         event.action = mockMouseEvent.action;
1140         event.button = mockMouseEvent.button;
1141         auto result = eventManager->DispatchMouseEventNG(event);
1142         EXPECT_EQ(result, mockMouseEvent.expectedResult);
1143     }
1144 
1145     /**
1146      * @tc.expected: In this case, every mouse targer will receive four mouse events.
1147      */
1148     for (auto i = 0; i < testCases.size(); i++) {
1149         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1150     }
1151 }
1152 
1153 /**
1154  * @tc.name: EventManagerDispatchMouseEventNGTest005
1155  * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed MouseTestTarget stop propagation
1156  * test mouse event dispatch.
1157  * @tc.type: FUNC
1158  */
1159 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest005, TestSize.Level1)
1160 {
1161     /**
1162      * @tc.steps: step1. Create EventManager.
1163      * @tc.expected: eventManager is not null.
1164      */
1165     auto eventManager = AceType::MakeRefPtr<EventManager>();
1166     ASSERT_NE(eventManager, nullptr);
1167 
1168     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1169         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4),
1170         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4),
1171         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4),
1172         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, true, 0),
1173         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4),
1174     };
1175 
1176     /**
1177      * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1178      * @tc.expected: pressMouseTestResults_  ==  currMouseTestResultsMap_[0].
1179      */
1180     eventManager->pressMouseTestResults_.emplace_back(testCases[0]);
1181     eventManager->pressMouseTestResults_.emplace_back(testCases[1]);
1182     eventManager->pressMouseTestResults_.emplace_back(testCases[2]);
1183     eventManager->pressMouseTestResults_.emplace_back(testCases[3]);
1184 
1185     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1186     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1187     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1188     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1189 
1190     const std::vector<MockMouseEvent> mockMouseEvents = {
1191         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1192         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1193         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1194         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1195     };
1196 
1197     /**
1198      * @tc.steps: step3. Inject mouseEvent
1199      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result
1200      */
1201     for (auto i = 0; i < mockMouseEvents.size(); i++) {
1202         MouseEvent event;
1203         event.action = mockMouseEvents[i].action;
1204         event.button = mockMouseEvents[i].button;
1205         auto result = eventManager->DispatchMouseEventNG(event);
1206         EXPECT_EQ(result, mockMouseEvents[i].expectedResult) << i;
1207     }
1208 
1209     /**
1210      * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event.
1211      */
1212     for (auto i = 0; i < testCases.size(); i++) {
1213         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1214     }
1215 }
1216 
1217 /**
1218  * @tc.name: EventManagerDispatchMouseEventNGTest006
1219  * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed
1220  * MouseTestTarget stop propagation test mouse event dispatch.
1221  * @tc.type: FUNC
1222  */
1223 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest006, TestSize.Level1)
1224 {
1225     /**
1226      * @tc.steps: step1. Set API level 13.
1227      * @tc.expected: current API level equal to 13.
1228      */
1229     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
1230     ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN),
1231         AceApplicationInfo::GetInstance().GetApiTargetVersion());
1232 
1233     /**
1234      * @tc.steps: step2. Create EventManager.
1235      * @tc.expected: eventManager is not null.
1236      */
1237     auto eventManager = AceType::MakeRefPtr<EventManager>();
1238     ASSERT_NE(eventManager, nullptr);
1239 
1240     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1241         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4),
1242         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4),
1243         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4),
1244         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, true, 0),
1245         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4),
1246     };
1247 
1248     /**
1249      * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1250      * @tc.expected: pressMouseTestResults_  ==  currMouseTestResultsMap_[0].
1251      */
1252     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]);
1253     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]);
1254     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]);
1255     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[3]);
1256 
1257     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1258     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1259     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1260     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1261 
1262     const std::vector<MockMouseEvent> mockMouseEvents = {
1263         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1264         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1265         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1266         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1267     };
1268 
1269     /**
1270      * @tc.steps: step3. Inject mouseEvent
1271      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result
1272      */
1273     for (auto i = 0; i < mockMouseEvents.size(); i++) {
1274         MouseEvent event;
1275         event.action = mockMouseEvents[i].action;
1276         event.button = mockMouseEvents[i].button;
1277         auto result = eventManager->DispatchMouseEventNG(event);
1278         EXPECT_EQ(result, mockMouseEvents[i].expectedResult) << i;
1279     }
1280 
1281     /**
1282      * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event.
1283      */
1284     for (auto i = 0; i < testCases.size(); i++) {
1285         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1286     }
1287 }
1288 
1289 /**
1290  * @tc.name: EventManagerDispatchMouseEventNGTest007
1291  * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed MouseTestTarget stop propagation
1292  * will case which one in pressed MouseTestTarget can not be invoked.
1293  * @tc.type: FUNC
1294  */
1295 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest007, TestSize.Level1)
1296 {
1297     /**
1298      * @tc.steps: step1. Create EventManager.
1299      * @tc.expected: eventManager is not null.
1300      */
1301     auto eventManager = AceType::MakeRefPtr<EventManager>();
1302     ASSERT_NE(eventManager, nullptr);
1303 
1304     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1305         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4),
1306         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true, 4),
1307         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 0),
1308         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4),
1309         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4),
1310     };
1311 
1312     /**
1313      * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1314      * @tc.expected: pressMouseTestResults_  ==  currMouseTestResultsMap_[0].
1315      */
1316     eventManager->pressMouseTestResults_.emplace_back(testCases[0]);
1317     eventManager->pressMouseTestResults_.emplace_back(testCases[1]);
1318     eventManager->pressMouseTestResults_.emplace_back(testCases[2]);
1319 
1320     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]);
1321     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1322     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1323     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1324     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1325 
1326     const std::vector<MockMouseEvent> mockMouseEvents = {
1327         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1328         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1329         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1330         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1331     };
1332 
1333     /**
1334      * @tc.steps: step3. Inject mouseEvent
1335      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result
1336      */
1337     for (auto mockMouseEvent : mockMouseEvents) {
1338         MouseEvent event;
1339         event.action = mockMouseEvent.action;
1340         event.button = mockMouseEvent.button;
1341         auto result = eventManager->DispatchMouseEventNG(event);
1342         EXPECT_EQ(result, mockMouseEvent.expectedResult);
1343     }
1344 
1345     /**
1346      * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event.
1347      */
1348     for (auto i = 0; i < testCases.size(); i++) {
1349         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1350     }
1351 }
1352 
1353 /**
1354  * @tc.name: EventManagerDispatchMouseEventNGTest008
1355  * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed
1356  * MouseTestTarget stop propagation will case which one in pressed MouseTestTarget can not be invoked.
1357  * @tc.type: FUNC
1358  */
1359 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest008, TestSize.Level1)
1360 {
1361     /**
1362      * @tc.steps: step1. Set API level 13.
1363      * @tc.expected: current API level equal to 13.
1364      */
1365     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
1366     ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN),
1367         AceApplicationInfo::GetInstance().GetApiTargetVersion());
1368 
1369     /**
1370      * @tc.steps: step1. Create EventManager.
1371      * @tc.expected: eventManager is not null.
1372      */
1373     auto eventManager = AceType::MakeRefPtr<EventManager>();
1374     ASSERT_NE(eventManager, nullptr);
1375 
1376     std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1377         AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4),
1378         AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true, 4),
1379         AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 0),
1380         AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4),
1381         AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4),
1382     };
1383 
1384     /**
1385      * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0].
1386      * @tc.expected: pressMouseTestResults_  ==  currMouseTestResultsMap_[0].
1387      */
1388     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]);
1389     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]);
1390     eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]);
1391 
1392     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]);
1393     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1394     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1395     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]);
1396     eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]);
1397 
1398     const std::vector<MockMouseEvent> mockMouseEvents = {
1399         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1400         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1401         { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false },
1402         { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false },
1403     };
1404 
1405     /**
1406      * @tc.steps: step3. Inject mouseEvent
1407      * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result
1408      */
1409     for (auto mockMouseEvent : mockMouseEvents) {
1410         MouseEvent event;
1411         event.action = mockMouseEvent.action;
1412         event.button = mockMouseEvent.button;
1413         auto result = eventManager->DispatchMouseEventNG(event);
1414         EXPECT_EQ(result, mockMouseEvent.expectedResult);
1415     }
1416 
1417     /**
1418      * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event.
1419      */
1420     for (auto i = 0; i < testCases.size(); i++) {
1421         EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i;
1422     }
1423 }
1424 
1425 /**
1426  * @tc.name: EventManagerDispatchMouseEventNGTest009
1427  * @tc.desc: API level less than 13, only MouseButton::LEFT_BUTTON mouse event can dispatch to pressedTestResult.
1428  * @tc.type: FUNC
1429  */
1430 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest009, TestSize.Level1)
1431 {
1432     /**
1433      * @tc.steps: step1. Set API level 12.
1434      * @tc.expected: current API level equal to 12.
1435      */
1436     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
1437     ASSERT_EQ(
1438         static_cast<int32_t>(PlatformVersion::VERSION_TWELVE), AceApplicationInfo::GetInstance().GetApiTargetVersion());
1439 
1440     const std::vector<MockMouseEvent> mockMouseEvents = {
1441         { MouseAction::PRESS, MouseButton::NONE_BUTTON, false },
1442         { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true },
1443         { MouseAction::PRESS, MouseButton::RIGHT_BUTTON, false },
1444         { MouseAction::PRESS, MouseButton::MIDDLE_BUTTON, false },
1445         { MouseAction::PRESS, MouseButton::BACK_BUTTON, false },
1446         { MouseAction::PRESS, MouseButton::FORWARD_BUTTON, false },
1447         { MouseAction::PRESS, MouseButton::SIDE_BUTTON, false },
1448         { MouseAction::PRESS, MouseButton::EXTRA_BUTTON, false },
1449         { MouseAction::PRESS, MouseButton::TASK_BUTTON, false },
1450     };
1451 
1452     /**
1453      * @tc.steps: step2. Inject mock mouse event contains MouseButton and MouseAction == MouseAction::PRESS.
1454      * @tc.expected: currMouseTestResultsMap_[0] equals to pressMouseTestResults_.
1455      */
1456     for (auto mockMouseEvent : mockMouseEvents) {
1457         MouseEvent event;
1458         event.action = mockMouseEvent.action;
1459         event.button = mockMouseEvent.button;
1460 
1461         std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1462             AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false),
1463             AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false),
1464             AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false),
1465         };
1466 
1467         /**
1468          * @tc.steps: step3. Create EventManager.
1469          * @tc.expected: eventManager is not null.
1470          */
1471         auto eventManager = AceType::MakeRefPtr<EventManager>();
1472         ASSERT_NE(eventManager, nullptr);
1473 
1474         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]);
1475         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1476         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1477 
1478         eventManager->DispatchMouseEventNG(event);
1479         EXPECT_EQ(
1480             eventManager->pressMouseTestResults_ == eventManager->currMouseTestResultsMap_[0], mockMouseEvent.expectedResult);
1481     }
1482 }
1483 
1484 /**
1485  * @tc.name: EventManagerDispatchMouseEventNGTest010
1486  * @tc.desc: API level greater and equal to 13, all kinds of MouseButton event can dispatch to pressedTestResult.
1487  * @tc.type: FUNC
1488  */
1489 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest010, TestSize.Level1)
1490 {
1491     /**
1492      * @tc.steps: step1. Set API level 13.
1493      * @tc.expected: current API level equal to 13.
1494      */
1495     APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN));
1496     ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN),
1497         AceApplicationInfo::GetInstance().GetApiTargetVersion());
1498 
1499     const std::vector<MockMouseEvent> mockMouseEvents = {
1500         { MouseAction::PRESS, MouseButton::NONE_BUTTON, false },
1501         { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true },
1502         { MouseAction::PRESS, MouseButton::RIGHT_BUTTON, true },
1503         { MouseAction::PRESS, MouseButton::MIDDLE_BUTTON, true },
1504         { MouseAction::PRESS, MouseButton::BACK_BUTTON, true },
1505         { MouseAction::PRESS, MouseButton::FORWARD_BUTTON, true },
1506         { MouseAction::PRESS, MouseButton::SIDE_BUTTON, true },
1507         { MouseAction::PRESS, MouseButton::EXTRA_BUTTON, true },
1508         { MouseAction::PRESS, MouseButton::TASK_BUTTON, true },
1509     };
1510 
1511     /**
1512      * @tc.steps: step2. Inject mock mouse event contains MouseButton and MouseAction == MouseAction::PRESS.
1513      * @tc.expected: currMouseTestResultsMap_[0] equals to pressMouseTestResultsMap_[button]
1514      */
1515     for (auto mockMouseEvent : mockMouseEvents) {
1516         MouseEvent event;
1517         event.action = mockMouseEvent.action;
1518         event.button = mockMouseEvent.button;
1519 
1520         std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1521             AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false),
1522             AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false),
1523             AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false),
1524         };
1525 
1526         /**
1527          * @tc.steps: step3. Create EventManager.
1528          * @tc.expected: eventManager is not null.
1529          */
1530         auto eventManager = AceType::MakeRefPtr<EventManager>();
1531         ASSERT_NE(eventManager, nullptr);
1532 
1533         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]);
1534         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1535         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1536 
1537         eventManager->DispatchMouseEventNG(event);
1538         PressMouseInfo key { 0, event.button };
1539         EXPECT_EQ(eventManager->pressMouseTestResultsMap_[key] == eventManager->currMouseTestResultsMap_[0],
1540             mockMouseEvent.expectedResult);
1541     }
1542 }
1543 
1544 /**
1545  * @tc.name: EventManagerDispatchMouseEventNGTest011
1546  * @tc.desc: DispatchMouseEventNG only work for five kinds(press/release/move/window_enter/window_leave) mouse action.
1547  * @tc.type: FUNC
1548  */
1549 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest011, TestSize.Level1)
1550 {
1551     /**
1552      * @tc.steps: step1. Create mock mouse event with all kind of MouseAction.
1553      */
1554     const std::vector<MockMouseEvent> mockMouseEvents = {
1555         { MouseAction::NONE, MouseButton::NONE_BUTTON, false },
1556         { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true },
1557         { MouseAction::RELEASE, MouseButton::RIGHT_BUTTON, true },
1558         { MouseAction::MOVE, MouseButton::MIDDLE_BUTTON, true },
1559         { MouseAction::WINDOW_ENTER, MouseButton::BACK_BUTTON, true },
1560         { MouseAction::WINDOW_LEAVE, MouseButton::FORWARD_BUTTON, true },
1561         { MouseAction::HOVER, MouseButton::SIDE_BUTTON, false },
1562         { MouseAction::HOVER_ENTER, MouseButton::EXTRA_BUTTON, false },
1563         { MouseAction::HOVER_MOVE, MouseButton::TASK_BUTTON, false },
1564         { MouseAction::HOVER_EXIT, MouseButton::NONE_BUTTON, false },
1565         { MouseAction::PULL_DOWN, MouseButton::LEFT_BUTTON, false },
1566         { MouseAction::PULL_MOVE, MouseButton::RIGHT_BUTTON, false },
1567         { MouseAction::PULL_UP, MouseButton::MIDDLE_BUTTON, false },
1568         { MouseAction::CANCEL, MouseButton::BACK_BUTTON, true },
1569     };
1570 
1571     /**
1572      * @tc.steps: step2. traversal all kinds of MouseAction,inject mock mouse event into EventManager.
1573      * @tc.expected: result of invoke DispatchMouseEventNG equal to expected result.
1574      */
1575     for (auto mockMouseEvent : mockMouseEvents) {
1576         MouseEvent event;
1577         event.action = mockMouseEvent.action;
1578         event.button = mockMouseEvent.button;
1579 
1580         std::vector<RefPtr<MouseEventTargetTest>> testCases = {
1581             AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true),
1582             AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true),
1583             AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true),
1584         };
1585 
1586         /**
1587          * @tc.steps: step3. Create eventManager.
1588          * @tc.expected: eventManager not equal to nullptr.
1589          */
1590         auto eventManager = AceType::MakeRefPtr<EventManager>();
1591         ASSERT_NE(eventManager, nullptr);
1592 
1593         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]);
1594         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]);
1595         eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]);
1596 
1597         auto result = eventManager->DispatchMouseEventNG(event);
1598         EXPECT_EQ(result, mockMouseEvent.expectedResult) << static_cast<int32_t>(event.action);
1599     }
1600 }
1601 
1602 /**
1603  * @tc.name: GetOrRefreshMatrixFromCache
1604  * @tc.desc: Test GetOrRefreshMatrixFromCache func
1605  * @tc.type: FUNC
1606  */
1607 HWTEST_F(EventManagerDispatchMouseEventNGTest, GetOrRefreshMatrixFromCacheNGTest001, TestSize.Level1)
1608 {
1609     /**
1610      * @tc.steps: step1. create
1611      * @tc.expected: expect The function return value is true when width or height is nearZero.
1612      */
1613     MockPipelineContext::SetUp();
1614     RefPtr<FrameNode> node = FrameNode::CreateFrameNode("0", 0, AceType::MakeRefPtr<Pattern>());
1615     ASSERT_NE(node, nullptr);
1616     auto mockRenderContext = AceType::MakeRefPtr<MockRenderContext>();
1617     ASSERT_NE(mockRenderContext, nullptr);
1618     auto pipeline = NG::PipelineContext::GetCurrentContext();
1619     ASSERT_NE(pipeline, nullptr);
1620     node->renderContext_ = mockRenderContext;
1621     node->context_ = AceType::RawPtr(pipeline);
1622 
1623     node->cacheMatrixInfo_ = CacheMatrixInfo();
1624     mockRenderContext->paintRect_ = RectF(0, 0, 10, 0);
1625     CacheMatrixInfo cacheMatrixInfo = node->GetOrRefreshMatrixFromCache();
1626     EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 0);
1627 
1628     node->isTransformNotChanged_ = false;
1629     mockRenderContext->rect_ = RectF(0, 0, 10, 0);
1630     mockRenderContext->paintRect_ = RectF(0, 0, 10, 0);
1631     cacheMatrixInfo = node->GetOrRefreshMatrixFromCache();
1632     EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10);
1633     EXPECT_EQ(node->isTransformNotChanged_, true);
1634 
1635     node->isTransformNotChanged_ = false;
1636     cacheMatrixInfo = node->GetOrRefreshMatrixFromCache(true);
1637     EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10);
1638     EXPECT_EQ(node->isTransformNotChanged_, true);
1639 
1640     node->cacheMatrixInfo_ = CacheMatrixInfo();
1641     node->isTransformNotChanged_ = false;
1642     cacheMatrixInfo = node->GetOrRefreshMatrixFromCache();
1643     EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10);
1644     EXPECT_EQ(node->isTransformNotChanged_, true);
1645     MockPipelineContext::TearDown();
1646 }
1647 
1648 /**
1649  * @tc.name: DispatchTouchEventAndCheck
1650  * @tc.desc: Test DispatchTouchEventAndCheck func
1651  * @tc.type: FUNC
1652  */
1653 HWTEST_F(EventManagerDispatchMouseEventNGTest, DispatchTouchEventAndCheckTest001, TestSize.Level1)
1654 {
1655     /**
1656      * @tc.steps: step1. Create EventManager.
1657      * @tc.expected: eventManager is not null.
1658      */
1659     auto eventManager = AceType::MakeRefPtr<EventManager>();
1660     ASSERT_NE(eventManager, nullptr);
1661 
1662     auto resultId = ElementRegister::GetInstance()->MakeUniqueId();
1663     TouchTestResult touchTestResults;
1664     auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(
1665         DEFAULT_PAN_FINGER, PanDirection { PanDirection::NONE }, DEFAULT_PAN_DISTANCE.ConvertToPx());
1666     panRecognizer->OnPending();
1667     touchTestResults.push_back(panRecognizer);
1668     eventManager->touchTestResults_.emplace(resultId, touchTestResults);
1669     TouchEvent event;
1670     event.id = resultId;
1671     event.type = TouchType::DOWN;
1672     RefPtr<GestureScope> scope = AceType::MakeRefPtr<GestureScope>(resultId);
1673     ASSERT_NE(scope, nullptr);
1674     ASSERT_NE(eventManager->refereeNG_, nullptr);
1675     scope->AddMember(panRecognizer);
1676     eventManager->refereeNG_->gestureScopes_.insert(std::make_pair(resultId, scope));
1677     eventManager->DispatchTouchEventAndCheck(event, false);
1678     EXPECT_EQ(panRecognizer->GetRefereeState(), RefereeState::FAIL);
1679 }
1680 } // namespace OHOS::Ace::NG