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 
16 #include "test/unittest/core/event/gesture_event_hub_test_ng.h"
17 
18 using namespace testing;
19 using namespace testing::ext;
20 
21 namespace OHOS::Ace::NG {
22 namespace {
23 constexpr size_t DEFAULT_CHILD_COUNT = 4;
24 constexpr float GRID_WIDTH = 480.0f;
25 constexpr float GRID_HEIGHT = 800.0f;
26 constexpr float ITEM_WIDTH = 120.0f;
27 constexpr float ITEM_HEIGHT = 200.0f;
28 constexpr double DEFAULT_OFFSET_Y = 5.0;
29 
CreateGridNodeWithChild(size_t childCount,const GridItemStyle & gridItemStyle)30 RefPtr<FrameNode> CreateGridNodeWithChild(size_t childCount, const GridItemStyle& gridItemStyle)
31 {
32     auto frameNode = FrameNode::GetOrCreateFrameNode(V2::GRID_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
33         []() {return AceType::MakeRefPtr<GridPattern>(); });
34     ViewAbstract::SetWidth(frameNode.GetRawPtr(), CalcLength(GRID_WIDTH));
35     ViewAbstract::SetHeight(frameNode.GetRawPtr(), CalcLength(GRID_HEIGHT));
36     std::list<RefPtr<FrameNode>> childNodes;
37 
38     for (size_t i = 0; i < childCount; ++i) {
39         auto chidNodeId = ElementRegister::GetInstance()->MakeUniqueId();
40         auto childNode = FrameNode::GetOrCreateFrameNode(V2::GRID_ITEM_ETS_TAG, chidNodeId,
41             [itemStyle = gridItemStyle]() { return AceType::MakeRefPtr<GridItemPattern>(nullptr, itemStyle); });
42         ViewAbstract::SetWidth(childNode.GetRawPtr(), CalcLength(ITEM_WIDTH));
43         ViewAbstract::SetHeight(childNode.GetRawPtr(), CalcLength(ITEM_HEIGHT));
44         childNode->MountToParent(frameNode);
45         childNodes.emplace_back(childNode);
46     }
47     return frameNode;
48 }
49 
CreateRecognizerGroup(const RefPtr<NG::FrameNode> & parentNode)50 RefPtr<NG::NGGestureRecognizer> CreateRecognizerGroup(const RefPtr<NG::FrameNode>& parentNode)
51 {
52     CHECK_NULL_RETURN(parentNode, nullptr);
53     std::list<RefPtr<NGGestureRecognizer>> recognizers;
54     for (const auto& childNode : parentNode->GetChildren()) {
55         auto childFrameNode = AceType::DynamicCast<FrameNode>(childNode);
56         if (childFrameNode) {
57             auto clickRecognizer = AceType::MakeRefPtr<ClickRecognizer>();
58             clickRecognizer->AttachFrameNode(childFrameNode);
59             recognizers.emplace_back(clickRecognizer);
60         }
61     }
62     auto recognizerGroup = AceType::MakeRefPtr<NG::ParallelRecognizer>(std::move(recognizers));
63     if (recognizerGroup) {
64         recognizerGroup->AttachFrameNode(parentNode);
65     }
66     return recognizerGroup;
67 }
68 
ProcessDragItemGroupScene()69 RefPtr<FrameNode> ProcessDragItemGroupScene()
70 {
71     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
72     CHECK_NULL_RETURN(gridNode, nullptr);
73     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
74     CHECK_NULL_RETURN(gestureEventHub, nullptr);
75 
76     for (const auto& child : gridNode->GetChildren()) {
77         auto childNode = AceType::DynamicCast<FrameNode>(child);
78         if (!childNode) {
79             continue;
80         }
81         auto gridItemPattern = childNode->GetPattern<GridItemPattern>();
82         if (!gridItemPattern) {
83             continue;
84         }
85         gridItemPattern->SetSelected(true);
86     }
87     auto gridItem = AceType::DynamicCast<FrameNode>(gridNode->GetChildByIndex(0));
88     CHECK_NULL_RETURN(gridItem, nullptr);
89     auto pattern = gridNode->GetPattern<GridPattern>();
90     CHECK_NULL_RETURN(pattern, nullptr);
91     pattern->gridLayoutInfo_.endIndex_ = DEFAULT_CHILD_COUNT;
92 
93     gestureEventHub->InitDragDropEvent();
94     auto actuator = gestureEventHub->GetDragEventActuator();
95     CHECK_NULL_RETURN(actuator, nullptr);
96     actuator->isSelectedItemNode_ = true;
97     actuator->FindItemParentNode(gridItem);
98     return gridNode;
99 }
100 } // namespace
101 
102 /**
103  * @tc.name: GetHitTestModeStr
104  * @tc.desc: Test GetHitTestModeStr001
105  * @tc.type: FUNC
106  */
107 HWTEST_F(GestureEventHubTestNg, GetHitTestModeStr001, TestSize.Level1)
108 {
109     /**
110      * @tc.steps: step1. Create GestureEventHub.
111      * @tc.expected: gestureEventHub is not null.
112      */
113     auto frameNode = FrameNode::CreateFrameNode("myButton", 101, AceType::MakeRefPtr<Pattern>());
114     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
115     ASSERT_NE(guestureEventHub, nullptr);
116     auto eventHub = guestureEventHub->eventHub_.Upgrade();
117     auto pipline = PipelineContext::GetCurrentContext();
118     auto EventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
119     EventHub->CancelDragForWeb();
120     string testModeStr;
121     /**
122      * @tc.steps: step1. Calling the GetHitTestModeStr interface
123      * @tc.expected: EventHub ->GetHitTestModeStr() is not equal to nullptr
124      */
125     EXPECT_TRUE(testModeStr != EventHub->GetHitTestModeStr());
126 }
127 
128 /**
129  * @tc.name: HandleOnDragUpdate001
130  * @tc.desc: Test Functions related with drag
131  * @tc.type: FUNC
132  */
133 HWTEST_F(GestureEventHubTestNg, HandleOnDragUpdate001, TestSize.Level1)
134 {
135     /**
136      * @tc.steps: step1. Create guestureEventHub.
137      * @tc.expected: gestureEventHub is not null.
138      */
139     auto frameNode = FrameNode::CreateFrameNode("MyButton", 102, AceType::MakeRefPtr<Pattern>());
140     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
141     ASSERT_NE(guestureEventHub, nullptr);
142     auto eventHub = guestureEventHub->eventHub_.Upgrade();
143     eventHub->AttachHost(frameNode);
144     ASSERT_NE(eventHub, nullptr);
145 
146     auto pipline = PipelineContext::GetCurrentContext();
147     ASSERT_NE(pipline, nullptr);
148 
149     /**
150      * @tc.steps: step2. call HandleOnDragStart
151      *            case: eventHub->HasOnDragStart() is null
152      * @tc.expected: dragDropProxy_ is null.
153      */
154     GestureEvent info;
155     info.SetSourceDevice(SourceType::MOUSE);
156     guestureEventHub->HandleOnDragStart(info);
157     EXPECT_EQ(guestureEventHub->dragDropProxy_, nullptr);
158     /**
159      * @tc.steps: step3. set OnDragStart for eventHub
160      *            after that eventHub->HasOnDragStart() is not null
161      *            case: dragDropInfo.customNode is not null
162      */
163     RefPtr<UINode> customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
__anon2a87ae410402(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) 164     auto onDragStart = [&customNode](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) {
165         DragDropInfo dragDropInfo;
166         dragDropInfo.customNode = customNode;
167         return dragDropInfo;
168     };
169     eventHub->SetOnDragStart(std::move(onDragStart));
170 
171     /**
172      * @tc.steps: step4. call HandleOnDragStart
173      *            case: dragDropInfo.customNode is not null
174      * @tc.expected: dragDropProxy_ is null.
175      */
176     guestureEventHub->HandleOnDragStart(info);
177     EXPECT_EQ(guestureEventHub->dragDropProxy_, nullptr);
178 
179     /**
180      * @tc.steps: step5. call HandleOnDragEnd
181      *            case: eventHub->HasOnDrop() is true
182      * @tc.expected: dragDropProxy_ is null
183      *               onDrop has been called, msg1 = CHECK_TAG_1
184      */
185     std::string msg1;
__anon2a87ae410502(const RefPtr<OHOS::Ace::DragEvent>& , const std::string& ) 186     auto onDrop = [&msg1](const RefPtr<OHOS::Ace::DragEvent>& /* dragEvent */, const std::string& /* param */) {
187         msg1 = CHECK_TAG_1;
188     };
189     eventHub->SetOnDrop(std::move(onDrop));
190     guestureEventHub->HandleOnDragStart(info);
191     guestureEventHub->HandleOnDragEnd(info);
192     EXPECT_EQ(guestureEventHub->dragDropProxy_, nullptr);
193     EXPECT_EQ(msg1, "HELLO");
194 }
195 
196 /**
197  * @tc.name: HandleOnDragUpdate002
198  * @tc.desc: Test Functions related with drag
199  * @tc.type: FUNC
200  */
201 HWTEST_F(GestureEventHubTestNg, HandleOnDragUpdate002, TestSize.Level1)
202 {
203     /**
204      * @tc.steps: step1. create GestureEventHub.
205      * @tc.expected: gestureEventHub is not null.
206      */
207     auto eventHub = AceType::MakeRefPtr<EventHub>();
208     ASSERT_NE(eventHub, nullptr);
209     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::RICH_EDITOR_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
210 
211     /**
212      * @tc.steps: step2. update the input parameter attributes.
213      */
214     RefPtr<UINode> customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
215     DragDropInfo dragDropInfo;
216     dragDropInfo.customNode = customNode;
217     frameNode->SetDragPreview(dragDropInfo);
218 
219     eventHub->AttachHost(frameNode);
220     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
221     ASSERT_NE(gestureEventHub, nullptr);
222 
__anon2a87ae410602(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) 223     auto onDragStart = [&customNode](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) {
224         DragDropInfo dragDropInfo;
225         dragDropInfo.customNode = customNode;
226         return dragDropInfo;
227     };
228     eventHub->SetOnDragStart(std::move(onDragStart));
229 
230     auto eventManager = AceType::MakeRefPtr<EventManager>();
231     ASSERT_NE(eventManager, nullptr);
232 
233     auto pipeline = PipelineContext::GetCurrentContext();
234     pipeline->SetEventManager(eventManager);
235     eventManager->SetLastMoveBeforeUp(false);
236 
237     /**
238      * @tc.steps: step3. call HandleOnDragStart with SourceType::MOUSE and InputEventType::TOUCH_SCREEN.
239      * @tc.expected: eventManager->IsLastMoveBeforeUp() the return value is false.
240      */
241     GestureEvent gestureEvent;
242     gestureEvent.SetSourceDevice(SourceType::MOUSE);
243     gestureEvent.SetInputEventType(InputEventType::MOUSE_BUTTON);
244     gestureEventHub->HandleOnDragStart(gestureEvent);
245     EXPECT_FALSE(eventManager->IsLastMoveBeforeUp());
246 }
247 
248 /**
249  * @tc.name: HandleOnDragUpdate003
250  * @tc.desc: Test Functions related with drag
251  * @tc.type: FUNC
252  */
253 HWTEST_F(GestureEventHubTestNg, HandleOnDragUpdate003, TestSize.Level1)
254 {
255     auto frameNode = FrameNode::CreateFrameNode(V2::WEB_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
256     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
257     ASSERT_NE(guestureEventHub, nullptr);
258     auto eventHub = guestureEventHub->eventHub_.Upgrade();
259     eventHub->AttachHost(frameNode);
260     ASSERT_NE(eventHub, nullptr);
261 
262     auto pipline = PipelineContext::GetCurrentContext();
263     ASSERT_NE(pipline, nullptr);
264 
265     pipline->SetupRootElement();
266     pipline->onVisibleAreaChangeNodeIds_.clear();
267     pipline->AddOnAreaChangeNode(frameNode->GetId());
268 
269     RefPtr<UINode> customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
__anon2a87ae410702(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) 270     auto onDragStart = [&customNode](const RefPtr<OHOS::Ace::DragEvent>&, const std::string&) {
271         void* voidPtr = static_cast<void*>(new char[0]);
272         RefPtr<PixelMap> pixelMap = PixelMap::CreatePixelMap(voidPtr);
273         DragDropInfo dragDropInfo;
274         dragDropInfo.customNode = customNode;
275         return dragDropInfo;
276     };
277     eventHub->SetOnDragStart(std::move(onDragStart));
278 
279     GestureEvent info;
280     info.SetSourceDevice(SourceType::MOUSE);
281     info.SetInputEventType(InputEventType::TOUCH_SCREEN);
282     guestureEventHub->HandleOnDragStart(info);
283     EXPECT_EQ(guestureEventHub->dragDropProxy_, nullptr);
284 }
285 
286 /**
287  * @tc.name: GestureEventHubTest032
288  * @tc.desc: Test ProcessTouchTestHierarchy
289  * @tc.type: FUNC
290  */
291 HWTEST_F(GestureEventHubTestNg, GestureEventHubTest032, TestSize.Level1)
292 {
293     /**
294      * @tc.steps: step1. Create GestureEventHub.
295      * @tc.expected: gestureEventHub is not null.
296      */
297     auto eventHub = AceType::MakeRefPtr<EventHub>();
298     EXPECT_TRUE(eventHub);
299     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
300     EXPECT_TRUE(gestureEventHub);
301 
302     /**
303      * @tc.steps: step2. call ProcessTouchTestHierarchy
304      *            case: innerRecognizers & gestureHierarchy_ is empty, current is null
305      * @tc.expected: finalResult is empty
306      */
307     TouchRestrict touchRestrict;
308     std::list<RefPtr<NGGestureRecognizer>> innerTargets;
309     TouchTestResult finalResult;
310     ResponseLinkResult responseLinkResult;
311 
312     /**
313      * @tc.steps: step3. call externalExclusiveRecognizer_
314      *            case: innerRecognizers & gestureHierarchy_ is empty, current is null
315      * @tc.expected: finalResult is empty
316      */
317     gestureEventHub->externalExclusiveRecognizer_.push_back(nullptr);
318     gestureEventHub->externalParallelRecognizer_.push_back(nullptr);
319     EXPECT_EQ(static_cast<int32_t>(gestureEventHub->externalExclusiveRecognizer_.size()), 1);
320     EXPECT_EQ(static_cast<int32_t>(gestureEventHub->externalParallelRecognizer_.size()), 1);
321 
322     /**
323      * @tc.steps: step4. call ProcessTouchTestHierarchy
324      *            case: innerRecognizers & gestureHierarchy_ is empty, current is null
325      * @tc.expected: finalResult is empty
326      */
327     gestureEventHub->ProcessTouchTestHierarchy(
328         COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, nullptr, responseLinkResult);
329     EXPECT_TRUE(finalResult.empty());
330 }
331 
332 /**
333  * @tc.name: GetPixelMapScale001
334  * @tc.desc: Test GetPixelMapScale
335  * @tc.type: FUNC
336  */
337 HWTEST_F(GestureEventHubTestNg, GetPixelMapScale001, TestSize.Level1)
338 {
339     /**
340      * @tc.steps: step1. Create GestureEventHub.
341      * @tc.expected: gestureEventHub is not null.
342      */
343     auto eventHub = AceType::MakeRefPtr<EventHub>();
344     auto frameNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
345     eventHub->AttachHost(frameNode);
346     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
347 
348     /**
349      * @tc.steps: step2. construct a dragDropProxy and update gestureEventHub attributes.
350      */
351     constexpr int64_t PROXY_ID_NOT_FIT = 101;
352     auto dragDropProxy = AceType::MakeRefPtr<DragDropProxy>(PROXY_ID_NOT_FIT);
353     gestureEventHub->dragDropProxy_ = dragDropProxy;
354 
355     /**
356      * @tc.steps: step3. call HandleOnDragUpdate with GestureEvent.
357      * @tc.expected: gestureEventHub->dragDropProxy_ is true.
358      */
359     GestureEvent info;
360     gestureEventHub->HandleOnDragUpdate(info);
361 
362     /**
363      * @tc.steps: step4. call GetPixelMapScale.
364      * @tc.expected: scale is true.
365      */
366     const int32_t height = 600.0f;
367     const int32_t width = 500.0f;
368     float scale = gestureEventHub->GetPixelMapScale(height, width);
369     EXPECT_TRUE(scale);
370 }
371 
372 /**
373  * @tc.name: IsPixelMapNeedScale001
374  * @tc.desc: Test IsPixelMapNeedScale
375  * @tc.type: FUNC
376  */
377 HWTEST_F(GestureEventHubTestNg, IsPixelMapNeedScale001, TestSize.Level1)
378 {
379     /**
380      * @tc.steps: step1. Create guestureEventHub.
381      * @tc.expected: gestureEventHub is not null.
382      */
383     auto frameNode = FrameNode::CreateFrameNode("mybutton", -1, AceType::MakeRefPtr<Pattern>());
384     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
385     ASSERT_NE(guestureEventHub, nullptr);
386     auto eventHub = guestureEventHub->eventHub_.Upgrade();
387     eventHub->AttachHost(frameNode);
388     ASSERT_NE(eventHub, nullptr);
389 
390     auto pipline = PipelineContext::GetCurrentContext();
391     ASSERT_NE(pipline, nullptr);
392 
393     void* voidPtr2 = static_cast<void*>(new char[0]);
394     RefPtr<PixelMap> pixelMap2 = PixelMap::CreatePixelMap(voidPtr2);
395     guestureEventHub->SetPixelMap(pixelMap2);
396 
397     bool result = guestureEventHub->IsPixelMapNeedScale();
398     EXPECT_FALSE(result);
399 }
400 
401 /**
402  * @tc.name: GetDragDropInfo001
403  * @tc.desc: Test GetDragDropInfo function.
404  * @tc.type: FUNC
405  */
406 HWTEST_F(GestureEventHubTestNg, GetDragDropInfo001, TestSize.Level1)
407 {
408     /**
409      * @tc.steps: step1. Create GestureEventHub.
410      * @tc.expected: gestureEventHub is not null.
411      */
412     auto eventHub = AceType::MakeRefPtr<EventHub>();
413     EXPECT_TRUE(eventHub);
414     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
415     EXPECT_TRUE(gestureEventHub);
416 
417     /**
418      * @tc.steps: step2. set defaultOnDragStart for eventHub
419      */
__anon2a87ae410802(const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& ) 420     auto defaultOnDragStart = [](const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& /* param */) {
421         DragDropInfo dragDropInfo;
422         auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
423         dragEvent->SetData(unifiedData);
424         dragDropInfo.extraInfo = "default extraInfo";
425         return dragDropInfo;
426     };
427     eventHub->SetDefaultOnDragStart(std::move(defaultOnDragStart));
428 
429     /**
430      * @tc.steps: step3. call GetDragDropInfo function
431      *            case: textDraggable is false, and component is text
432      * @tc.expected: customNode is null, extraInfo is 'default extraInfo'.
433      */
434     auto frameNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<TextPattern>());
435     ASSERT_NE(frameNode, nullptr);
436     GestureEvent info;
437     DragDropInfo dragPreviewInfo;
438     RefPtr<OHOS::Ace::DragEvent> dragEvent = AceType::MakeRefPtr<OHOS::Ace::DragEvent>();
439     gestureEventHub->InitDragDropEvent();
440     ASSERT_NE(gestureEventHub->dragEventActuator_, nullptr);
441     auto dragDropInfo = gestureEventHub->GetDragDropInfo(info, frameNode, dragPreviewInfo, dragEvent);
442     EXPECT_FALSE(dragDropInfo.customNode);
443     EXPECT_EQ(dragDropInfo.extraInfo, "default extraInfo");
444 
445     /**
446      * @tc.steps: step4. call GetDragDropInfo function
447      *            case: textDraggable is true, and component is text
448      * @tc.expected: customNode is null, extraInfo is 'default extraInfo'.
449      */
450     gestureEventHub->SetTextDraggable(true);
451     dragDropInfo = gestureEventHub->GetDragDropInfo(info, frameNode, dragPreviewInfo, dragEvent);
452     EXPECT_FALSE(dragDropInfo.customNode);
453     EXPECT_EQ(dragDropInfo.extraInfo, "default extraInfo");
454 
455     /**
456      * @tc.steps: step5. set onDragStart for eventHub
457      */
__anon2a87ae410902(const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& ) 458     auto onDragStart = [](const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& /* param */) {
459         DragDropInfo dragDropInfo;
460         auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
461         dragEvent->SetData(unifiedData);
462         auto customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
463         dragDropInfo.customNode = customNode;
464         dragDropInfo.extraInfo = "user set extraInfo";
465         return dragDropInfo;
466     };
467     eventHub->SetOnDragStart(std::move(onDragStart));
468 
469     /**
470      * @tc.steps: step6. call GetDragDropInfo function
471      *            case: textDraggable is true, and component is text
472      * @tc.expected: customNode is null, extraInfo is 'user set extraInfo'.
473      */
474     dragDropInfo = gestureEventHub->GetDragDropInfo(info, frameNode, dragPreviewInfo, dragEvent);
475     EXPECT_FALSE(dragDropInfo.customNode);
476     EXPECT_EQ(dragDropInfo.extraInfo, "user set extraInfo");
477 }
478 
479 /**
480  * @tc.name: GetDragDropInfo002
481  * @tc.desc: Test GetDragDropInfo function.
482  * @tc.type: FUNC
483  */
484 HWTEST_F(GestureEventHubTestNg, GetDragDropInfo002, TestSize.Level1)
485 {
486     /**
487      * @tc.steps: step1. Create GestureEventHub.
488      * @tc.expected: gestureEventHub is not null.
489      */
490     auto eventHub = AceType::MakeRefPtr<EventHub>();
491     EXPECT_TRUE(eventHub);
492     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
493     EXPECT_TRUE(gestureEventHub);
494 
495     /**
496      * @tc.steps: step2. set onDragStart for eventHub
497      */
__anon2a87ae410a02(const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& ) 498     auto onDragStart = [](const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& /* param */) {
499         DragDropInfo dragDropInfo;
500         auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
501         dragEvent->SetData(unifiedData);
502         auto customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
503         dragDropInfo.customNode = customNode;
504         dragDropInfo.extraInfo = "user set extraInfo";
505         return dragDropInfo;
506     };
507     eventHub->SetOnDragStart(std::move(onDragStart));;
508 
509     /**
510      * @tc.steps: step3. set dragPreview for frameNode
511      */
512     auto frameNode = FrameNode::CreateFrameNode(V2::IMAGE_ETS_TAG, -1, AceType::MakeRefPtr<ImagePattern>());
513     ASSERT_NE(frameNode, nullptr);
514     DragDropInfo dragPreviewDropInfo;
515     dragPreviewDropInfo.extraInfo = "drag preview extraInfo";
516     auto customNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
517     dragPreviewDropInfo.customNode = customNode;
518     frameNode->SetDragPreview(dragPreviewDropInfo);
519 
520     /**
521      * @tc.steps: step4. call GetDragDropInfo function
522      *            case: textDraggable is false, and component is image
523      * @tc.expected: dragPreviewInfo.customNode is not null, extraInfo is 'drag preview extraInfo'.
524      */
525     GestureEvent info;
526     DragDropInfo dragPreviewInfo;
527     RefPtr<OHOS::Ace::DragEvent> dragEvent = AceType::MakeRefPtr<OHOS::Ace::DragEvent>();
528     gestureEventHub->InitDragDropEvent();
529     ASSERT_NE(gestureEventHub->dragEventActuator_, nullptr);
530     auto dragDropInfo = gestureEventHub->GetDragDropInfo(info, frameNode, dragPreviewInfo, dragEvent);
531     EXPECT_TRUE(dragDropInfo.customNode);
532     EXPECT_EQ(dragDropInfo.extraInfo, "user set extraInfo");
533     EXPECT_TRUE(dragPreviewInfo.customNode);
534     EXPECT_EQ(dragPreviewInfo.extraInfo, "drag preview extraInfo");
535 }
536 
537 /**
538  * @tc.name: GetUnifiedData001
539  * @tc.desc: Test GetUnifiedData function when user has not set the onDragStart callback.
540  * @tc.type: FUNC
541  */
542 HWTEST_F(GestureEventHubTestNg, GetUnifiedData001, TestSize.Level1)
543 {
544     /**
545      * @tc.steps: step1. Create GestureEventHub.
546      * @tc.expected: gestureEventHub is not null.
547      */
548     auto eventHub = AceType::MakeRefPtr<EventHub>();
549     EXPECT_TRUE(eventHub);
550     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
551     EXPECT_TRUE(gestureEventHub);
552 
553     /**
554      * @tc.steps: step2. set OnDragStart for eventHub
555      *            case: user not set onDragStart callback function
556      */
557     RefPtr<OHOS::Ace::DragEvent> dragEvent = AceType::MakeRefPtr<OHOS::Ace::DragEvent>();
__anon2a87ae410b02(const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& ) 558     auto defaultOnDragStart = [](const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& /* param */) {
559         DragDropInfo dragDropInfo;
560         auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
561         dragEvent->SetData(unifiedData);
562         dragDropInfo.extraInfo = "default extraInfo";
563         return dragDropInfo;
564     };
565     eventHub->SetDefaultOnDragStart(std::move(defaultOnDragStart));
566     EXPECT_TRUE(eventHub->GetDefaultOnDragStart());
567 
568     /**
569      * @tc.steps: step3. Call GetUnifiedData function
570      *            case: Do not set default onDragStart function
571      * @tc.expected: unifiedData is not null, extraInfo is not empty.
572      */
573     DragDropInfo dragDropInfo;
574     gestureEventHub->GetUnifiedData("", dragDropInfo, dragEvent);
575     EXPECT_TRUE(dragEvent->GetData());
576     EXPECT_EQ(dragDropInfo.extraInfo, "default extraInfo");
577 
578     /**
579      * @tc.steps: step4. Call GetUnifiedData function
580      *            case: Do not set default onDragStart function
581      * @tc.expected: unifiedData is not null, extraInfo is not empty.
582      */
583     dragEvent->SetData(nullptr);
584     dragDropInfo.extraInfo = "";
585     eventHub->SetDefaultOnDragStart(nullptr);
586     gestureEventHub->GetUnifiedData("", dragDropInfo, dragEvent);
587     EXPECT_EQ(dragEvent->GetData(), nullptr);
588     EXPECT_EQ(dragDropInfo.extraInfo, "");
589 }
590 
591 /**
592  * @tc.name: GetUnifiedData002
593  * @tc.desc: Test GetUnifiedData function when user set the onDragStart callback.
594  * @tc.type: FUNC
595  */
596 HWTEST_F(GestureEventHubTestNg, GetUnifiedData002, TestSize.Level1)
597 {
598     /**
599      * @tc.steps: step1. Create GestureEventHub.
600      * @tc.expected: gestureEventHub is not null.
601      */
602     auto eventHub = AceType::MakeRefPtr<EventHub>();
603     EXPECT_TRUE(eventHub);
604     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
605     EXPECT_TRUE(gestureEventHub);
606 
607     /**
608      * @tc.steps: step2. set OnDragStart for eventHub
609      *            case: set user set onDragStart and defaultOnDragStart
610      */
611     RefPtr<OHOS::Ace::DragEvent> dragEvent = AceType::MakeRefPtr<OHOS::Ace::DragEvent>();
__anon2a87ae410c02(const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& ) 612     auto defaultOnDragStart = [](const RefPtr<OHOS::Ace::DragEvent>& dragEvent, const std::string& /* param */) {
613         DragDropInfo dragDropInfo;
614         auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
615         dragEvent->SetData(unifiedData);
616         dragDropInfo.extraInfo = "default extraInfo";
617         return dragDropInfo;
618     };
619     eventHub->SetDefaultOnDragStart(std::move(defaultOnDragStart));
620     EXPECT_TRUE(eventHub->GetDefaultOnDragStart());
621 
622     /**
623      * @tc.steps: step3. Call GetUnifiedData function
624      *            case: user do not set unifiedData and extraInfo
625      * @tc.expected: unifiedData is not null, extraInfo is not empty.
626      */
627     DragDropInfo dragDropInfo;
628     gestureEventHub->GetUnifiedData("", dragDropInfo, dragEvent);
629     EXPECT_TRUE(dragEvent->GetData());
630     EXPECT_EQ(dragDropInfo.extraInfo, "default extraInfo");
631 
632     /**
633      * @tc.steps: step4. set OnDragStart for eventHub
634      *            case: user set onDragStart function
635      */
636     auto unifiedData = AceType::MakeRefPtr<MockUnifiedData>();
637     dragEvent->SetData(unifiedData);
638     dragDropInfo.extraInfo = "user set extraInfo";
639     eventHub->SetDefaultOnDragStart(std::move(defaultOnDragStart));
640     EXPECT_TRUE(eventHub->GetDefaultOnDragStart());
641 
642     /**
643      * @tc.steps: step5. Call GetUnifiedData function
644      *            case: user set unifiedData and extraInfo
645      * @tc.expected: unifiedData is not null, extraInfo is not empty.
646      */
647     gestureEventHub->GetUnifiedData("", dragDropInfo, dragEvent);
648     EXPECT_TRUE(dragEvent->GetData());
649     EXPECT_EQ(dragDropInfo.extraInfo, "user set extraInfo");
650 }
651 
652 /**
653  * @tc.name: GestureEventHubNodeTest001
654  * @tc.desc: Test SetJSFrameNodeOnClick and ClearJSFrameNodeOnClick.
655  * @tc.type: FUNC
656  */
657 HWTEST_F(GestureEventHubTestNg, GestureEventHubNodeTest001, TestSize.Level1)
658 {
659     /**
660      * @tc.steps: step1. Create GestureEventHub.
661      * @tc.expected: gestureEventHub is not null.
662      */
663     auto eventHub = AceType::MakeRefPtr<EventHub>();
664     EXPECT_TRUE(eventHub);
665     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
666     EXPECT_TRUE(gestureEventHub);
667 
668     /**
669      * @tc.steps: step2. Create GestureEventFunc and call SetJSFrameNodeOnClick.
670      * @tc.expected: ClickEventActuator_ is not nullptr.
671      */
__anon2a87ae410d02(GestureEvent& info) 672     GestureEventFunc gestureEventFunc = [](GestureEvent& info) {};
673     gestureEventHub->SetJSFrameNodeOnClick(std::move(gestureEventFunc));
674     EXPECT_NE(gestureEventHub->clickEventActuator_, nullptr);
675 
676     /**
677      * @tc.steps: step3. Set parallelCombineClick and call SetJSFrameNodeOnClick.
678      * @tc.expected: userParallelClickEventActuator_ is not nullptr.
679      */
680     gestureEventHub->parallelCombineClick = true;
681     gestureEventHub->SetJSFrameNodeOnClick(std::move(gestureEventFunc));
682     EXPECT_NE(gestureEventHub->userParallelClickEventActuator_, nullptr);
683 
684     /**
685      * @tc.steps: step4. Call ClearJSFrameNodeOnClick.
686      * @tc.expected: jsFrameNodeCallback_ is nullptr.
687      */
688     gestureEventHub->ClearJSFrameNodeOnClick();
689     EXPECT_EQ(gestureEventHub->clickEventActuator_->jsFrameNodeCallback_, nullptr);
690 }
691 
692 /**
693  * @tc.name: GestureEventHubNodeTest002
694  * @tc.desc: Test SetOnTouchEvent, SetJSFrameNodeOnTouchEvent and ClearJSFrameNodeOnClick.
695  * @tc.type: FUNC
696  */
697 HWTEST_F(GestureEventHubTestNg, GestureEventHubNodeTest002, TestSize.Level1)
698 {
699     /**
700      * @tc.steps: step1. Create GestureEventHub.
701      * @tc.expected: gestureEventHub is not null.
702      */
703     auto eventHub = AceType::MakeRefPtr<EventHub>();
704     EXPECT_TRUE(eventHub);
705     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
706     EXPECT_TRUE(gestureEventHub);
707 
708     /**
709      * @tc.steps: step2. Create touchEventFunc and call SetOnTouchEvent.
710      * @tc.expected: ouchEventActuator_ is not nullptr.
711      */
__anon2a87ae410e02(TouchEventInfo& info) 712     TouchEventFunc touchEventFunc = [](TouchEventInfo& info) {};
713     gestureEventHub->SetOnTouchEvent(std::move(touchEventFunc));
714     gestureEventHub->SetJSFrameNodeOnTouchEvent(std::move(touchEventFunc));
715     EXPECT_NE(gestureEventHub->touchEventActuator_, nullptr);
716 
717     /**
718      * @tc.steps: step3. Call ClearJSFrameNodeOnTouch.
719      * @tc.expected: commonTouchEventCallback_ is nullptr.
720      */
721     gestureEventHub->ClearJSFrameNodeOnTouch();
722     EXPECT_EQ(gestureEventHub->touchEventActuator_->commonTouchEventCallback_, nullptr);
723 }
724 
725 /**
726  * @tc.name: TestSetDragGatherPixelMap001
727  * @tc.desc: Test SetDragGatherPixelMap.
728  * @tc.type: FUNC
729  */
730 HWTEST_F(GestureEventHubTestNg, TestSetDragGatherPixelMap001, TestSize.Level1)
731 {
732     /**
733      * @tc.steps: step1. Create Grid Node.
734      */
735     auto gridNode = FrameNode::CreateFrameNode(
736         V2::GRID_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
737     ASSERT_NE(gridNode, nullptr);
738     /**
739      * @tc.steps: step2. Create Grid Item Node.
740      */
741     auto gridItemNode1 = FrameNode::CreateFrameNode(
742         V2::GRID_ITEM_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
743         AceType::MakeRefPtr<GridItemPattern>(nullptr, GridItemStyle::NONE));
744     ASSERT_NE(gridItemNode1, nullptr);
745     auto gridItemNode2 = FrameNode::CreateFrameNode(
746         V2::GRID_ITEM_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
747         AceType::MakeRefPtr<GridItemPattern>(nullptr, GridItemStyle::NONE));
748     ASSERT_NE(gridItemNode2, nullptr);
749     auto itemPattern1 = gridItemNode1->GetPattern<GridItemPattern>();
750     ASSERT_NE(itemPattern1, nullptr);
751     itemPattern1->SetSelected(true);
752     auto itemPattern2 = gridItemNode2->GetPattern<GridItemPattern>();
753     ASSERT_NE(itemPattern2, nullptr);
754     itemPattern2->SetSelected(true);
755     NG::DragPreviewOption option { true, false, true };
756     gridItemNode1->SetDragPreviewOptions(option);
757     gridNode->AddChild(gridItemNode1);
758     gridNode->AddChild(gridItemNode2);
759     /**
760      * @tc.steps: step3. Create gestureEventHub and Test SetDragGatherPixelMap.
761      */
762     auto eventHub = AceType::MakeRefPtr<EventHub>();
763     ASSERT_NE(eventHub, nullptr);
764     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
765     ASSERT_NE(gestureEventHub, nullptr);
766     GestureEvent info;
767     info.SetInputEventType(InputEventType::MOUSE_BUTTON);
768     gestureEventHub->SetDragGatherPixelMaps(info);
769     /**
770      * @tc.steps: step4. Get DragDropManager.
771      */
772     auto pipeline = PipelineContext::GetMainPipelineContext();
773     auto dragDropManager = pipeline->GetDragDropManager();
774     ASSERT_NE(dragDropManager, nullptr);
775     /**
776      * @tc.steps: step5. Test SetDragGatherPixelMap result.
777      */
778     DragDataCore dragData;
779     dragDropManager->GetGatherPixelMap(dragData, 1.0f);
780     auto size = dragData.shadowInfos.size();
781     EXPECT_EQ(size, 0);
782 }
783 
784 /**
785  * @tc.name: GestureEventHubModifierTest001
786  * @tc.desc: Test modifier AttachGesture & RemoveGesture & ClearModifierGesture
787  * @tc.type: FUNC
788  */
789 HWTEST_F(GestureEventHubTestNg, GestureEventHubModifierTest001, TestSize.Level1)
790 {
791     /**
792      * @tc.steps: step1. Create GestureEventHub.
793      * @tc.expected: gestureEventHub is not null.
794      */
795     auto eventHub = AceType::MakeRefPtr<EventHub>();
796     EXPECT_TRUE(eventHub);
797     auto frameNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
798     eventHub->AttachHost(frameNode);
799     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
800     EXPECT_TRUE(gestureEventHub);
801 
802     /**
803      * @tc.steps: step2. call AttachGesture
804      *            case: recreateGesture_ is true & modifierGestures_.size() != gestureHierarchy_.size()
805      * @tc.expected: recreateGesture_ = false
806      *               modifierGestures_ has one element & gestureHierarchy_ has one element
807      */
808     auto longPressGesture = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
809     gestureEventHub->AttachGesture(longPressGesture);
810     EXPECT_FALSE(gestureEventHub->recreateGesture_);
811     auto sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
812     auto sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
813     EXPECT_EQ(sizeModifierGestures, 1);
814     EXPECT_EQ(sizeGestureHierarchy, 1);
815 
816     /**
817      * @tc.steps: step3. call RemoveGesture
818      *            case: recreateGesture_ is true & modifierGestures_.size() != gestureHierarchy_.size()
819      * @tc.expected: recreateGesture_ = false
820      *               modifierGestures_ has zero element & gestureHierarchy_ has zero element
821      */
822     gestureEventHub->RemoveGesture(longPressGesture);
823     EXPECT_FALSE(gestureEventHub->recreateGesture_);
824     sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
825     sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
826     EXPECT_EQ(sizeModifierGestures, 0);
827     EXPECT_EQ(sizeGestureHierarchy, 0);
828 
829     /**
830      * @tc.steps: step4. call AttachGesture & ClearModifierGesture
831      *            case: recreateGesture_ is true & gestures_.size() != gestureHierarchy_.size()
832      * @tc.expected: recreateGesture_ = false
833      *               modifierGestures_ has cleared & gestureHierarchy_ has cleared
834      */
835     gestureEventHub->AttachGesture(longPressGesture);
836     EXPECT_FALSE(gestureEventHub->recreateGesture_);
837     sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
838     sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
839     EXPECT_EQ(sizeModifierGestures, 1);
840     EXPECT_EQ(sizeGestureHierarchy, 1);
841 
842     gestureEventHub->ClearModifierGesture();
843     EXPECT_FALSE(gestureEventHub->recreateGesture_);
844     sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
845     sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
846     EXPECT_EQ(sizeModifierGestures, 0);
847     EXPECT_EQ(sizeGestureHierarchy, 0);
848 }
849 
850 /**
851  * @tc.name: GestureEventHubModifierTest002
852  * @tc.desc: Test modifier RemoveGesturesByTag
853  * @tc.type: FUNC
854  */
855 HWTEST_F(GestureEventHubTestNg, GestureEventHubModifierTest002, TestSize.Level1)
856 {
857     /**
858      * @tc.steps: step1. Create GestureEventHub.
859      * @tc.expected: gestureEventHub is not null.
860      */
861     auto eventHub = AceType::MakeRefPtr<EventHub>();
862     EXPECT_TRUE(eventHub);
863     auto frameNode = AceType::MakeRefPtr<FrameNode>(NODE_TAG, -1, AceType::MakeRefPtr<Pattern>());
864     eventHub->AttachHost(frameNode);
865     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
866     EXPECT_TRUE(gestureEventHub);
867 
868     /**
869      * @tc.steps: step4. call RemoveGesturesByTag
870      * @tc.expected: recreateGesture_ = false
871      *               modifierGestures_ one element & gestureHierarchy_ has one element & group has one child
872      */
873     std::vector<RefPtr<Gesture>> gestures;
874     auto longPressGestureOne = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
875     longPressGestureOne->SetTag(CHECK_TAG_1);
876     gestures.emplace_back(longPressGestureOne);
877     auto longPressGestureTwo = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
878     gestures.emplace_back(longPressGestureTwo);
879     auto group = AceType::MakeRefPtr<GestureGroup>(GestureMode::Exclusive, gestures);
880     gestureEventHub->AttachGesture(group);
881     EXPECT_FALSE(gestureEventHub->recreateGesture_);
882     auto sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
883     auto sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
884     EXPECT_EQ(sizeModifierGestures, 1);
885     EXPECT_EQ(sizeGestureHierarchy, 1);
886 
887     gestureEventHub->RemoveGesturesByTag(CHECK_TAG_1);
888     EXPECT_FALSE(gestureEventHub->recreateGesture_);
889     sizeModifierGestures = static_cast<int32_t>(gestureEventHub->modifierGestures_.size());
890     sizeGestureHierarchy = static_cast<int32_t>(gestureEventHub->gestureHierarchy_.size());
891     EXPECT_EQ(sizeModifierGestures, 1);
892     EXPECT_EQ(sizeGestureHierarchy, 1);
893     EXPECT_EQ(group->gestures_.size(), 1);
894 }
895 
896 
897 /**
898  * @tc.name: GestureEventHubTest033
899  * @tc.desc: Test ClickEventActuator AddClickAfterEvent.
900  * @tc.type: FUNC
901  */
902 HWTEST_F(GestureEventHubTestNg, GestureEventHubTest033, TestSize.Level1)
903 {
904     /**
905      * @tc.steps: step1. Create GestureEventHub.
906      * @tc.expected: gestureEventHub is not null.
907      */
908     auto frameNode = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
909     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
910     ASSERT_NE(guestureEventHub, nullptr);
911 
__anon2a87ae410f02(GestureEvent& info) 912     auto clickCallback = [](GestureEvent& info) {};
913     auto clickEvent = AceType::MakeRefPtr<ClickEvent>(std::move(clickCallback));
914     guestureEventHub->AddClickAfterEvent(clickEvent);
915     EXPECT_NE(guestureEventHub->GetClickEvent(), nullptr);
916 }
917 
918 /**
919  * @tc.name: UpdateExtraInfoTest001
920  * @tc.desc: Test UpdateExtraInfo function
921  * @tc.type: FUNC
922  */
923 HWTEST_F(GestureEventHubTestNg, UpdateExtraInfoTest001, TestSize.Level1)
924 {
925     /**
926      * @tc.steps: step1. create frameNode、guestureEventHub.DragPreviewOption
927      */
928     auto frameNode = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
929     Dimension dimen(2.0);
930     BlurBackGroundInfo bgBackEffect = {{dimen, 1.0f, 1.0f, Color::TRANSPARENT,
931         AdaptiveColor::DEFAULT, {{2.0f, 2.0f}}}};
932     std::optional<Shadow> shadowVal;
933     std::optional<BorderRadiusProperty> borderRadiusVal;
934     OptionsAfterApplied optionTmp = {0, shadowVal, "test", borderRadiusVal, {bgBackEffect}};
935     DragPreviewOption dragPreviewInfos;
936     dragPreviewInfos.options = optionTmp;
937     frameNode->SetDragPreviewOptions(dragPreviewInfos);
938     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
939     /**
940      * @tc.steps: step2. Test UpdateExtraInfo
941     */
942     auto arkExtraInfoJson = JsonUtil::Create(true);
943     guestureEventHub->UpdateExtraInfo(frameNode, arkExtraInfoJson, 1.0f);
944     auto radiusJs = arkExtraInfoJson->GetDouble("blur_radius", -1);
945     EXPECT_EQ(radiusJs, 2.0);
946     /**
947      * @tc.steps: step3. Test UpdateExtraInfo invalid
948      */
949     dragPreviewInfos.options.blurbgEffect.backGroundEffect.radius.SetValue(0);
950     frameNode->SetDragPreviewOptions(dragPreviewInfos);
951     auto jsInfos = JsonUtil::Create(true);
952     guestureEventHub->UpdateExtraInfo(frameNode, jsInfos, 1.0f);
953     radiusJs = jsInfos->GetDouble("blur_radius", -1);
954     EXPECT_EQ(radiusJs, -1);
955 }
956 
957 /**
958  * @tc.name: GestureEventHubAddGestureToGestureHierarchyTest001
959  * @tc.desc: Test AddGestureToGestureHierarchy.
960  * @tc.type: FUNC
961  */
962 HWTEST_F(GestureEventHubTestNg, GestureEventHubAddGestureToGestureHierarchyTest001, TestSize.Level1)
963 {
964     /**
965      * @tc.steps: step1. Create GestureEventHub.
966      * @tc.expected: gestureEventHub is not null.
967      */
968     auto frameNode = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
969     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
970     ASSERT_NE(guestureEventHub, nullptr);
971 
972     /**
973      * @tc.steps: step2. Invoke AddGestureToGestureHierarchy.
974      * @tc.expected: gesture is null.
975      */
976     guestureEventHub->AddGestureToGestureHierarchy(nullptr);
977 }
978 
979 /**
980  * @tc.name: GestureEventHubGetPixelMapScaleTest001
981  * @tc.desc: Test GetPixelMapScale.
982  * @tc.type: FUNC
983  */
984 HWTEST_F(GestureEventHubTestNg, GestureEventHubGetPixelMapScaleTest001, TestSize.Level1)
985 {
986     /**
987      * @tc.steps: step1. Create GestureEventHub.
988      * @tc.expected: gestureEventHub is not null.
989      */
990     auto frameNode = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
991     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
992     ASSERT_NE(guestureEventHub, nullptr);
993 
994     /**
995      * @tc.steps: step2. Invoke GetPixelMapScale.
996      * @tc.expected: height is 1 and width is 0.
997      */
998     auto scale = guestureEventHub->GetPixelMapScale(1, 0);
999     EXPECT_EQ(scale, 1.0f);
1000 
1001     /**
1002      * @tc.steps: step2. Invoke GetPixelMapScale.
1003      * @tc.expected: height is 1 and width is 0.
1004      */
1005     scale = guestureEventHub->GetPixelMapScale(0, 1);
1006     EXPECT_EQ(scale, 1.0f);
1007 }
1008 
1009 /**
1010  * @tc.name: GestureEventHubGenerateMousePixelMapTest001
1011  * @tc.desc: Test GenerateMousePixelMap.
1012  * @tc.type: FUNC
1013  */
1014 HWTEST_F(GestureEventHubTestNg, GestureEventHubGenerateMousePixelMapTest001, TestSize.Level1)
1015 {
1016     /**
1017      * @tc.steps: step1. Create GestureEventHub.
1018      * @tc.expected: gestureEventHub is not null.
1019      */
1020     auto frameNode = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
1021     auto guestureEventHub = frameNode->GetOrCreateGestureEventHub();
1022     ASSERT_NE(guestureEventHub, nullptr);
1023 
1024     /**
1025      * @tc.steps: step2. Invoke GenerateMousePixelMap.
1026      * @tc.expected: TextDraggable is true.
1027      */
1028     GestureEvent info = GestureEvent();
1029     auto frameNode2 = guestureEventHub->GetFrameNode();
1030     ASSERT_NE(frameNode2, nullptr);
1031     EXPECT_EQ(guestureEventHub->pixelMap_, nullptr);
1032     guestureEventHub->SetTextDraggable(true);
1033     guestureEventHub->GenerateMousePixelMap(info);
1034     EXPECT_EQ(guestureEventHub->pixelMap_, 0);
1035 
1036     /**
1037      * @tc.steps: step3. Invoke GenerateMousePixelMap.
1038      * @tc.expected: TextDraggable is false.
1039      */
1040     guestureEventHub->pixelMap_ = nullptr;
1041     guestureEventHub->SetTextDraggable(false);
1042     guestureEventHub->GenerateMousePixelMap(info);
1043     EXPECT_EQ(guestureEventHub->pixelMap_, 0);
1044 }
1045 
1046 /**
1047  * @tc.name: GestureEventHubCopyEventTest001
1048  * @tc.desc: Test CopyEvent.
1049  * @tc.type: FUNC
1050  */
1051 HWTEST_F(GestureEventHubTestNg, GestureEventHubCopyEventTest001, TestSize.Level1)
1052 {
1053     /**
1054      * @tc.steps: step1. Create GestureEventHub.
1055      * @tc.expected: gestureEventHub is not null.
1056      */
1057     auto eventHub1 = AceType::MakeRefPtr<EventHub>();
1058     ASSERT_NE(eventHub1, nullptr);
1059     auto framenode = FrameNode::CreateFrameNode("test", 1, AceType::MakeRefPtr<Pattern>(), false);
1060     ASSERT_NE(framenode, nullptr);
1061     eventHub1->host_ = AceType::WeakClaim(AceType::RawPtr(framenode));
1062     auto gestureEventHub1 = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub1)));
1063     ASSERT_NE(gestureEventHub1, nullptr);
1064     auto dragEventActuator = AceType::MakeRefPtr<DragEventActuator>(
1065         AceType::WeakClaim(AceType::RawPtr(gestureEventHub1)), DRAG_DIRECTION, FINGERS_NUMBER, DRAG_DISTANCE);
1066     ASSERT_NE(dragEventActuator, nullptr);
1067 
1068     auto eventHub2 = AceType::MakeRefPtr<EventHub>();
1069     ASSERT_NE(eventHub2, nullptr);
1070     auto gestureEventHub2 = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub2)));
1071     ASSERT_NE(gestureEventHub2, nullptr);
1072 
1073     /**
1074      * @tc.steps: step2. Invoke CopyEvent.
1075      */
1076     gestureEventHub2->CopyEvent(gestureEventHub1);
1077     EXPECT_FALSE(gestureEventHub1->touchEventActuator_);
1078     EXPECT_FALSE(gestureEventHub1->clickEventActuator_);
1079     EXPECT_FALSE(gestureEventHub1->longPressEventActuator_);
1080     EXPECT_FALSE(gestureEventHub1->dragEventActuator_);
1081     EXPECT_FALSE(gestureEventHub1->showMenu_);
1082 
1083     /**
1084      * @tc.steps: step3. Invoke CopyEvent.
1085      */
1086     gestureEventHub1->touchEventActuator_ = AceType::MakeRefPtr<TouchEventActuator>();
1087     EXPECT_NE(gestureEventHub1->touchEventActuator_, nullptr);
1088     gestureEventHub1->clickEventActuator_ = AceType::MakeRefPtr<ClickEventActuator>(gestureEventHub1);
1089     EXPECT_NE(gestureEventHub1->clickEventActuator_, nullptr);
1090     gestureEventHub1->longPressEventActuator_ = AceType::MakeRefPtr<LongPressEventActuator>(gestureEventHub1);
1091     EXPECT_NE(gestureEventHub1->longPressEventActuator_, nullptr);
1092     gestureEventHub1->dragEventActuator_ = dragEventActuator;
1093     EXPECT_NE(gestureEventHub1->dragEventActuator_, nullptr);
__anon2a87ae411002(GestureEvent& info) 1094     GestureEventFunc callback = [](GestureEvent& info) {};
1095     gestureEventHub1->showMenu_ = AceType::MakeRefPtr<ClickEvent>(std::move(callback));
1096     EXPECT_NE(gestureEventHub1->showMenu_, nullptr);
1097     EXPECT_FALSE(gestureEventHub2->showMenu_);
1098     gestureEventHub2->CopyEvent(gestureEventHub1);
1099     EXPECT_TRUE(gestureEventHub2->showMenu_);
1100 
1101     /**
1102      * @tc.steps: step4. Invoke CopyEvent.
1103      */
1104     gestureEventHub2->showMenu_ = AceType::MakeRefPtr<ClickEvent>(std::move(callback));
1105     gestureEventHub2->CopyEvent(gestureEventHub1);
1106     EXPECT_TRUE(gestureEventHub2->showMenu_);
1107 }
1108 
1109 /**
1110  * @tc.name: GestureEventHubIsNeedSwitchToSubWindowTest001
1111  * @tc.desc: Test IsNeedSwitchToSubWindow.
1112  * @tc.type: FUNC
1113  */
1114 HWTEST_F(GestureEventHubTestNg, GestureEventHubIsNeedSwitchToSubWindowTest001, TestSize.Level1)
1115 {
1116     /**
1117      * @tc.steps: step1. Create GestureEventHub.
1118      * @tc.expected: gestureEventHub is not null.
1119      */
1120     auto frameNode1 = FrameNode::CreateFrameNode("myButton", 100, AceType::MakeRefPtr<Pattern>());
1121     auto gestureEventHub = frameNode1->GetOrCreateGestureEventHub();
1122     ASSERT_NE(gestureEventHub, nullptr);
1123 
1124     /**
1125      * @tc.steps: step2. Invoke IsNeedSwitchToSubWindow.
1126      * @tc.expected: gestureEventHub->IsPixelMapNeedScale() is false.
1127      */
1128     auto frameNode2 = gestureEventHub->GetFrameNode();
1129     EXPECT_NE(frameNode2, nullptr);
1130     frameNode2->GetOrCreateFocusHub();
1131     auto focusHub = frameNode2->GetFocusHub();
1132     EXPECT_NE(focusHub, nullptr);
1133     gestureEventHub->IsNeedSwitchToSubWindow();
1134     EXPECT_FALSE(gestureEventHub->IsPixelMapNeedScale());
1135 }
1136 
1137 /**
1138  * @tc.name: GestureEventHubSetDragGatherPixelMapsTest001
1139  * @tc.desc: Test SetDragGatherPixelMaps.
1140  * @tc.type: FUNC
1141  */
1142 HWTEST_F(GestureEventHubTestNg, GestureEventHubSetDragGatherPixelMapsTest001, TestSize.Level1)
1143 {
1144     /**
1145      * @tc.steps: step1. Create GestureEventHub and DragEventActuator.
1146      * @tc.expected: dragEventActuator and gestureEventHub is not null.
1147      */
1148     auto eventHub = AceType::MakeRefPtr<EventHub>();
1149     ASSERT_NE(eventHub, nullptr);
1150     auto framenode = FrameNode::CreateFrameNode("test", 1, AceType::MakeRefPtr<Pattern>(), false);
1151     ASSERT_NE(framenode, nullptr);
1152     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(framenode));
1153     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1154     ASSERT_NE(gestureEventHub, nullptr);
1155     auto dragEventActuator = AceType::MakeRefPtr<DragEventActuator>(
1156         AceType::WeakClaim(AceType::RawPtr(gestureEventHub)), DRAG_DIRECTION, FINGERS_NUMBER, DRAG_DISTANCE);
1157     ASSERT_NE(dragEventActuator, nullptr);
1158 
1159     /**
1160      * @tc.steps: step2. Invoke SetDragGatherPixelMaps.
1161      */
1162     GestureEvent info = GestureEvent();
1163     gestureEventHub->dragEventActuator_ = dragEventActuator;
1164     gestureEventHub->SetDragGatherPixelMaps(info);
1165     EXPECT_TRUE(!dragEventActuator->IsNeedGather());
1166 }
1167 
1168 /**
1169  * @tc.name: GestureEventHubGetSelectItemSizeTest001
1170  * @tc.desc: Test GetSelectItemSize.
1171  * @tc.type: FUNC
1172  */
1173 HWTEST_F(GestureEventHubTestNg, GestureEventHubGetSelectItemSizeTest001, TestSize.Level1)
1174 {
1175     /**
1176      * @tc.steps: step1. Create GestureEventHub and DragEventActuator.
1177      * @tc.expected: dragEventActuator and gestureEventHub is not null.
1178      */
1179     auto eventHub = AceType::MakeRefPtr<EventHub>();
1180     ASSERT_NE(eventHub, nullptr);
1181     auto framenode = FrameNode::CreateFrameNode("test", 1, AceType::MakeRefPtr<Pattern>(), false);
1182     ASSERT_NE(framenode, nullptr);
1183     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(framenode));
1184     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1185     ASSERT_NE(gestureEventHub, nullptr);
1186     auto dragEventActuator = AceType::MakeRefPtr<DragEventActuator>(
1187         AceType::WeakClaim(AceType::RawPtr(gestureEventHub)), DRAG_DIRECTION, FINGERS_NUMBER, DRAG_DISTANCE);
1188     ASSERT_NE(dragEventActuator, nullptr);
1189 
1190     /**
1191      * @tc.steps: step2. Invoke GetSelectItemSize.
1192      */
1193     gestureEventHub->dragEventActuator_ = dragEventActuator;
1194     gestureEventHub->GetSelectItemSize();
1195     EXPECT_TRUE(!gestureEventHub->dragEventActuator_->IsNeedGather());
1196 }
1197 
1198 /**
1199  * @tc.name: GestureEventHubNodeTest003
1200  * @tc.desc: Test SetOnTouchEvent, SetJSFrameNodeOnTouchEvent and ClearJSFrameNodeOnTouch.
1201  * @tc.type: FUNC
1202  */
1203 HWTEST_F(GestureEventHubTestNg, GestureEventHubNodeTest003, TestSize.Level1)
1204 {
1205     /**
1206      * @tc.steps: step1. Create GestureEventHub.
1207      * @tc.expected: gestureEventHub is not null.
1208      */
1209     auto eventHub = AceType::MakeRefPtr<EventHub>();
1210     EXPECT_TRUE(eventHub);
1211     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
1212     EXPECT_TRUE(gestureEventHub);
1213 
1214     /**
1215      * @tc.steps: step2. Create touchEventFunc and call SetOnTouchEvent.
1216      * @tc.expected: TouchEventActuator_ is nullptr.
1217      */
__anon2a87ae411102(TouchEventInfo& info) 1218     TouchEventFunc touchEventFunc = [](TouchEventInfo& info) {};
1219     gestureEventHub->touchEventActuator_ = AceType::MakeRefPtr<TouchEventActuator>();
1220     gestureEventHub->SetOnTouchEvent(std::move(touchEventFunc));
1221     gestureEventHub->touchEventActuator_ = nullptr;
1222     gestureEventHub->SetOnTouchEvent(std::move(touchEventFunc));
1223     gestureEventHub->SetJSFrameNodeOnTouchEvent(std::move(touchEventFunc));
1224     gestureEventHub->ClearJSFrameNodeOnTouch();
1225     EXPECT_NE(gestureEventHub->touchEventActuator_, nullptr);
1226 }
1227 
1228 /**
1229  * @tc.name: GestureEventHubNodeTest004
1230  * @tc.desc: ClearJSFrameNodeOnClick.
1231  * @tc.type: FUNC
1232  */
1233 HWTEST_F(GestureEventHubTestNg, GestureEventHubNodeTest004, TestSize.Level1)
1234 {
1235     /**
1236      * @tc.steps: step1. Create GestureEventHub.
1237      * @tc.expected: gestureEventHub is not null.
1238      */
1239     auto eventHub = AceType::MakeRefPtr<EventHub>();
1240     EXPECT_TRUE(eventHub);
1241     auto gestureEventHub = AceType::MakeRefPtr<GestureEventHub>(eventHub);
1242     EXPECT_TRUE(gestureEventHub);
1243 
1244     /**
1245      * @tc.steps: step2. Call ClearJSFrameNodeOnClick.
1246      * @tc.expected: clickEventActuator_ is nullptr.
1247      */
1248     gestureEventHub->ClearJSFrameNodeOnClick();
1249     EXPECT_FALSE(gestureEventHub->clickEventActuator_);
1250 }
1251 
1252 /**
1253  * @tc.name: HandleOnDragUpdate004
1254  * @tc.desc: Test Functions related with drag
1255  * @tc.type: FUNC
1256  */
1257 HWTEST_F(GestureEventHubTestNg, HandleOnDragUpdate004, TestSize.Level1)
1258 {
1259     /**
1260      * @tc.steps: step1. Create gestureEventHub.
1261      * @tc.expected: gestureEventHub is not null.
1262      */
1263     auto frameNode = FrameNode::CreateFrameNode("MyButton", 102, AceType::MakeRefPtr<Pattern>());
1264     auto gestureEventHub = frameNode->GetOrCreateGestureEventHub();
1265     ASSERT_NE(gestureEventHub, nullptr);
1266     auto eventHub = gestureEventHub->eventHub_.Upgrade();
1267     eventHub->AttachHost(frameNode);
1268     ASSERT_NE(eventHub, nullptr);
1269 
1270     auto pipeline = PipelineContext::GetCurrentContext();
1271     ASSERT_NE(pipeline, nullptr);
1272 
1273     /**
1274      * @tc.steps: step2. call HandleOnDragUpdate
1275      * @tc.expected: dragDropProxy_ is not null.
1276      */
1277     constexpr int64_t PROXY_ID_NOT_FIT = 101;
1278     auto dragDropProxy = AceType::MakeRefPtr<DragDropProxy>(PROXY_ID_NOT_FIT);
1279     gestureEventHub->dragDropProxy_ = dragDropProxy;
1280     GestureEvent info;
1281     auto dragDropManager = pipeline->GetDragDropManager();
1282     ASSERT_NE(dragDropManager, nullptr);
1283     dragDropManager->isDragged_ = true;
1284     gestureEventHub->HandleOnDragUpdate(info);
1285     EXPECT_TRUE(dragDropManager->IsDragged());
1286 }
1287 
1288 /**
1289  * @tc.name: GestureEventHubGetPixelMapOffset001
1290  * @tc.desc: Test GetPixelMapOffset
1291  * @tc.type: FUNC
1292  */
1293 HWTEST_F(GestureEventHubTestNg, GestureEventHubGetPixelMapOffset001, TestSize.Level1)
1294 {
1295     /**
1296      * @tc.steps: step1. Create gestureEventHub.
1297      * @tc.expected: gestureEventHub is not null.
1298      */
1299     auto frameNode1 = FrameNode::CreateFrameNode("MyButton", 102, AceType::MakeRefPtr<Pattern>());
1300     auto gestureEventHub = frameNode1->GetOrCreateGestureEventHub();
1301     ASSERT_NE(gestureEventHub, nullptr);
1302     auto eventHub = gestureEventHub->eventHub_.Upgrade();
1303     eventHub->AttachHost(frameNode1);
1304     ASSERT_NE(eventHub, nullptr);
1305 
1306     /**
1307      * @tc.steps2: Invoke GetPixelMapOffset
1308      * @tc.expected: NearZero(gestureEventHub->frameNodeSize_.Width()) is true,
1309      * NearZero(size.Width()) is false.
1310      */
1311     constexpr float PIXELMAP_WIDTH_RATE = -0.5f;
1312     constexpr float PIXELMAP_HEIGHT_RATE = -0.2f;
1313     GestureEvent info = GestureEvent();
1314     auto size = SizeF(1, 1);
1315     gestureEventHub->GetPixelMapOffset(info, size, 1.0f);
1316     auto frameNode2 = gestureEventHub->GetFrameNode();
1317     EXPECT_NE(frameNode2, nullptr);
1318     OffsetF result = OffsetF(size.Width() * PIXELMAP_WIDTH_RATE, size.Height() * PIXELMAP_HEIGHT_RATE);
1319     EXPECT_TRUE(NearZero(gestureEventHub->frameNodeSize_.Width()));
1320     EXPECT_FALSE(NearZero(size.Width()));
1321     EXPECT_FALSE(result.GetX() >= 0.0f);
1322     EXPECT_FALSE(result.GetX() + size.Width() <= 0.0f);
1323     EXPECT_FALSE(result.GetY() >= 0.0f);
1324     EXPECT_FALSE(result.GetY() + size.Height() <= 0.0f);
1325 
1326     /**
1327      * @tc.steps3: Invoke GetPixelMapOffset
1328      * @tc.expected: NearZero(gestureEventHub->frameNodeSize_.Width()) is true,
1329      * NearZero(size.Width()) is true.
1330      */
1331     size = SizeF(0, 0);
1332     gestureEventHub->GetPixelMapOffset(info, size, 1.0f);
1333     result = OffsetF(size.Width() * PIXELMAP_WIDTH_RATE, size.Height() * PIXELMAP_HEIGHT_RATE);
1334     EXPECT_TRUE(NearZero(gestureEventHub->frameNodeSize_.Width()));
1335     EXPECT_TRUE(NearZero(size.Width()));
1336     EXPECT_TRUE(result.GetX() >= 0.0f);
1337     EXPECT_TRUE(result.GetX() + size.Width() <= 0.0f);
1338     EXPECT_TRUE(result.GetY() >= 0.0f);
1339     EXPECT_TRUE(result.GetY() + size.Height() <= 0.0f);
1340 
1341     /**
1342      * @tc.steps4: Invoke GetPixelMapOffset
1343      * @tc.expected: NearZero(gestureEventHub->frameNodeSize_.Width()) is false,
1344      * NearZero(size.Width()) is false.
1345      */
1346     size = SizeF(500, 600);
1347     gestureEventHub->frameNodeSize_ = SizeF(1, 1);
1348     gestureEventHub->GetPixelMapOffset(info, size, 1.0f);
1349     result = OffsetF(size.Width() * PIXELMAP_WIDTH_RATE, size.Height() * PIXELMAP_HEIGHT_RATE);
1350     EXPECT_FALSE(NearZero(gestureEventHub->frameNodeSize_.Width()));
1351     EXPECT_FALSE(NearZero(size.Width()));
1352 
1353     /**
1354      * @tc.steps5: Invoke GetPixelMapOffset
1355      * @tc.expected: NearZero(gestureEventHub->frameNodeSize_.Width()) is false,
1356      * NearZero(size.Width()) is true.
1357      */
1358     size = SizeF(0, 0);
1359     gestureEventHub->frameNodeSize_ = SizeF(1, 1);
1360     gestureEventHub->GetPixelMapOffset(info, size, 1.0f);
1361     result = OffsetF(size.Width() * PIXELMAP_WIDTH_RATE, size.Height() * PIXELMAP_HEIGHT_RATE);
1362     EXPECT_FALSE(NearZero(gestureEventHub->frameNodeSize_.Width()));
1363     EXPECT_TRUE(NearZero(size.Width()));
1364 }
1365 
1366 /**
1367  * @tc.name: GestureEventHubGetPixelMapScaleTest002
1368  * @tc.desc: Test GetPixelMapScale
1369  * @tc.type: FUNC
1370  */
1371 HWTEST_F(GestureEventHubTestNg, GestureEventHubGetPixelMapScaleTest002, TestSize.Level1)
1372 {
1373     /**
1374      * @tc.steps: step1. Create gestureEventHub.
1375      * @tc.expected: gestureEventHub is not null.
1376      */
1377     auto frameNode1 = FrameNode::CreateFrameNode(V2::WEB_ETS_TAG, 102, AceType::MakeRefPtr<Pattern>());
1378     auto gestureEventHub = frameNode1->GetOrCreateGestureEventHub();
1379     ASSERT_NE(gestureEventHub, nullptr);
1380     auto eventHub = gestureEventHub->eventHub_.Upgrade();
1381     eventHub->AttachHost(frameNode1);
1382     ASSERT_NE(eventHub, nullptr);
1383 
1384     /**
1385      * @tc.steps2: Invoke GetPixelMapScale
1386      */
1387     int32_t height = 500;
1388     int32_t width = 600;
1389     GestureEvent info = GestureEvent();
1390     auto size = SizeF(1, 1);
1391     gestureEventHub->GetPixelMapOffset(info, size, 1.0f);
1392     auto frameNode2 = gestureEventHub->GetFrameNode();
1393     EXPECT_NE(frameNode2, nullptr);
1394     auto pipeline = PipelineContext::GetCurrentContext();
1395     EXPECT_NE(pipeline, nullptr);
1396     auto dragDropManager = pipeline->GetDragDropManager();
1397     EXPECT_NE(dragDropManager, nullptr);
1398     auto dragPreviewOption = frameNode2->GetDragPreviewOption();
1399     dragPreviewOption.isScaleEnabled = true;
1400     gestureEventHub->GetPixelMapScale(height, width);
1401     EXPECT_FALSE(!frameNode2->GetDragPreviewOption().isScaleEnabled);
1402     EXPECT_FALSE(!(frameNode2->GetTag() == V2::WEB_ETS_TAG));
1403 
1404     /**
1405      * @tc.steps3: Invoke GetPixelMapScale
1406      */
1407     constexpr float PIXELMAP_DEFALUT_LIMIT_SCALE = 0.5f;
1408     SystemProperties::SetDevicePhysicalHeight(600);
1409     SystemProperties::SetDevicePhysicalWidth(200);
1410     int32_t deviceHeight = SystemProperties::GetDevicePhysicalHeight();
1411     int32_t deviceWidth = SystemProperties::GetDevicePhysicalWidth();
1412     int32_t maxDeviceLength = std::max(deviceHeight, deviceWidth);
1413     int32_t minDeviceLength = std::min(deviceHeight, deviceWidth);
1414     gestureEventHub->GetPixelMapScale(height, width);
1415     EXPECT_TRUE(maxDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE > minDeviceLength);
1416     EXPECT_TRUE(height > minDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE);
1417 
1418     /**
1419      * @tc.steps4: Invoke GetPixelMapScale
1420      */
1421     height = 50;
1422     SystemProperties::SetDevicePhysicalHeight(600);
1423     SystemProperties::SetDevicePhysicalWidth(200);
1424     deviceHeight = SystemProperties::GetDevicePhysicalHeight();
1425     deviceWidth = SystemProperties::GetDevicePhysicalWidth();
1426     maxDeviceLength = std::max(deviceHeight, deviceWidth);
1427     minDeviceLength = std::min(deviceHeight, deviceWidth);
1428     gestureEventHub->GetPixelMapScale(height, width);
1429     EXPECT_TRUE(maxDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE > minDeviceLength);
1430     EXPECT_FALSE(height > minDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE);
1431 }
1432 
1433 /**
1434  * @tc.name: GestureEventHubGetPixelMapScaleTest003
1435  * @tc.desc: Test GetPixelMapScale
1436  * @tc.type: FUNC
1437  */
1438 HWTEST_F(GestureEventHubTestNg, GestureEventHubGetPixelMapScaleTest003, TestSize.Level1)
1439 {
1440     /**
1441      * @tc.steps: step1. Create gestureEventHub.
1442      * @tc.expected: gestureEventHub is not null.
1443      */
1444     auto frameNode1 = FrameNode::CreateFrameNode(V2::WEB_ETS_TAG, 102, AceType::MakeRefPtr<Pattern>());
1445     auto gestureEventHub = frameNode1->GetOrCreateGestureEventHub();
1446     ASSERT_NE(gestureEventHub, nullptr);
1447     auto eventHub = gestureEventHub->eventHub_.Upgrade();
1448     eventHub->AttachHost(frameNode1);
1449     ASSERT_NE(eventHub, nullptr);
1450 
1451     /**
1452      * @tc.steps2: Invoke GetPixelMapScale
1453      */
1454     int32_t height = 500;
1455     int32_t width = 600;
1456     constexpr float PIXELMAP_DEFALUT_LIMIT_SCALE = 0.5f;
1457     constexpr float PIXELMAP_DRAG_WGR_SCALE = 3.0f;
1458     SystemProperties::SetDevicePhysicalHeight(600);
1459     SystemProperties::SetDevicePhysicalWidth(600);
1460     int32_t deviceHeight = SystemProperties::GetDevicePhysicalHeight();
1461     int32_t deviceWidth = SystemProperties::GetDevicePhysicalWidth();
1462     int32_t maxDeviceLength = std::max(deviceHeight, deviceWidth);
1463     int32_t minDeviceLength = std::min(deviceHeight, deviceWidth);
1464     gestureEventHub->GetPixelMapScale(height, width);
1465     EXPECT_FALSE(maxDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE > minDeviceLength);
1466     EXPECT_FALSE(gestureEventHub->GetTextDraggable());
1467     EXPECT_TRUE(height > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1468     EXPECT_TRUE(width > minDeviceLength * PIXELMAP_DRAG_WGR_TEXT_SCALE / PIXELMAP_DRAG_WGR_SCALE);
1469     EXPECT_TRUE(height > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1470     EXPECT_TRUE(width > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1471 
1472     /**
1473      * @tc.steps3: Invoke GetPixelMapScale
1474      */
1475     gestureEventHub->SetTextDraggable(true);
1476     gestureEventHub->GetPixelMapScale(height, width);
1477     EXPECT_FALSE(maxDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE > minDeviceLength);
1478     EXPECT_TRUE(gestureEventHub->GetTextDraggable());
1479     EXPECT_TRUE(height > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1480     EXPECT_TRUE(width > minDeviceLength * PIXELMAP_DRAG_WGR_TEXT_SCALE / PIXELMAP_DRAG_WGR_SCALE);
1481 
1482     /**
1483      * @tc.steps4: Invoke GetPixelMapScale
1484      */
1485     height = 100;
1486     width = 100;
1487     gestureEventHub->SetTextDraggable(false);
1488     gestureEventHub->GetPixelMapScale(height, width);
1489     EXPECT_FALSE(maxDeviceLength * PIXELMAP_DEFALUT_LIMIT_SCALE > minDeviceLength);
1490     EXPECT_FALSE(gestureEventHub->GetTextDraggable());
1491     EXPECT_FALSE(height > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1492     EXPECT_FALSE(width > minDeviceLength / PIXELMAP_DRAG_WGR_SCALE);
1493 }
1494 
1495 /**
1496  * @tc.name: ProcessTouchTestHit001
1497  * @tc.desc: Test ProcessTouchTestHit func
1498  * @tc.type: FUNC
1499  */
1500 HWTEST_F(GestureEventHubTestNg, ProcessTouchTestHit001, TestSize.Level1)
1501 {
1502     /**
1503      * @tc.steps: step1. Create GestureEventHub.
1504      * @tc.expected: gestureEventHub is not null.
1505      */
1506     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
1507     ASSERT_NE(gridNode, nullptr);
1508     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1509     ASSERT_NE(gestureEventHub, nullptr);
1510     auto recognizerGroup = CreateRecognizerGroup(gridNode);
1511     ASSERT_NE(recognizerGroup, nullptr);
1512 
1513     /**
1514      * @tc.steps: step2. Invoke ProcessTouchTestHit.
1515      */
1516     gestureEventHub->parallelCombineClick = true;
__anon2a87ae411202(GestureEvent& info) 1517     gestureEventHub->SetUserOnClick([](GestureEvent& info) {});
1518 
1519     auto userClickEventActuator = gestureEventHub->GetUserClickEventActuator();
1520     ASSERT_NE(userClickEventActuator, nullptr);
1521     TouchRestrict touchRestrict;
1522     TouchTestResult innerTargets;
1523     TouchTestResult finalResult;
1524     ResponseLinkResult responseLinkResult;
1525     innerTargets.emplace_back(recognizerGroup);
1526     gestureEventHub->redirectClick_=true;
1527     auto flag = gestureEventHub->ProcessTouchTestHit(
1528         COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, PointF(), nullptr, responseLinkResult);
1529     EXPECT_FALSE(flag);
1530 }
1531 
1532 /**
1533  * @tc.name: StartLongPressActionForWeb001
1534  * @tc.desc: Test StartLongPressActionForWeb func
1535  * @tc.type: FUNC
1536  */
1537 HWTEST_F(GestureEventHubTestNg, StartLongPressActionForWeb001, TestSize.Level1)
1538 {
1539     /**
1540      * @tc.steps: step1. Create GestureEventHub.
1541      * @tc.expected: gestureEventHub is not null.
1542      */
1543     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
1544     ASSERT_NE(gridNode, nullptr);
1545     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1546     ASSERT_NE(gestureEventHub, nullptr);
1547 
1548     /**
1549      * @tc.steps: step2. set DragEvent and handle drag.
1550      */
__anon2a87ae411302(GestureEvent& info) 1551     auto dragActionStart = [](GestureEvent& info) {};
__anon2a87ae411402(GestureEvent& info) 1552     auto dragActionUpdate = [](GestureEvent& info) {};
__anon2a87ae411502(GestureEvent& info) 1553     auto dragActionEnd = [](GestureEvent& info) {};
__anon2a87ae411602() 1554     auto dragActionCancel = []() {};
1555     auto dragEvent = AceType::MakeRefPtr<DragEvent>(
1556         std::move(dragActionStart), std::move(dragActionUpdate), std::move(dragActionEnd), std::move(dragActionCancel));
1557     gestureEventHub->SetCustomDragEvent(dragEvent, PAN_DIRECTION_ALL, FINGERS, DISTANCE);
1558 
1559     /**
1560      * @tc.steps: step3. create taskExecutor to fire task callBack.
1561      * @tc.expected: taskExecutor is not null.
1562      */
1563     auto context = PipelineContext::GetCurrentContext();
1564     ASSERT_NE(context, nullptr);
1565     context->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
1566     auto taskExecutor = context->GetTaskExecutor();
1567     ASSERT_NE(taskExecutor, nullptr);
1568     gestureEventHub->StartLongPressActionForWeb();
1569     ASSERT_NE(gestureEventHub->GetDragEventActuator(), nullptr);
1570 }
1571 
1572 /**
1573  * @tc.name: WebDragAction001
1574  * @tc.desc: Test web drag action.
1575  * @tc.type: FUNC
1576  */
1577 HWTEST_F(GestureEventHubTestNg, WebDragAction001, TestSize.Level1)
1578 {
1579     /**
1580      * @tc.steps: step1. Create GestureEventHub.
1581      * @tc.expected: gestureEventHub is not null.
1582      */
1583     auto frameNode = FrameNode::GetOrCreateFrameNode(V2::WEB_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
__anon2a87ae411702() 1584         []() {return AceType::MakeRefPtr<Pattern>(); });
1585     ASSERT_NE(frameNode, nullptr);
1586     auto gestureEventHub = frameNode->GetOrCreateGestureEventHub();
1587     ASSERT_NE(gestureEventHub, nullptr);
1588 
1589     /**
1590      * @tc.steps: step2. set DragEvent and handle drag.
1591      */
__anon2a87ae411802(GestureEvent& info) 1592     auto dragActionStart = [](GestureEvent& info) {};
__anon2a87ae411902(GestureEvent& info) 1593     auto dragActionUpdate = [](GestureEvent& info) {};
__anon2a87ae411a02(GestureEvent& info) 1594     auto dragActionEnd = [](GestureEvent& info) {};
__anon2a87ae411b02() 1595     auto dragActionCancel = []() {};
1596     auto dragEvent = AceType::MakeRefPtr<DragEvent>(
1597         std::move(dragActionStart), std::move(dragActionUpdate), std::move(dragActionEnd), std::move(dragActionCancel));
1598     gestureEventHub->SetCustomDragEvent(dragEvent, PAN_DIRECTION_ALL, FINGERS, DISTANCE);
1599     gestureEventHub->HandleNotallowDrag(GestureEvent());
1600 
1601     /**
1602      * @tc.steps: step3. create taskExecutor to fire task callBack.
1603      * @tc.expected: taskExecutor is not null.
1604      */
1605     auto context = PipelineContext::GetCurrentContext();
1606     ASSERT_NE(context, nullptr);
1607     context->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
1608     auto taskExecutor = context->GetTaskExecutor();
1609     ASSERT_NE(taskExecutor, nullptr);
1610     gestureEventHub->StartDragTaskForWeb();
1611     gestureEventHub->CancelDragForWeb();
1612     gestureEventHub->ResetDragActionForWeb();
1613     ASSERT_NE(gestureEventHub->GetDragEventActuator(), nullptr);
1614 }
1615 
1616 /**
1617  * @tc.name: GenerateMousePixelMap001
1618  * @tc.desc: Test GenerateMousePixelMap func.
1619  * @tc.type: FUNC
1620  */
1621 HWTEST_F(GestureEventHubTestNg, GenerateMousePixelMap001, TestSize.Level1)
1622 {
1623     /**
1624      * @tc.steps: step1. Create text frameNode and add drag frameNode then Create GestureEventHub.
1625      * @tc.expected: gestureEventHub is not null.
1626      */
1627     auto textPattern = AceType::MakeRefPtr<TextPattern>();
1628     auto frameNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG,
1629         ElementRegister::GetInstance()->MakeUniqueId(), textPattern);
1630     ASSERT_NE(frameNode, nullptr);
1631     auto dragNode = FrameNode::GetOrCreateFrameNode(V2::IMAGE_ETS_TAG,
__anon2a87ae411c02() 1632         ElementRegister::GetInstance()->MakeUniqueId(), []() {return AceType::MakeRefPtr<Pattern>(); });
1633     textPattern->dragNode_ = dragNode;
1634     auto gestureEventHub = frameNode->GetOrCreateGestureEventHub();
1635     ASSERT_NE(gestureEventHub, nullptr);
1636 
1637     /**
1638      * @tc.steps: step2. Invoke GenerateMousePixelMap.
1639      * @tc.expected: TextDraggable is true.
1640      */
1641     gestureEventHub->SetTextDraggable(true);
1642     GestureEvent info;
1643     gestureEventHub->GenerateMousePixelMap(info);
1644     EXPECT_TRUE(gestureEventHub->pixelMap_ == nullptr);
1645 }
1646 
1647 /**
1648  * @tc.name: RegisterCoordinationListener001
1649  * @tc.desc: Test RegisterCoordinationListener func.
1650  * @tc.type: FUNC
1651  */
1652 HWTEST_F(GestureEventHubTestNg, RegisterCoordinationListener001, TestSize.Level1)
1653 {
1654     /**
1655      * @tc.steps: step1. Create GestureEventHub.
1656      * @tc.expected: gestureEventHub is not null.
1657      */
1658     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
1659     ASSERT_NE(gridNode, nullptr);
1660     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1661     ASSERT_NE(gestureEventHub, nullptr);
1662 
1663     /**
1664      * @tc.steps: step2. set DragEvent and handle drag.
1665      */
__anon2a87ae411d02(GestureEvent& info) 1666     auto dragActionStart = [](GestureEvent& info) {};
__anon2a87ae411e02(GestureEvent& info) 1667     auto dragActionUpdate = [](GestureEvent& info) {};
__anon2a87ae411f02(GestureEvent& info) 1668     auto dragActionEnd = [](GestureEvent& info) {};
__anon2a87ae412002() 1669     auto dragActionCancel = []() {};
1670     auto dragEvent = AceType::MakeRefPtr<DragEvent>(
1671         std::move(dragActionStart), std::move(dragActionUpdate), std::move(dragActionEnd), std::move(dragActionCancel));
1672     gestureEventHub->SetCustomDragEvent(dragEvent, PAN_DIRECTION_ALL, FINGERS, DISTANCE);
1673 
1674     /**
1675      * @tc.steps: step3. create taskExecutor to fire task callBack and invoke registerCoordinationListener.
1676      * @tc.expected: registerCoordinationListener is called once.
1677      */
1678     auto context = PipelineContext::GetCurrentContext();
1679     ASSERT_NE(context, nullptr);
1680     context->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
1681     auto taskExecutor = context->GetTaskExecutor();
1682     ASSERT_NE(taskExecutor, nullptr);
1683     auto mock = AceType::DynamicCast<MockInteractionInterface>(InteractionInterface::GetInstance());
1684     ASSERT_NE(mock, nullptr);
1685     EXPECT_CALL(*mock, RegisterCoordinationListener(testing::_)).Times(1).WillOnce(Return(50));
1686     gestureEventHub->RegisterCoordinationListener(context);
1687 }
1688 
1689 /**
1690  * @tc.name: GridNodeHandleOnDragUpdate001
1691  * @tc.desc: Test gridnode Drag scene.
1692  * @tc.type: FUNC
1693  */
1694 HWTEST_F(GestureEventHubTestNg, GridNodeHandleOnDragUpdate001, TestSize.Level1)
1695 {
1696     /**
1697      * @tc.steps: step1. Create grid with gridItem frame node tree.
1698      * @tc.expected: instance is not null.
1699      */
1700     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
1701     ASSERT_NE(gridNode, nullptr);
1702     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1703     ASSERT_NE(gestureEventHub, nullptr);
1704     for (const auto& child : gridNode->GetChildren()) {
1705         auto childNode = AceType::DynamicCast<FrameNode>(child);
1706         ASSERT_TRUE(childNode != nullptr);
1707         auto gridItemPattern = childNode->GetPattern<GridItemPattern>();
1708         ASSERT_TRUE(gridItemPattern != nullptr);
1709         gridItemPattern->SetSelected(true);
1710     }
1711     auto gridItem = AceType::DynamicCast<FrameNode>(gridNode->GetChildByIndex(0));
1712     ASSERT_NE(gridItem, nullptr);
1713     auto pattern = gridNode->GetPattern<GridPattern>();
1714     ASSERT_NE(pattern, nullptr);
1715     pattern->gridLayoutInfo_.endIndex_ = DEFAULT_CHILD_COUNT;
1716 
1717     /**
1718      * @tc.steps: step2. set all griditems are selected.
1719      */
1720     gestureEventHub->InitDragDropEvent();
1721     constexpr int64_t PROXY_ID_NOT_FIT = 101;
1722     auto dragDropProxy = AceType::MakeRefPtr<DragDropProxy>(PROXY_ID_NOT_FIT);
1723     gestureEventHub->dragDropProxy_ = dragDropProxy;
1724     auto actuator = gestureEventHub->GetDragEventActuator();
1725     ASSERT_NE(actuator, nullptr);
1726     actuator->isSelectedItemNode_ = true;
1727     actuator->FindItemParentNode(gridItem);
1728 
1729     /**
1730      * @tc.steps: step3. handle grid drag when switch to subwindow.
1731      */
1732     GestureEvent info;
1733     gestureEventHub->HandleOnDragStart(info);
1734     for (double step = 0; step < DEFAULT_OFFSET_Y; ++step) {
1735         info.SetOffsetY(step);
1736         gestureEventHub->HandleOnDragUpdate(info);
1737     }
1738     gestureEventHub->HandleOnDragEnd(info);
1739     ASSERT_NE(gestureEventHub->gestureInfoForWeb_, nullptr);
1740 }
1741 
1742 /**
1743  * @tc.name: GetDragCallback001
1744  * @tc.desc: Test GetDragCallback fun and fire callback.
1745  * @tc.type: FUNC
1746  */
1747 HWTEST_F(GestureEventHubTestNg, GetDragCallback001, TestSize.Level1)
1748 {
1749     /**
1750      * @tc.steps: step1. Create grid with gridItem frame node tree.
1751      * @tc.expected: instance is not null.
1752      */
1753     auto gridNode = CreateGridNodeWithChild(DEFAULT_CHILD_COUNT, GridItemStyle::NONE);
1754     ASSERT_NE(gridNode, nullptr);
1755     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1756     ASSERT_NE(gestureEventHub, nullptr);
1757     auto eventHub = gridNode->GetEventHub<GridEventHub>();
1758 
1759     /**
1760      * @tc.steps: step2. create taskExecutor to fire task callBack.
1761      * @tc.expected: taskExecutor is not null.
1762      */
1763     auto context = PipelineContext::GetCurrentContext();
1764     ASSERT_NE(context, nullptr);
1765     context->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
1766     auto taskExecutor = context->GetTaskExecutor();
1767     ASSERT_NE(taskExecutor, nullptr);
1768     auto dragDropManager = context->GetDragDropManager();
1769     ASSERT_NE(dragDropManager, nullptr);
1770     auto mock = AceType::DynamicCast<MockInteractionInterface>(InteractionInterface::GetInstance());
1771     ASSERT_NE(mock, nullptr);
1772 
1773     /**
1774      * @tc.steps: step3. Invoke GetDragCallback to get function and fire this function.
1775      * @tc.expected: fire function success.
1776      */
1777     int32_t callbackInfo = 0;
__anon2a87ae412102(const RefPtr<OHOS::Ace::DragEvent>& ) 1778     eventHub->SetOnDragEnd([&callbackInfo](const RefPtr<OHOS::Ace::DragEvent>& /*dragEvent*/) {
1779         callbackInfo = 1;
1780     });
1781     auto dragCallback = gestureEventHub->GetDragCallback(context, eventHub);
1782     ASSERT_NE(dragCallback, nullptr);
1783     EXPECT_CALL(*mock, UnRegisterCoordinationListener()).Times(1).WillOnce(Return(50));
1784     DragNotifyMsgCore notifyMessage;
1785     dragCallback(notifyMessage);
1786     EXPECT_FALSE(dragDropManager->IsDragged());
1787     EXPECT_EQ(callbackInfo, 1);
1788 }
1789 
1790 /**
1791  * @tc.name: CopyGestures001
1792  * @tc.desc: Test CopyGestures from another guestureEventHub.
1793  * @tc.type: FUNC
1794  */
1795 HWTEST_F(GestureEventHubTestNg, CopyGestures001, TestSize.Level1)
1796 {
1797     /**
1798      * @tc.steps: step1. Create guestureEventHub dest and source.
1799      */
1800     auto eventHubSrc = AceType::MakeRefPtr<EventHub>();
1801     auto eventHubDest = AceType::MakeRefPtr<EventHub>();
1802     auto gestureEventHubSrc = eventHubSrc->GetOrCreateGestureEventHub();
1803     auto gestureEventHubDest = eventHubDest->GetOrCreateGestureEventHub();
1804     auto longPressGesture = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
1805     longPressGesture->SetTag(CHECK_TAG_1);
1806     gestureEventHubSrc->AddGesture(longPressGesture);
1807 
1808     /**
1809      * @tc.steps: step2. Invoke CopyGestures.
1810      * @tc.expected: The member variable of dest is a copy of source.
1811      */
1812     gestureEventHubDest->CopyGestures(gestureEventHubSrc);
1813     EXPECT_EQ(gestureEventHubDest->gestures_.size(), gestureEventHubSrc->gestures_.size());
1814     EXPECT_TRUE(gestureEventHubDest->recreateGesture_);
1815 }
1816 
1817 /**
1818  * @tc.name: SetResponseRegionWithRemove001
1819  * @tc.desc: Test SetResponseRegion with RemoveLastResponseRect.
1820  * @tc.type: FUNC
1821  */
1822 HWTEST_F(GestureEventHubTestNg, SetResponseRegionWithRemove001, TestSize.Level1)
1823 {
1824     /**
1825      * @tc.steps: step1. Create guestureEventHub.
1826      */
1827     auto eventHub = AceType::MakeRefPtr<EventHub>();
1828     auto gestureEventHub = eventHub->GetOrCreateGestureEventHub();
1829 
1830     /**
1831      * @tc.steps: step2. Invoke SetResponseRegion.
1832      * @tc.expected: SetResponseRegion success.
1833      */
1834     std::vector<DimensionRect> responseRegion;
1835     responseRegion.push_back(DimensionRect());
1836     int32_t callbackInfo = 0;
__anon2a87ae412202(const std::vector<DimensionRect>& ) 1837     gestureEventHub->SetResponseRegionFunc([&callbackInfo](const std::vector<DimensionRect>& /*reponseRegion*/) {
1838         callbackInfo = 1;
1839     });
1840     gestureEventHub->SetResponseRegion(responseRegion);
1841     EXPECT_EQ(gestureEventHub->responseRegion_.size(), responseRegion.size());
1842 
1843     /**
1844      * @tc.steps: step3. Invoke RemoveLastResponseRect.
1845      * @tc.expected: RemoveLastResponseRect success and fire responseRegionFunc.
1846      */
1847     gestureEventHub->RemoveLastResponseRect();
1848     EXPECT_TRUE(gestureEventHub->responseRegion_.empty());
1849     EXPECT_EQ(callbackInfo, 1);
1850 }
1851 
1852 /**
1853  * @tc.name: SetDragGatherPixelMaps001
1854  * @tc.desc: Test SetDragGatherPixelMaps when input type is mouse button.
1855  * @tc.type: FUNC
1856  */
1857 HWTEST_F(GestureEventHubTestNg, SetDragGatherPixelMaps001, TestSize.Level1)
1858 {
1859     /**
1860      * @tc.steps: step1. Create grid with gridItem frame node tree.
1861      * @tc.expected: instance is not null.
1862      */
1863     auto gridNode = ProcessDragItemGroupScene();
1864     ASSERT_NE(gridNode, nullptr);
1865     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1866     ASSERT_NE(gestureEventHub, nullptr);
1867     auto context = PipelineContext::GetCurrentContext();
1868     ASSERT_NE(context, nullptr);
1869     auto dragDropManager = context->GetDragDropManager();
1870     ASSERT_NE(dragDropManager, nullptr);
1871 
1872     /**
1873      * @tc.steps: step2. Invoke SetDragGatherPixelMaps.
1874      * @tc.expected: gatherPixelMaps is not empty.
1875      */
1876     GestureEvent info;
1877     info.SetInputEventType(InputEventType::MOUSE_BUTTON);
1878     gestureEventHub->SetDragGatherPixelMaps(info);
1879     EXPECT_FALSE(dragDropManager->gatherPixelMaps_.empty());
1880 }
1881 
1882 /**
1883  * @tc.name: SetDragGatherPixelMaps002
1884  * @tc.desc: Test SetDragGatherPixelMaps when input type is not mouse button.
1885  * @tc.type: FUNC
1886  */
1887 HWTEST_F(GestureEventHubTestNg, SetDragGatherPixelMaps002, TestSize.Level1)
1888 {
1889     /**
1890      * @tc.steps: step1. Create grid with gridItem frame node tree.
1891      * @tc.expected: instance is not null.
1892      */
1893     auto gridNode = ProcessDragItemGroupScene();
1894     ASSERT_NE(gridNode, nullptr);
1895     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1896     ASSERT_NE(gestureEventHub, nullptr);
1897 
1898     /**
1899      * @tc.steps: step2. Init prefabricated values.
1900      */
1901     auto context = PipelineContext::GetCurrentContext();
1902     ASSERT_NE(context, nullptr);
1903     auto dragDropManager = context->GetDragDropManager();
1904     ASSERT_NE(dragDropManager, nullptr);
1905     auto overlayManager = context->GetOverlayManager();
1906     ASSERT_NE(overlayManager, nullptr);
1907     auto imageNode = FrameNode::CreateFrameNode(V2::IMAGE_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
1908         AceType::MakeRefPtr<ImagePattern>());
1909     ASSERT_NE(imageNode, nullptr);
1910     GatherNodeChildInfo gatherNodeChildInfo;
1911     gatherNodeChildInfo.imageNode = imageNode;
1912     std::vector<GatherNodeChildInfo> gatherNodeChildInfos;
1913     gatherNodeChildInfos.emplace_back(gatherNodeChildInfo);
1914     ASSERT_NE(gestureEventHub->GetFrameNode(), nullptr);
1915     overlayManager->MountGatherNodeToRootNode(gestureEventHub->GetFrameNode(), gatherNodeChildInfos);
1916 
1917     /**
1918      * @tc.steps: step3. Invoke SetDragGatherPixelMaps.
1919      * @tc.expected: gatherPixelMaps is not empty.
1920      */
1921     GestureEvent info;
1922     info.SetInputEventType(InputEventType::TOUCH_SCREEN);
1923     gestureEventHub->SetDragGatherPixelMaps(info);
1924     EXPECT_FALSE(dragDropManager->gatherPixelMaps_.empty());
1925 }
1926 
1927 /**
1928  * @tc.name: GetSelectItemSize001
1929  * @tc.desc: Test GetSelectItemSize.
1930  * @tc.type: FUNC
1931  */
1932 HWTEST_F(GestureEventHubTestNg, GetSelectItemSize001, TestSize.Level1)
1933 {
1934     /**
1935      * @tc.steps: step1. Create grid with gridItem frame node tree.
1936      * @tc.expected: instance is not null.
1937      */
1938     auto gridNode = ProcessDragItemGroupScene();
1939     ASSERT_NE(gridNode, nullptr);
1940     auto gestureEventHub = gridNode->GetOrCreateGestureEventHub();
1941     ASSERT_NE(gestureEventHub, nullptr);
1942 
1943     /**
1944      * @tc.steps: step2. Invoke GetSelectItemSize.
1945      * @tc.expected: size is equal to children count.
1946      */
1947     EXPECT_EQ(gestureEventHub->GetSelectItemSize(), gridNode->GetChildren().size());
1948 }
1949 
1950 /**
1951  * @tc.name: RemoveGesturesByTag001
1952  * @tc.desc: Test RemoveGesturesByTag.
1953  * @tc.type: FUNC
1954  */
1955 HWTEST_F(GestureEventHubTestNg, RemoveGesturesByTag001, TestSize.Level1)
1956 {
1957     /**
1958      * @tc.steps: step1. Create gestureEventHub and create gesture list.
1959      * @tc.expected: instance is not null.
1960      */
1961     auto eventHub = AceType::MakeRefPtr<EventHub>();
1962     auto gestureEventHub = eventHub->GetOrCreateGestureEventHub();
1963     ASSERT_NE(gestureEventHub, nullptr);
1964     std::vector<RefPtr<Gesture>> gestures;
1965     auto longPressGestureOne = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
1966     longPressGestureOne->SetTag(CHECK_TAG_1);
1967     gestureEventHub->AttachGesture(longPressGestureOne);
1968     auto longPressGestureTwo = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
1969     gestures.emplace_back(longPressGestureTwo);
1970     auto longPressGestureThree = AceType::MakeRefPtr<LongPressGesture>(FINGERS, false, 1);
1971     gestures.emplace_back(longPressGestureThree);
1972     auto group = AceType::MakeRefPtr<GestureGroup>(GestureMode::Exclusive, gestures);
1973     gestureEventHub->AttachGesture(group);
1974 
1975     /**
1976      * @tc.steps: step2. Invoke RemoveGesturesByTag.
1977      * @tc.expected: Remove Gestures by tag. modifierGestures_ size is 1 (only GestureGroup).
1978      */
1979     gestureEventHub->RemoveGesturesByTag(CHECK_TAG_1);
1980     EXPECT_EQ(gestureEventHub->modifierGestures_.size(), 1);
1981 }
1982 
1983 /**
1984  * @tc.name: FireCustomerOnDragEnd001
1985  * @tc.desc: Test FireCustomerOnDragEnd.
1986  * @tc.type: FUNC
1987  */
1988 HWTEST_F(GestureEventHubTestNg, FireCustomerOnDragEnd001, TestSize.Level1)
1989 {
1990     /**
1991      * @tc.steps: step1. Create gestureEventHub.
1992      * @tc.expected: instance is not null.
1993      */
1994     auto eventHub = AceType::MakeRefPtr<EventHub>();
1995     auto gestureEventHub = eventHub->GetOrCreateGestureEventHub();
1996     ASSERT_NE(gestureEventHub, nullptr);
1997 
1998     /**
1999      * @tc.steps: step2. Invoke FireCustomerOnDragEnd.
2000      * @tc.expected: eventHub fire dragEnd callback.
2001      */
2002     int callbackInfo = 0;
__anon2a87ae412302(const RefPtr<OHOS::Ace::DragEvent>& ) 2003     eventHub->SetOnDragEnd([&callbackInfo](const RefPtr<OHOS::Ace::DragEvent>& /* dragEvent */) {
2004         callbackInfo = 1;
2005     });
2006     auto context = PipelineContext::GetCurrentContext();
2007     gestureEventHub->FireCustomerOnDragEnd(context, eventHub);
2008     EXPECT_EQ(callbackInfo, 1);
2009 }
2010 } // namespace OHOS::Ace::NG