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