1 /*
2 * Copyright (c) 2022 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 <optional>
17
18 #include "gtest/gtest.h"
19 #define private public
20 #define protected public
21
22 #include "test/mock/base/mock_task_executor.h"
23 #include "test/mock/core/common/mock_container.h"
24 #include "test/mock/core/pipeline/mock_pipeline_context.h"
25
26 #include "base/geometry/ng/offset_t.h"
27 #include "base/geometry/ng/size_t.h"
28 #include "base/memory/ace_type.h"
29 #include "base/memory/referenced.h"
30 #include "core/components_ng/base/frame_node.h"
31 #include "core/components_ng/base/geometry_node.h"
32 #include "core/components_ng/manager/select_content_overlay/select_overlay_callback.h"
33 #include "core/components_ng/manager/select_content_overlay/select_overlay_holder.h"
34 #include "core/components_ng/manager/select_overlay/select_overlay_manager.h"
35 #include "core/components_ng/pattern/pattern.h"
36 #include "core/components_ng/pattern/select_overlay/select_overlay_pattern.h"
37 #include "core/components_ng/pattern/select_overlay/select_overlay_property.h"
38 #include "core/components_ng/pattern/text/text_base.h"
39 #include "core/components_ng/pattern/text/text_pattern.h"
40 #include "core/components_ng/pattern/text_field/text_field_pattern.h"
41 #include "core/components_ng/property/property.h"
42
43 using namespace testing;
44 using namespace testing::ext;
45
46 namespace OHOS::Ace::NG {
47 namespace {
48 const std::string ROOT_TAG("root");
49 constexpr int32_t NODE_ID = 143;
50 constexpr int32_t NODE_ID_2 = 601;
51 constexpr int32_t NODE_ID_3 = 707;
52 const OffsetF RIGHT_CLICK_OFFSET = OffsetF(10.0f, 10.0f);
53 const OffsetF ROOT_OFFSET = OffsetF(10.0f, 10.0f);
54 const bool IS_USING_MOUSE = true;
55 } // namespace
56
57 class SelectOverlayManagerTestNg : public testing::Test {
58 public:
59 static void SetUpTestSuite();
60 static void TearDownTestSuite();
61 RefPtr<SelectOverlayManager> selectOverlayManager_;
62 RefPtr<SelectOverlayProxy> proxy_;
63 RefPtr<FrameNode> root_;
64 void Init();
65 };
66
67 class MockSelectOverlayHolder : public SelectOverlayHolder, public SelectOverlayCallback {
68 DECLARE_ACE_TYPE(MockSelectOverlayHolder, SelectOverlayHolder, SelectOverlayCallback);
69
70 public:
71 MockSelectOverlayHolder() = default;
72 ~MockSelectOverlayHolder() = default;
73
SetOwner(const RefPtr<FrameNode> & node)74 void SetOwner(const RefPtr<FrameNode>& node)
75 {
76 node_ = node;
77 }
78
GetOwner()79 RefPtr<FrameNode> GetOwner()
80 {
81 return node_;
82 }
83
GetCallback()84 RefPtr<SelectOverlayCallback> GetCallback() override
85 {
86 return Claim(this);
87 }
88
OnUpdateSelectOverlayInfo(SelectOverlayInfo & overlayInfo,int32_t requestCode)89 void OnUpdateSelectOverlayInfo(SelectOverlayInfo& overlayInfo, int32_t requestCode)
90 {
91 overlayInfo.enableHandleLevel = true;
92 overlayInfo.handleLevelMode = handleLevelMode_;
93 overlayInfo.menuInfo.menuIsShow = true;
94 }
95
OnHandleLevelModeChanged(HandleLevelMode mode)96 void OnHandleLevelModeChanged(HandleLevelMode mode) override
97 {
98 handleLevelMode_ = mode;
99 }
100
CheckSwitchToMode(HandleLevelMode mode)101 bool CheckSwitchToMode(HandleLevelMode mode) override
102 {
103 return allowSwitchMode_;
104 }
105
CheckTouchInHostNode(const PointF & touchPoint)106 bool CheckTouchInHostNode(const PointF& touchPoint)
107 {
108 return false;
109 }
110
111 private:
112 HandleLevelMode handleLevelMode_ = HandleLevelMode::OVERLAY;
113 bool allowSwitchMode_ = false;
114 RefPtr<FrameNode> node_;
115 };
116
SetUpTestSuite()117 void SelectOverlayManagerTestNg::SetUpTestSuite()
118 {
119 MockPipelineContext::SetUp();
120 MockContainer::SetUp();
121 MockContainer::Current()->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
122 }
123
TearDownTestSuite()124 void SelectOverlayManagerTestNg::TearDownTestSuite()
125 {
126 MockPipelineContext::TearDown();
127 MockContainer::TearDown();
128 }
129
Init()130 void SelectOverlayManagerTestNg::Init()
131 {
132 SelectOverlayInfo selectOverlayInfo;
133 selectOverlayInfo.singleLineHeight = NODE_ID;
134 root_ = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
135 selectOverlayManager_ = AceType::MakeRefPtr<SelectOverlayManager>(root_);
136 ASSERT_NE(selectOverlayManager_, nullptr);
137 proxy_ = selectOverlayManager_->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
138 ASSERT_NE(proxy_, nullptr);
139 }
140 /**
141 * @tc.name: SelectOverlayManagerTest001
142 * @tc.desc: test first CreateAndShowSelectOverlay
143 * @tc.type: FUNC
144 */
145 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest001, TestSize.Level1)
146 {
147 /**
148 * @tc.steps: step1. call CreateAndShowSelectOverlay
149 * @tc.expected: return the proxy which has the right SelectOverlayId
150 */
151 Init();
152 auto id = proxy_->GetSelectOverlayId();
153 EXPECT_EQ(id, 2);
154
155 /**
156 * @tc.expected: root's children_list contains the selectOverlayNode we created
157 */
158 auto selectOverlayNode = root_->GetChildren().back();
159 ASSERT_TRUE(selectOverlayNode);
160 auto node_id = selectOverlayNode->GetId();
161 EXPECT_EQ(node_id, 2);
162 }
163
164 /**
165 * @tc.name: SelectOverlayManagerTest002
166 * @tc.desc: test DestroySelectOverlay(proxy) successfully
167 * @tc.type: FUNC
168 */
169 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest002, TestSize.Level1)
170 {
171 /**
172 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
173 */
174 SelectOverlayInfo selectOverlayInfo;
175 selectOverlayInfo.singleLineHeight = NODE_ID;
176 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
177 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
178 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
179
180 /**
181 * @tc.expected: root's children_list contains the selectOverlayNode we created
182 */
183 auto selectOverlayNode = root->GetChildren().back();
184 ASSERT_TRUE(selectOverlayNode);
185 auto node_id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
186 EXPECT_EQ(node_id, NODE_ID);
187
188 /**
189 * @tc.steps: step2. call DestroySelectOverlay
190 * @tc.expected: root's children_list has removed the selectOverlayNode we created
191 */
192 selectOverlayManager->DestroySelectOverlay(proxy);
193 auto children = root->GetChildren();
194 EXPECT_TRUE(children.empty());
195 }
196
197 /**
198 * @tc.name: SelectOverlayManagerTest003
199 * @tc.desc: test CreateAndShowSelectOverlay while the selectOverlayItem_ has existed
200 * @tc.type: FUNC
201 */
202 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest003, TestSize.Level1)
203 {
204 /**
205 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
206 * @tc.expected: return the proxy which has the right SelectOverlayId
207 */
208 SelectOverlayInfo selectOverlayInfo;
209 selectOverlayInfo.singleLineHeight = NODE_ID;
210 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
211 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
212 auto textFrameNode =
__anon424ee4060202() 213 FrameNode::GetOrCreateFrameNode(V2::TEXT_ETS_TAG, 10, []() { return AceType::MakeRefPtr<TextPattern>(); });
214 ASSERT_TRUE(textFrameNode);
215 auto textPattern = textFrameNode->GetPattern<TextPattern>();
216 ASSERT_TRUE(textPattern);
217 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, textPattern);
218 ASSERT_TRUE(proxy);
219 auto id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
220 EXPECT_EQ(id, NODE_ID);
221 selectOverlayManager->DestroySelectOverlay(34);
222
223 /**
224 * @tc.steps: step2. call CreateAndShowSelectOverlay again and change the param
225 * @tc.expected: return the proxy which has the right SelectOverlayId
226 */
227 SelectOverlayInfo selectOverlayInfo2;
228 selectOverlayInfo2.singleLineHeight = NODE_ID_2;
229 auto proxy2 = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo2, textPattern);
230 ASSERT_TRUE(proxy2);
231 auto id2 = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
232 EXPECT_EQ(id2, NODE_ID_2);
233
234 /**
235 * @tc.steps: step3. call CreateAndShowSelectOverlay again and change the param
236 * @tc.expected: return the proxy which has the right SelectOverlayId
237 */
238 SelectOverlayInfo selectOverlayInfo3;
239 selectOverlayInfo3.singleLineHeight = NODE_ID_3;
240 auto proxy3 = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo3, textPattern);
241 ASSERT_TRUE(proxy3);
242 auto id3 = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
243 EXPECT_EQ(id3, NODE_ID_3);
244 }
245
246 /**
247 * @tc.name: SelectOverlayManagerTest004
248 * @tc.desc: test DestroySelectOverlay fail
249 * @tc.type: FUNC
250 */
251 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest004, TestSize.Level1)
252 {
253 /**
254 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
255 * @tc.expected: return the proxy which has the right SelectOverlayId
256 */
257 SelectOverlayInfo selectOverlayInfo;
258 selectOverlayInfo.singleLineHeight = NODE_ID;
259 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
260 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
261 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
262 ASSERT_TRUE(proxy);
263 auto id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
264 EXPECT_EQ(id, NODE_ID);
265
266 /**
267 * @tc.steps: step2. call DestroySelectOverlay with wrong param
268 * @tc.expected: destroySelectOverlay fail and the proxy still has the original SelectOverlayId
269 */
270 selectOverlayManager->DestroySelectOverlay(NODE_ID_2);
271 auto children = root->GetChildren();
272 EXPECT_FALSE(children.empty());
273 id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
274 EXPECT_EQ(id, NODE_ID);
275 }
276
277 /**
278 * @tc.name: SelectOverlayManagerTest005
279 * @tc.desc: test HasSelectOverlay
280 * @tc.type: FUNC
281 */
282 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest005, TestSize.Level1)
283 {
284 /**
285 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
286 * @tc.expected: return the proxy which has the right SelectOverlayId
287 */
288 SelectOverlayInfo selectOverlayInfo;
289 selectOverlayInfo.singleLineHeight = NODE_ID;
290 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
291 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
292 selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
293
294 /**
295 * @tc.steps: step2. call HasSelectOverlay with the param of existed SelectOverlayId
296 * @tc.expected: return true
297 */
298 auto flag1 = selectOverlayManager->HasSelectOverlay(NODE_ID);
299 EXPECT_FALSE(flag1);
300
301 /**
302 * @tc.steps: step3. call HasSelectOverlay with the param of existed SelectOverlayId
303 * @tc.expected: return false
304 */
305 auto flag2 = selectOverlayManager->HasSelectOverlay(NODE_ID_2);
306 EXPECT_FALSE(flag2);
307 }
308
309 /**
310 * @tc.name: SelectOverlayManagerTest006
311 * @tc.desc: test GetSelectOverlayNode
312 * @tc.type: FUNC
313 */
314 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest006, TestSize.Level1)
315 {
316 /**
317 * @tc.steps: step1. construct a SelectOverlayManager
318 */
319 SelectOverlayInfo selectOverlayInfo;
320 selectOverlayInfo.singleLineHeight = NODE_ID;
321 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
322 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
323
324 /**
325 * @tc.steps: step2. call GetSelectOverlayNode without calling CreateAndShowSelectOverlay
326 * @tc.expected: return nullptr
327 */
328 auto node1 = selectOverlayManager->GetSelectOverlayNode(NODE_ID);
329 EXPECT_FALSE(node1);
330
331 /**
332 * @tc.steps: step3. call CreateAndShowSelectOverlay
333 */
334 selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
335
336 /**
337 * @tc.steps: step4. call GetSelectOverlayNode with right overlayId
338 * @tc.expected: return the selectOverlayNode with right nodeId
339 */
340 auto node2 = selectOverlayManager->GetSelectOverlayNode(NODE_ID);
341
342 /**
343 * @tc.steps: step5. call GetSelectOverlayNode with wrong overlayId
344 * @tc.expected: return nullptr
345 */
346 auto node3 = selectOverlayManager->GetSelectOverlayNode(NODE_ID_2);
347 EXPECT_FALSE(node3);
348 }
349
350 /**
351 * @tc.name: SelectOverlayManagerTest007
352 * @tc.desc: test IsSameSelectOverlayInfo
353 * @tc.type: FUNC
354 */
355 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest007, TestSize.Level1)
356 {
357 /**
358 * @tc.steps: step1. construct a SelectOverlayManager
359 */
360 SelectOverlayInfo selectOverlayInfo;
361 selectOverlayInfo.singleLineHeight = NODE_ID;
362 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
363 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
364
365 /**
366 * @tc.steps: step2. change menuInfo and call IsSameSelectOverlayInfo with different selectOverlayInfo
367 * @tc.expected: return false
368 */
369 SelectOverlayInfo selectOverlayInfo2;
370 SelectMenuInfo selectMenuInfo2;
371 selectMenuInfo2.showCopy = false;
372 selectOverlayInfo2.menuInfo = selectMenuInfo2;
373 auto flag1 = selectOverlayManager->IsSameSelectOverlayInfo(selectOverlayInfo2);
374 EXPECT_FALSE(flag1);
375
376 /**
377 * @tc.steps: step3. change isUsingMouse and call IsSameSelectOverlayInfo with different selectOverlayInfo
378 * @tc.expected: return false
379 */
380 SelectOverlayInfo selectOverlayInfo3;
381 selectOverlayInfo3.isUsingMouse = IS_USING_MOUSE;
382 auto flag2 = selectOverlayManager->IsSameSelectOverlayInfo(selectOverlayInfo3);
383 EXPECT_FALSE(flag2);
384
385 /**
386 * @tc.steps: step4. change rightClickOffset and call IsSameSelectOverlayInfo with different selectOverlayInfo
387 * @tc.expected: return false
388 */
389 SelectOverlayInfo selectOverlayInfo4;
390 selectOverlayInfo4.rightClickOffset = RIGHT_CLICK_OFFSET;
391 auto flag3 = selectOverlayManager->IsSameSelectOverlayInfo(selectOverlayInfo4);
392 EXPECT_FALSE(flag3);
393
394 /**
395 * @tc.steps: step5. call IsSameSelectOverlayInfo with right selectOverlayInfo
396 * @tc.expected: return true
397 */
398 auto flag = selectOverlayManager->IsSameSelectOverlayInfo(selectOverlayInfo);
399 EXPECT_TRUE(flag);
400 }
401
402 /**
403 * @tc.name: SelectOverlayManagerTest008
404 * @tc.desc: test DestroySelectOverlay
405 * @tc.type: FUNC
406 */
407 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest008, TestSize.Level1)
408 {
409 /**
410 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
411 */
412 SelectOverlayInfo selectOverlayInfo;
413 selectOverlayInfo.singleLineHeight = NODE_ID;
414 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
415 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
416 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
417 ASSERT_TRUE(proxy);
418
419 /**
420 * @tc.expected: root's children_list contains the selectOverlayNode we created
421 */
422 auto selectOverlayNode = root->GetChildren().back();
423 ASSERT_TRUE(selectOverlayNode);
424 auto node_id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
425 EXPECT_EQ(node_id, NODE_ID);
426
427 /**
428 * @tc.steps: step2. call DestroySelectOverlay
429 * @tc.expected: root's children_list has removed the selectOverlayNode we created
430 */
431 selectOverlayManager->DestroySelectOverlay();
432 auto children = root->GetChildren();
433 EXPECT_TRUE(children.empty());
434 /**
435 * @tc.steps: step3. call DestroySelectOverlay again when current node is invalid
436 * @tc.expected: function exits normally
437 */
438 PropertyChangeFlag flag = PROPERTY_UPDATE_NORMAL;
439 selectOverlayManager->MarkDirty(flag);
440 TouchEvent touchPoint;
441 selectOverlayManager->HandleGlobalEvent(touchPoint, ROOT_OFFSET);
442 selectOverlayManager->NotifyOverlayClosed();
443 selectOverlayManager->DestroySelectOverlay(NODE_ID);
444 EXPECT_TRUE(children.empty());
445 }
446
447 /**
448 * @tc.name: SelectOverlayManagerTest009
449 * @tc.desc: test IsInSelectedOrSelectOverlayArea
450 * @tc.type: FUNC
451 */
452 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest009, TestSize.Level1)
453 {
454 /**
455 * @tc.steps: step1. construct a SelectOverlayManager and call CreateAndShowSelectOverlay
456 */
457 SelectOverlayInfo selectOverlayInfo;
458 selectOverlayInfo.singleLineHeight = NODE_ID;
459 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
460 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
461 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
462
463 /**
464 * @tc.expected: root's children_list contains the selectOverlayNode we created
465 */
466 auto selectOverlayNode = root->GetChildren().back();
467 ASSERT_TRUE(selectOverlayNode);
468 auto node_id = selectOverlayManager->selectOverlayInfo_.singleLineHeight;
469 EXPECT_EQ(node_id, NODE_ID);
470
471 /**
472 * @tc.steps: step2. call IsInSelectedOrSelectOverlayArea
473 * @tc.expected: return true
474 */
475 PropertyChangeFlag flag = PROPERTY_UPDATE_NORMAL;
476 selectOverlayManager->MarkDirty(flag);
477 const NG::PointF point { 0.0f, 0.0f };
478 auto result = selectOverlayManager->IsInSelectedOrSelectOverlayArea(point);
479 EXPECT_FALSE(result);
480 }
481 /**
482 * @tc.name: SelectOverlayManagerTest010
483 * @tc.desc: test IsTouchInCallerArea
484 * @tc.type: FUNC
485 */
486 HWTEST_F(SelectOverlayManagerTestNg, SelectOverlayManagerTest010, TestSize.Level1)
487 {
488 /**
489 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
490 * @tc.expected: return false
491 */
492 Init();
493 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
494 EXPECT_FALSE(result1);
495 /**
496 * @tc.steps: step2. call HandleGlobalEvent
497 */
498 TouchEvent touchPoint;
499 selectOverlayManager_->HandleGlobalEvent(touchPoint, ROOT_OFFSET);
500 /**
501 * @tc.steps: step3. call DestroySelectOverlay with animation
502 * @tc.expected: root's children_list has removed the selectOverlayNode we created
503 */
504 selectOverlayManager_->DestroySelectOverlay(true);
505 auto children = root_->GetChildren();
506 EXPECT_TRUE(children.empty());
507 }
508
509 /**
510 * @tc.name: FindWindowScene001
511 * @tc.desc: test FindWindowScene
512 * @tc.type: FUNC
513 */
514 HWTEST_F(SelectOverlayManagerTestNg, FindWindowScene001, TestSize.Level1)
515 {
516 /**
517 * @tc.steps: step1. construct a SelectOverlayManager
518 */
519 SelectOverlayInfo selectOverlayInfo;
520 selectOverlayInfo.singleLineHeight = NODE_ID;
521 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
522 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
523 /**
524 * @tc.steps: step2. call FindWindowScene
525 */
526 auto rootNode = selectOverlayManager->FindWindowScene(nullptr);
527 EXPECT_TRUE(rootNode);
528 }
529
530 /**
531 * @tc.name: HandleGlobalEvent01
532 * @tc.desc: test HandleGlobalEvent
533 * @tc.type: FUNC
534 */
535 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent01, TestSize.Level1)
536 {
537 /**
538 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
539 * @tc.expected: return false
540 */
541 Init();
542 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
543 EXPECT_FALSE(result1);
544 /**
545 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
546 */
547 TouchEvent touchPoint;
548 touchPoint.type = TouchType::DOWN;
549 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
550 EXPECT_NE(touchPoint.sourceType, SourceType::TOUCH);
551 /**
552 * @tc.steps: step3. call DestroySelectOverlay with animation
553 * @tc.expected: root's children_list has removed the selectOverlayNode we created
554 */
555 selectOverlayManager_->DestroySelectOverlay(true);
556 auto children = root_->GetChildren();
557 EXPECT_TRUE(children.empty());
558 }
559
560 /**
561 * @tc.name: HandleGlobalEvent02
562 * @tc.desc: test HandleGlobalEvent
563 * @tc.type: FUNC
564 */
565 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent02, TestSize.Level1)
566 {
567 /**
568 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
569 * @tc.expected: return false
570 */
571 Init();
572 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
573 EXPECT_FALSE(result1);
574 /**
575 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
576 */
577 TouchEvent touchPoint;
578 touchPoint.sourceType = SourceType::TOUCH;
579 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
580 EXPECT_NE(touchPoint.type, TouchType::DOWN);
581 /**
582 * @tc.steps: step3. call DestroySelectOverlay with animation
583 * @tc.expected: root's children_list has removed the selectOverlayNode we created
584 */
585 selectOverlayManager_->DestroySelectOverlay(true);
586 auto children = root_->GetChildren();
587 EXPECT_TRUE(children.empty());
588 }
589
590 /**
591 * @tc.name: HandleGlobalEvent03
592 * @tc.desc: test HandleGlobalEvent
593 * @tc.type: FUNC
594 */
595 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent03, TestSize.Level1)
596 {
597 /**
598 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
599 * @tc.expected: return false
600 */
601 Init();
602 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
603 EXPECT_FALSE(result1);
604 /**
605 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
606 */
607 TouchEvent touchPoint;
608 touchPoint.type = TouchType::MOVE;
609 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
610 EXPECT_NE(touchPoint.sourceType, SourceType::TOUCH);
611 /**
612 * @tc.steps: step3. call DestroySelectOverlay with animation
613 * @tc.expected: root's children_list has removed the selectOverlayNode we created
614 */
615 selectOverlayManager_->DestroySelectOverlay(true);
616 auto children = root_->GetChildren();
617 EXPECT_TRUE(children.empty());
618 }
619
620 /**
621 * @tc.name: HandleGlobalEvent04
622 * @tc.desc: test HandleGlobalEvent
623 * @tc.type: FUNC
624 */
625 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent04, TestSize.Level1)
626 {
627 /**
628 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
629 * @tc.expected: return false
630 */
631 Init();
632 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
633 EXPECT_FALSE(result1);
634 /**
635 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
636 */
637 TouchEvent touchPoint;
638 touchPoint.type = TouchType::MOVE;
639 touchPoint.sourceType = SourceType::TOUCH;
640 selectOverlayManager_->touchDownPoints_.emplace_back(touchPoint);
641 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
642 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
643 /**
644 * @tc.steps: step3. call DestroySelectOverlay with animation
645 * @tc.expected: root's children_list has removed the selectOverlayNode we created
646 */
647 selectOverlayManager_->DestroySelectOverlay(true);
648 auto children = root_->GetChildren();
649 EXPECT_TRUE(children.empty());
650 }
651
652 /**
653 * @tc.name: HandleGlobalEvent05
654 * @tc.desc: test HandleGlobalEvent
655 * @tc.type: FUNC
656 */
657 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent05, TestSize.Level1)
658 {
659 /**
660 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
661 * @tc.expected: return false
662 */
663 Init();
664 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
665 EXPECT_FALSE(result1);
666 /**
667 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
668 */
669 TouchEvent touchPoint;
670 TouchEvent touchPointerror;
671 touchPointerror.id = 5;
672 touchPointerror.x = 5;
673 touchPointerror.y = 5;
674 touchPoint.type = TouchType::MOVE;
675 touchPoint.sourceType = SourceType::TOUCH;
676 selectOverlayManager_->touchDownPoints_.emplace_back(touchPointerror);
677 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
678 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
679 /**
680 * @tc.steps: step3. call DestroySelectOverlay with animation
681 * @tc.expected: root's children_list has removed the selectOverlayNode we created
682 */
683 selectOverlayManager_->DestroySelectOverlay(true);
684 auto children = root_->GetChildren();
685 EXPECT_TRUE(children.empty());
686 }
687
688 /**
689 * @tc.name: HandleGlobalEvent06
690 * @tc.desc: test HandleGlobalEvent
691 * @tc.type: FUNC
692 */
693 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent06, TestSize.Level1)
694 {
695 /**
696 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
697 * @tc.expected: return false
698 */
699 Init();
700 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
701 EXPECT_FALSE(result1);
702 /**
703 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
704 */
705 TouchEvent touchPoint;
706 TouchEvent touchPointerror;
707 touchPointerror.id = 5;
708 touchPoint.type = TouchType::MOVE;
709 touchPoint.sourceType = SourceType::TOUCH;
710 selectOverlayManager_->touchDownPoints_.emplace_back(touchPointerror);
711 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
712 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
713 /**
714 * @tc.steps: step3. call DestroySelectOverlay with animation
715 * @tc.expected: root's children_list has removed the selectOverlayNode we created
716 */
717 selectOverlayManager_->DestroySelectOverlay(true);
718 auto children = root_->GetChildren();
719 EXPECT_TRUE(children.empty());
720 }
721
722 /**
723 * @tc.name: HandleGlobalEvent07
724 * @tc.desc: test HandleGlobalEvent
725 * @tc.type: FUNC
726 */
727 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent07, TestSize.Level1)
728 {
729 /**
730 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
731 * @tc.expected: return false
732 */
733 Init();
734 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
735 EXPECT_FALSE(result1);
736 /**
737 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
738 */
739 TouchEvent touchPoint;
740 touchPoint.type = TouchType::DOWN;
741 touchPoint.sourceType = SourceType::TOUCH;
742 selectOverlayManager_->touchDownPoints_.emplace_back(touchPoint);
743 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
744 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
745 /**
746 * @tc.steps: step3. call DestroySelectOverlay with animation
747 * @tc.expected: root's children_list has removed the selectOverlayNode we created
748 */
749 selectOverlayManager_->DestroySelectOverlay(true);
750 auto children = root_->GetChildren();
751 EXPECT_TRUE(children.empty());
752 }
753
754 /**
755 * @tc.name: HandleGlobalEvent08
756 * @tc.desc: test HandleGlobalEvent
757 * @tc.type: FUNC
758 */
759 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent08, TestSize.Level1)
760 {
761 /**
762 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
763 * @tc.expected: return false
764 */
765 Init();
766 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
767 EXPECT_FALSE(result1);
768 /**
769 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
770 */
771 TouchEvent touchPoint;
772 touchPoint.type = TouchType::DOWN;
773 touchPoint.sourceType = SourceType::TOUCH;
774 selectOverlayManager_->touchDownPoints_.clear();
775 touchPoint.x = 1.1f;
776 touchPoint.y = 1.1f;
777 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
778 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
779 /**
780 * @tc.steps: step3. call DestroySelectOverlay with animation
781 * @tc.expected: root's children_list has removed the selectOverlayNode we created
782 */
783 selectOverlayManager_->DestroySelectOverlay(true);
784 auto children = root_->GetChildren();
785 EXPECT_TRUE(children.empty());
786 }
787
788 /**
789 * @tc.name: HandleGlobalEvent09
790 * @tc.desc: test HandleGlobalEvent
791 * @tc.type: FUNC
792 */
793 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent09, TestSize.Level1)
794 {
795 /**
796 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
797 * @tc.expected: return false
798 */
799 Init();
800 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
801 EXPECT_FALSE(result1);
802 /**
803 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
804 */
805 TouchEvent touchPoint;
806 touchPoint.type = TouchType::DOWN;
807 touchPoint.sourceType = SourceType::TOUCH;
808 selectOverlayManager_->touchDownPoints_.clear();
809 auto selectOverlayNode = root_->GetChildren().back();
810 auto id = std::to_string(selectOverlayNode->GetId());
811 selectOverlayManager_->touchTestResults_.emplace_back(id);
812 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
813 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
814 /**
815 * @tc.steps: step3. call DestroySelectOverlay with animation
816 * @tc.expected: root's children_list has removed the selectOverlayNode we created
817 */
818 selectOverlayManager_->DestroySelectOverlay(true);
819 auto children = root_->GetChildren();
820 EXPECT_TRUE(children.empty());
821 }
822
823 /**
824 * @tc.name: HandleGlobalEvent10
825 * @tc.desc: test HandleGlobalEvent
826 * @tc.type: FUNC
827 */
828 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent10, TestSize.Level1)
829 {
830 /**
831 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
832 * @tc.expected: return false
833 */
834 Init();
835 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
836 EXPECT_FALSE(result1);
837 /**
838 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
839 */
840 TouchEvent touchPoint;
841 TouchEvent touchPointerror;
842 touchPoint.type = TouchType::MOVE;
843 touchPoint.sourceType = SourceType::TOUCH;
844 selectOverlayManager_->touchDownPoints_.clear();
845 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
846 EXPECT_NE(touchPoint.sourceType, SourceType::MOUSE);
847 /**
848 * @tc.steps: step3. call DestroySelectOverlay with animation
849 * @tc.expected: root's children_list has removed the selectOverlayNode we created
850 */
851 selectOverlayManager_->DestroySelectOverlay(true);
852 auto children = root_->GetChildren();
853 EXPECT_TRUE(children.empty());
854 }
855
856 /**
857 * @tc.name: HandleGlobalEvent11
858 * @tc.desc: test HandleGlobalEvent
859 * @tc.type: FUNC
860 */
861 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent11, TestSize.Level1)
862 {
863 /**
864 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
865 * @tc.expected: return false
866 */
867 Init();
868 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
869 EXPECT_FALSE(result1);
870 /**
871 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
872 */
873 TouchEvent touchPoint;
874 touchPoint.type = TouchType::UP;
875 touchPoint.sourceType = SourceType::TOUCH;
876 selectOverlayManager_->touchDownPoints_.emplace_back(touchPoint);
877 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
878 EXPECT_TRUE(selectOverlayManager_->touchDownPoints_.empty());
879 /**
880 * @tc.steps: step3. call DestroySelectOverlay with animation
881 * @tc.expected: root's children_list has removed the selectOverlayNode we created
882 */
883 selectOverlayManager_->DestroySelectOverlay(true);
884 auto children = root_->GetChildren();
885 EXPECT_TRUE(children.empty());
886 }
887
888 /**
889 * @tc.name: HandleGlobalEvent12
890 * @tc.desc: test HandleGlobalEvent
891 * @tc.type: FUNC
892 */
893 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent12, TestSize.Level1)
894 {
895 /**
896 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
897 * @tc.expected: return false
898 */
899 Init();
900 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
901 EXPECT_FALSE(result1);
902 /**
903 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
904 */
905 TouchEvent touchPoint;
906 touchPoint.type = TouchType::DOWN;
907 touchPoint.sourceType = SourceType::MOUSE;
908 touchPoint.x = 1.1f;
909 touchPoint.y = 1.1f;
910 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
911 EXPECT_NE(touchPoint.sourceType, SourceType::TOUCH);
912 /**
913 * @tc.steps: step3. call DestroySelectOverlay with animation
914 * @tc.expected: root's children_list has removed the selectOverlayNode we created
915 */
916 selectOverlayManager_->DestroySelectOverlay(true);
917 auto children = root_->GetChildren();
918 EXPECT_TRUE(children.empty());
919 }
920
921 /**
922 * @tc.name: HandleGlobalEvent13
923 * @tc.desc: test HandleGlobalEvent
924 * @tc.type: FUNC
925 */
926 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent13, TestSize.Level1)
927 {
928 /**
929 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
930 * @tc.expected: return false
931 */
932 Init();
933 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
934 EXPECT_FALSE(result1);
935 /**
936 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
937 */
938 TouchEvent touchPoint;
939 touchPoint.type = TouchType::UP;
940 touchPoint.sourceType = SourceType::TOUCH;
941 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
942 EXPECT_TRUE(selectOverlayManager_->touchDownPoints_.empty());
943 /**
944 * @tc.steps: step3. call DestroySelectOverlay with animation
945 * @tc.expected: root's children_list has removed the selectOverlayNode we created
946 */
947 selectOverlayManager_->DestroySelectOverlay(true);
948 auto children = root_->GetChildren();
949 EXPECT_TRUE(children.empty());
950 }
951
952 /**
953 * @tc.name: HandleGlobalEvent14
954 * @tc.desc: test HandleGlobalEvent
955 * @tc.type: FUNC
956 */
957 HWTEST_F(SelectOverlayManagerTestNg, HandleGlobalEvent14, TestSize.Level1)
958 {
959 /**
960 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is empty
961 * @tc.expected: return false
962 */
963 Init();
964 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
965 EXPECT_FALSE(result1);
966 /**
967 * @tc.steps: step2. Change the properties of the TouchEvent and call HandleGlobalEvent
968 */
969 TouchEvent touchPoint;
970 TouchEvent touchPointerror;
971 touchPointerror.id = 5;
972 touchPoint.type = TouchType::UP;
973 touchPoint.sourceType = SourceType::TOUCH;
974 selectOverlayManager_->touchDownPoints_.emplace_back(touchPointerror);
975 selectOverlayManager_->HandleGlobalEvent(touchPoint, OffsetF(0.0f, 0.0f));
976 EXPECT_FALSE(selectOverlayManager_->touchDownPoints_.empty());
977 /**
978 * @tc.steps: step3. call DestroySelectOverlay with animation
979 * @tc.expected: root's children_list has removed the selectOverlayNode we created
980 */
981 selectOverlayManager_->DestroySelectOverlay(true);
982 auto children = root_->GetChildren();
983 EXPECT_TRUE(children.empty());
984 }
985
986 /**
987 * @tc.name: IsTouchInCallerArea01
988 * @tc.desc: test NotifyOverlayClosed and IsTouchInCallerArea
989 * @tc.type: FUNC
990 */
991 HWTEST_F(SelectOverlayManagerTestNg, IsTouchInCallerArea01, TestSize.Level1)
992 {
993 /**
994 * @tc.steps: step1. call IsTouchInCallerArea when touchTestResults_ is !empty
995 * @tc.expected: return true
996 */
997 Init();
998 SelectOverlayInfo selectOverlayInfo;
999 selectOverlayInfo.singleLineHeight = NODE_ID;
1000 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1001 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1002 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1003 auto selectOverlayNode = root_->GetChildren().back();
1004 auto id = std::to_string(selectOverlayNode->GetId());
1005 selectOverlayManager_->touchTestResults_.emplace_back(id);
1006 auto result1 = selectOverlayManager_->IsTouchInCallerArea();
1007 /**
1008 * @tc.steps: step2. call NotifyOverlayClosed
1009 */
1010 selectOverlayManager->NotifyOverlayClosed(true);
1011 EXPECT_FALSE(result1);
1012 }
1013
1014 /**
1015 * @tc.name: NotifyOnScrollCallback01
1016 * @tc.desc: test NotifyOnScrollCallback and RemoveScrollCallback
1017 * @tc.type: FUNC
1018 */
1019 HWTEST_F(SelectOverlayManagerTestNg, NotifyOnScrollCallback01, TestSize.Level1)
1020 {
1021 /**
1022 * @tc.steps: step1. call CreateAndShowSelectOverlay
1023 * @tc.expected: return true
1024 */
1025 Init();
1026 SelectOverlayInfo selectOverlayInfo;
1027 selectOverlayInfo.singleLineHeight = NODE_ID;
1028 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1029 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1030 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1031 EXPECT_TRUE(proxy);
1032 /**
1033 * @tc.steps: step2. call NotifyOnScrollCallback and RemoveScrollCallback
1034 * @tc.expected: return true
1035 */
1036 selectOverlayManager->NotifyOnScrollCallback(5, Axis::VERTICAL, 0.0, 0);
1037 selectOverlayManager->RemoveScrollCallback(9);
1038 EXPECT_TRUE(selectOverlayManager->parentScrollCallbacks_.empty());
1039 }
1040
1041 /**
1042 * @tc.name: NotifyOnScrollCallback02
1043 * @tc.desc: test NotifyOnScrollCallback
1044 * @tc.type: FUNC
1045 */
1046 HWTEST_F(SelectOverlayManagerTestNg, NotifyOnScrollCallback02, TestSize.Level1)
1047 {
1048 /**
1049 * @tc.steps: step1. call CreateAndShowSelectOverlay
1050 * @tc.expected: return true
1051 */
1052 Init();
1053 SelectOverlayInfo selectOverlayInfo;
1054 selectOverlayInfo.singleLineHeight = NODE_ID;
1055 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1056 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1057 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1058 EXPECT_TRUE(proxy);
1059 /**
1060 * @tc.steps: step2. Init func ScrollableParentCallback and insert toparentScrollCallbacks_
1061 */
__anon424ee4060302(Axis axis, float value, int32_t id) 1062 ScrollableParentCallback callback = [&](Axis axis, float value, int32_t id) {
1063 axis = Axis::HORIZONTAL;
1064 value = 0.0;
1065 id = 5;
1066 };
1067 selectOverlayManager->RegisterScrollCallback(5, 5, std::move(callback));
1068 /**
1069 * @tc.steps: step3. call NotifyOnScrollCallback
1070 * @tc.expected: return false
1071 */
1072 selectOverlayManager->NotifyOnScrollCallback(5, Axis::VERTICAL, 0.0, 0);
1073 EXPECT_FALSE(selectOverlayManager->parentScrollCallbacks_.empty());
1074 }
1075
1076 /**
1077 * @tc.name: NotifyOnScrollCallback03
1078 * @tc.desc: test NotifyOnScrollCallback
1079 * @tc.type: FUNC
1080 */
1081 HWTEST_F(SelectOverlayManagerTestNg, NotifyOnScrollCallback03, TestSize.Level1)
1082 {
1083 /**
1084 * @tc.steps: step1. call CreateAndShowSelectOverlay
1085 * @tc.expected: return true
1086 */
1087 Init();
1088 SelectOverlayInfo selectOverlayInfo;
1089 selectOverlayInfo.singleLineHeight = NODE_ID;
1090 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1091 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1092 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1093 EXPECT_TRUE(proxy);
1094 /**
1095 * @tc.steps: step2. Init func ScrollableParentCallback and insert toparentScrollCallbacks_
1096 */
__anon424ee4060402(Axis axis, float value, int32_t id) 1097 ScrollableParentCallback callback = [&](Axis axis, float value, int32_t id) {
1098 axis = Axis::HORIZONTAL;
1099 value = 0.0;
1100 id = 5;
1101 };
1102 selectOverlayManager->RegisterScrollCallback(0, 5, std::move(callback));
1103 /**
1104 * @tc.steps: step3. call NotifyOnScrollCallback
1105 * @tc.expected: return false
1106 */
1107 selectOverlayManager->NotifyOnScrollCallback(5, Axis::VERTICAL, 0.0, 0);
1108 EXPECT_FALSE(selectOverlayManager->parentScrollCallbacks_.empty());
1109 }
1110
1111 /**
1112 * @tc.name: RemoveScrollCallback01
1113 * @tc.desc: test RemoveScrollCallback
1114 * @tc.type: FUNC
1115 */
1116 HWTEST_F(SelectOverlayManagerTestNg, RemoveScrollCallback01, TestSize.Level1)
1117 {
1118 /**
1119 * @tc.steps: step1. call CreateAndShowSelectOverlay
1120 * @tc.expected: return true
1121 */
1122 Init();
1123 SelectOverlayInfo selectOverlayInfo;
1124 selectOverlayInfo.singleLineHeight = NODE_ID;
1125 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1126 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1127 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1128 EXPECT_TRUE(proxy);
1129 /**
1130 * @tc.steps: step2. Init func ScrollableParentCallback and insert toparentScrollCallbacks_
1131 */
__anon424ee4060502(Axis axis, float value, int32_t id) 1132 ScrollableParentCallback callback = [&](Axis axis, float value, int32_t id) {
1133 axis = Axis::HORIZONTAL;
1134 value = 0.0;
1135 id = 5;
1136 };
1137 selectOverlayManager->RegisterScrollCallback(5, 5, std::move(callback));
1138 /**
1139 * @tc.steps: step3. call RemoveScrollCallback
1140 * @tc.expected: return true
1141 */
1142 selectOverlayManager->RemoveScrollCallback(5);
1143 EXPECT_TRUE(selectOverlayManager->parentScrollCallbacks_.empty());
1144 }
1145
1146 /**
1147 * @tc.name: RemoveScrollCallback02
1148 * @tc.desc: test RemoveScrollCallback
1149 * @tc.type: FUNC
1150 */
1151 HWTEST_F(SelectOverlayManagerTestNg, RemoveScrollCallback02, TestSize.Level1)
1152 {
1153 /**
1154 * @tc.steps: step1. call CreateAndShowSelectOverlay
1155 * @tc.expected: return true
1156 */
1157 Init();
1158 SelectOverlayInfo selectOverlayInfo;
1159 selectOverlayInfo.singleLineHeight = NODE_ID;
1160 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1161 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1162 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1163 EXPECT_TRUE(proxy);
1164 /**
1165 * @tc.steps: step2. Init func ScrollableParentCallback and insert toparentScrollCallbacks_
1166 */
__anon424ee4060602(Axis axis, float value, int32_t id) 1167 ScrollableParentCallback callback = [&](Axis axis, float value, int32_t id) {
1168 axis = Axis::HORIZONTAL;
1169 value = 0.0;
1170 id = 5;
1171 };
1172 selectOverlayManager->RegisterScrollCallback(5, 5, std::move(callback));
1173 /**
1174 * @tc.steps: step3. call RemoveScrollCallback
1175 * @tc.expected: return false
1176 */
1177 selectOverlayManager->RemoveScrollCallback(0);
1178 EXPECT_FALSE(selectOverlayManager->parentScrollCallbacks_.empty());
1179 }
1180
1181 /**
1182 * @tc.name: RemoveScrollCallback03
1183 * @tc.desc: test RemoveScrollCallback
1184 * @tc.type: FUNC
1185 */
1186 HWTEST_F(SelectOverlayManagerTestNg, RemoveScrollCallback03, TestSize.Level1)
1187 {
1188 /**
1189 * @tc.steps: step1. call CreateAndShowSelectOverlay
1190 * @tc.expected: return true
1191 */
1192 Init();
1193 SelectOverlayInfo selectOverlayInfo;
1194 selectOverlayInfo.singleLineHeight = NODE_ID;
1195 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1196 auto selectOverlayManager = AceType::MakeRefPtr<SelectOverlayManager>(root);
1197 auto proxy = selectOverlayManager->CreateAndShowSelectOverlay(selectOverlayInfo, nullptr);
1198 EXPECT_TRUE(proxy);
1199 /**
1200 * @tc.steps: step2. Init func ScrollableParentCallback and insert toparentScrollCallbacks_
1201 */
__anon424ee4060702(Axis axis, float value, int32_t id) 1202 ScrollableParentCallback callback = [&](Axis axis, float value, int32_t id) {
1203 axis = Axis::HORIZONTAL;
1204 value = 0.0;
1205 id = 5;
1206 };
1207 selectOverlayManager->RegisterScrollCallback(5, 5, std::move(callback));
1208 selectOverlayManager->RegisterScrollCallback(8, 5, std::move(callback));
1209 /**
1210 * @tc.steps: step3. call RemoveScrollCallback
1211 * @tc.expected: return false
1212 */
1213 selectOverlayManager->RemoveScrollCallback(9);
1214 EXPECT_FALSE(selectOverlayManager->parentScrollCallbacks_.empty());
1215 }
1216
1217 /**
1218 * @tc.name: UpdateShowingSelectOverlay01
1219 * @tc.desc: test UpdateShowingSelectOverlay
1220 * @tc.type: FUNC
1221 */
1222 HWTEST_F(SelectOverlayManagerTestNg, UpdateShowingSelectOverlay01, TestSize.Level1)
1223 {
1224 /**
1225 * @tc.steps: step1. Init client and clientInfo
1226 */
1227 TextFieldPattern client;
1228 ClientOverlayInfo clientInfo;
1229 SelectHandleInfo handleInfo;
1230 SelectHandleInfo secondInfo;
1231 secondInfo.isShow = false;
1232 clientInfo.isShowMouseMenu = false;
1233 clientInfo.firstHandleInfo = handleInfo;
1234 clientInfo.secondHandleInfo = secondInfo;
1235
1236 /**
1237 * @tc.steps: step2.call UpdateShowingSelectOverlay
1238 * @tc.expected: isUpdateMenu is true
1239 */
1240 client.UpdateShowingSelectOverlay(clientInfo);
1241 EXPECT_TRUE(clientInfo.isUpdateMenu);
1242 }
1243
1244 /**
1245 * @tc.name: UpdateShowingSelectOverlay02
1246 * @tc.desc: test UpdateShowingSelectOverlay
1247 * @tc.type: FUNC
1248 */
1249 HWTEST_F(SelectOverlayManagerTestNg, UpdateShowingSelectOverlay02, TestSize.Level1)
1250 {
1251 /**
1252 * @tc.steps: step1. Init client and clientInfo
1253 */
1254 TextFieldPattern client;
1255 ClientOverlayInfo clientInfo;
1256 clientInfo.isShowMouseMenu = true;
1257
1258 /**
1259 * @tc.steps: step2.call UpdateShowingSelectOverlay
1260 * @tc.expected: isUpdateMenu is true
1261 */
1262 client.UpdateShowingSelectOverlay(clientInfo);
1263 EXPECT_TRUE(clientInfo.isUpdateMenu);
1264 }
1265
1266 /**
1267 * @tc.name: GetSelectOverlayInfo01
1268 * @tc.desc: test GetSelectOverlayInfo
1269 * @tc.type: FUNC
1270 */
1271 HWTEST_F(SelectOverlayManagerTestNg, GetSelectOverlayInfo01, TestSize.Level1)
1272 {
1273 /**
1274 * @tc.steps: step1. Init client and clientInfo
1275 */
1276 TextFieldPattern client;
1277 ClientOverlayInfo clientInfo;
1278 clientInfo.isUpdateMenu = false;
1279
1280 /**
1281 * @tc.steps: step2.call GetSelectOverlayInfo
1282 * @tc.expected: handlerColor equals the default handlerColor
1283 */
1284 client.selectOverlayInfo_.handlerColor = Color::BLUE;
1285 auto selectOverlayInfo = client.GetSelectOverlayInfo(clientInfo);
1286 ASSERT_TRUE(selectOverlayInfo->handlerColor.has_value());
1287 EXPECT_TRUE(selectOverlayInfo->handlerColor.value() == client.selectOverlayInfo_.handlerColor.value());
1288
1289 /**
1290 * @tc.steps: step3.set handlerColor and call GetSelectOverlayInfo
1291 * @tc.expected: handlerColor equals the setting handlerColor
1292 */
1293 clientInfo.handlerColor = Color::RED;
1294 selectOverlayInfo = client.GetSelectOverlayInfo(clientInfo);
1295 ASSERT_TRUE(selectOverlayInfo->handlerColor.has_value());
1296 EXPECT_TRUE(selectOverlayInfo->handlerColor.value() == Color::RED);
1297 }
1298
1299 /**
1300 * @tc.name: InitSelectOverlay
1301 * @tc.desc: test InitSelectOverlay
1302 * @tc.type: FUNC
1303 */
1304 HWTEST_F(SelectOverlayManagerTestNg, InitSelectOverlay, TestSize.Level1)
1305 {
1306 /**
1307 * @tc.steps: step1. InitSelectOverlay
1308 */
1309 TextFieldPattern client;
1310 client.InitSelectOverlay();
1311 client.selectOverlayInfo_.menuCallback.onCopy();
1312 EXPECT_FALSE(client.SelectOverlayIsOn());
1313
1314 client.InitSelectOverlay();
1315 client.selectOverlayInfo_.menuCallback.onCut();
1316 EXPECT_FALSE(client.SelectOverlayIsOn());
1317
1318 client.InitSelectOverlay();
1319 client.selectOverlayInfo_.menuCallback.onSelectAll();
1320 EXPECT_FALSE(client.SelectOverlayIsOn());
1321
1322 client.InitSelectOverlay();
1323 client.selectOverlayInfo_.menuCallback.onPaste();
1324 EXPECT_FALSE(client.SelectOverlayIsOn());
1325
1326 client.InitSelectOverlay();
1327 client.selectOverlayInfo_.menuCallback.onTranslate();
1328 EXPECT_FALSE(client.SelectOverlayIsOn());
1329
1330 client.InitSelectOverlay();
1331 client.selectOverlayInfo_.menuCallback.onSearch();
1332 EXPECT_FALSE(client.SelectOverlayIsOn());
1333
1334 client.InitSelectOverlay();
1335 client.selectOverlayInfo_.menuCallback.onShare();
1336 EXPECT_FALSE(client.SelectOverlayIsOn());
1337
1338 client.InitSelectOverlay();
1339 client.selectOverlayInfo_.menuCallback.onCameraInput();
1340 EXPECT_FALSE(client.SelectOverlayIsOn());
1341
1342 client.InitSelectOverlay();
1343 client.selectOverlayInfo_.menuCallback.onAIWrite();
1344 EXPECT_FALSE(client.SelectOverlayIsOn());
1345
1346 bool isFirst = true;
1347 GestureEvent info;
1348 client.InitSelectOverlay();
1349 client.selectOverlayInfo_.onHandleMoveStart(info, isFirst);
1350 EXPECT_TRUE(isFirst);
1351
1352 RectF area;
1353 area = RectF(1, 1, 1, 1);
1354 client.InitSelectOverlay();
1355 client.selectOverlayInfo_.onHandleMove(area, isFirst);
1356 EXPECT_TRUE(isFirst);
1357
1358 area = RectF(1, 2, 2, 2);
1359 client.InitSelectOverlay();
1360 client.selectOverlayInfo_.onHandleMoveDone(area, isFirst);
1361 EXPECT_TRUE(isFirst);
1362
1363 bool closedByGlobalEvent = true;
1364 client.InitSelectOverlay();
1365 client.selectOverlayInfo_.onClose(closedByGlobalEvent);
1366 EXPECT_TRUE(isFirst);
1367 }
1368
1369 /**
1370 * @tc.name: RequestOpenSelectOverlay001
1371 * @tc.desc: test RequestOpenSelectOverlay001
1372 * @tc.type: FUNC
1373 */
1374 HWTEST_F(SelectOverlayManagerTestNg, RequestOpenSelectOverlay001, TestSize.Level1)
1375 {
1376 /**
1377 * @tc.steps: step1. RequestOpenSelectOverlay001
1378 */
1379 TextFieldPattern client;
1380 ClientOverlayInfo clientInfo;
1381
1382 EXPECT_FALSE(client.SelectOverlayIsOn());
1383 client.RequestOpenSelectOverlay(clientInfo);
1384 }
1385
1386 /**
1387 * @tc.name: RequestOpenSelectOverlay002
1388 * @tc.desc: test RequestOpenSelectOverlay002
1389 * @tc.type: FUNC
1390 */
1391 HWTEST_F(SelectOverlayManagerTestNg, RequestOpenSelectOverlay002, TestSize.Level1)
1392 {
1393 /**
1394 * @tc.steps: step1. RequestOpenSelectOverlay002
1395 */
1396 TextFieldPattern client;
1397 ClientOverlayInfo clientInfo;
1398
1399 client.RequestOpenSelectOverlay(clientInfo);
1400 EXPECT_FALSE(client.SelectOverlayIsOn());
1401 }
1402
1403 /**
1404 * @tc.name: CreateSelectOverlay01
1405 * @tc.desc: test CreateSelectOverlay01
1406 * @tc.type: FUNC
1407 */
1408 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay01, TestSize.Level1)
1409 {
1410 /**
1411 * @tc.steps: step1. CreateSelectOverlay01
1412 */
1413 TextFieldPattern client;
1414 ClientOverlayInfo clientInfo;
1415 SelectOverlayInfo selectOverlayInfo;
1416
1417 selectOverlayInfo.isUsingMouse = IS_USING_MOUSE;
1418 client.CreateSelectOverlay(clientInfo);
1419 EXPECT_TRUE(selectOverlayInfo.isUsingMouse);
1420
1421 selectOverlayInfo.isUsingMouse = false;
1422 client.CreateSelectOverlay(clientInfo);
1423 EXPECT_FALSE(selectOverlayInfo.isUsingMouse);
1424 }
1425
1426 /**
1427 * @tc.name: CreateSelectOverlay02
1428 * @tc.desc: test CreateSelectOverlay02
1429 * @tc.type: FUNC
1430 */
1431 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay02, TestSize.Level1)
1432 {
1433 /**
1434 * @tc.steps: step1. CreateSelectOverlay02
1435 */
1436 TextFieldPattern client;
1437 ClientOverlayInfo clientInfo;
1438 SelectOverlayInfo selectOverlayInfo;
1439
1440 selectOverlayInfo.isUsingMouse = false;
1441 client.CreateSelectOverlay(clientInfo);
1442 EXPECT_FALSE(selectOverlayInfo.isUsingMouse);
1443 }
1444
1445 /**
1446 * @tc.name: UpdateShowingSelectOverlay03
1447 * @tc.desc: test UpdateShowingSelectOverlay03
1448 * @tc.type: FUNC
1449 */
1450 HWTEST_F(SelectOverlayManagerTestNg, UpdateShowingSelectOverlay03, TestSize.Level1)
1451 {
1452 /**
1453 * @tc.steps: step1. UpdateShowingSelectOverlay03
1454 */
1455 TextFieldPattern client;
1456 ClientOverlayInfo clientInfo;
1457 SelectHandleInfo handleInfo;
1458 SelectHandleInfo secondInfo;
1459 secondInfo.isShow = false;
1460 clientInfo.isShowMouseMenu = false;
1461 clientInfo.secondHandleInfo = secondInfo;
1462
1463 clientInfo.isNewAvoid = true;
1464 client.UpdateShowingSelectOverlay(clientInfo);
1465 EXPECT_TRUE(clientInfo.isNewAvoid);
1466
1467 clientInfo.isUpdateMenu = true;
1468 client.UpdateShowingSelectOverlay(clientInfo);
1469
1470 clientInfo.firstHandleInfo = handleInfo;
1471 client.UpdateShowingSelectOverlay(clientInfo);
1472 }
1473
1474 /**
1475 * @tc.name: UpdateSelectInfo
1476 * @tc.desc: test UpdateSelectInfo
1477 * @tc.type: FUNC
1478 */
1479 HWTEST_F(SelectOverlayManagerTestNg, UpdateSelectInfo, TestSize.Level1)
1480 {
1481 /**
1482 * @tc.steps: step1. UpdateSelectInfo
1483 */
1484 TextFieldPattern client;
1485 SelectOverlayInfo selectOverlayInfo;
1486 const std::string selectInfo = "selectInfo";
1487 client.UpdateSelectInfo(selectInfo);
1488 selectOverlayInfo.selectText = selectInfo;
1489 EXPECT_EQ(selectOverlayInfo.selectText, selectInfo);
1490 }
1491
1492 /**
1493 * @tc.name: UpdateSelectMenuInfo
1494 * @tc.desc: test UpdateSelectMenuInfo
1495 * @tc.type: FUNC
1496 */
1497 HWTEST_F(SelectOverlayManagerTestNg, UpdateSelectMenuInfo, TestSize.Level1)
1498 {
1499 /**
1500 * @tc.steps: step1. UpdateSelectMenuInfo
1501 */
1502 TextFieldPattern client;
1503 SelectOverlayInfo selectOverlayInfo;
1504 std::function<void(SelectMenuInfo&)> updateAction;
1505 client.UpdateSelectMenuInfo(updateAction);
1506 EXPECT_FALSE(selectOverlayInfo.isUseOverlayNG);
1507 }
1508
1509 /**
1510 * @tc.name: UpdateSelectMenuVisibility001
1511 * @tc.desc: test UpdateSelectMenuVisibility001
1512 * @tc.type: FUNC
1513 */
1514 HWTEST_F(SelectOverlayManagerTestNg, UpdateSelectMenuVisibility001, TestSize.Level1)
1515 {
1516 /**
1517 * @tc.steps: step1. UpdateSelectMenuVisibility001
1518 */
1519 TextFieldPattern client;
1520 SelectOverlayInfo selectOverlayInfo;
1521 bool isVisible = true;
1522 client.UpdateSelectMenuVisibility(isVisible);
1523 EXPECT_TRUE(isVisible);
1524 }
1525
1526 /**
1527 * @tc.name: UpdateSelectMenuVisibility002
1528 * @tc.desc: test UpdateSelectMenuVisibility002
1529 * @tc.type: FUNC
1530 */
1531 HWTEST_F(SelectOverlayManagerTestNg, UpdateSelectMenuVisibility002, TestSize.Level1)
1532 {
1533 /**
1534 * @tc.steps: step1. UpdateSelectMenuVisibility002
1535 */
1536 TextFieldPattern client;
1537 SelectOverlayInfo selectOverlayInfo;
1538 bool isVisible = false;
1539 client.UpdateSelectMenuVisibility(isVisible);
1540 EXPECT_FALSE(isVisible);
1541 }
1542
1543 /**
1544 * @tc.name: StartListeningScrollableParent001
1545 * @tc.desc: test StartListeningScrollableParent001
1546 * @tc.type: FUNC
1547 */
1548 HWTEST_F(SelectOverlayManagerTestNg, StartListeningScrollableParent001, TestSize.Level1)
1549 {
1550 /**
1551 * @tc.steps: step1. StartListeningScrollableParent001
1552 */
1553 TextFieldPattern client;
1554 ScrollableParentInfo scrollableParentInfo;
1555 scrollableParentInfo.hasParent = true;
1556 client.StartListeningScrollableParent(root_);
1557 EXPECT_TRUE(scrollableParentInfo.hasParent);
1558 }
1559
1560 /**
1561 * @tc.name: StopListeningScrollableParent
1562 * @tc.desc: test StopListeningScrollableParent
1563 * @tc.type: FUNC
1564 */
1565 HWTEST_F(SelectOverlayManagerTestNg, StopListeningScrollableParent, TestSize.Level1)
1566 {
1567 /**
1568 * @tc.steps: step1. StopListeningScrollableParent
1569 */
1570 TextFieldPattern client;
1571 auto root = AceType::MakeRefPtr<FrameNode>(ROOT_TAG, -1, AceType::MakeRefPtr<Pattern>(), true);
1572 client.StopListeningScrollableParent(root);
1573 EXPECT_NE(root, nullptr);
1574 }
1575
1576 /**
1577 * @tc.name: GetVisibleContentRect
1578 * @tc.desc: test GetVisibleContentRect
1579 * @tc.type: FUNC
1580 */
1581 HWTEST_F(SelectOverlayManagerTestNg, GetVisibleContentRect, TestSize.Level1)
1582 {
1583 /**
1584 * @tc.steps: step1. GetVisibleContentRect
1585 */
1586 TextFieldPattern client;
1587 RectF visibleRect;
1588 visibleRect = RectF(1, 1, 1, 1);
1589 client.GetVisibleContentRect(root_, visibleRect);
1590 EXPECT_NE(visibleRect.GetY(), 0);
1591 }
1592
1593 /**
1594 * @tc.name: SetHolder
1595 * @tc.desc: test SetHolder
1596 * @tc.type: FUNC
1597 */
1598 HWTEST_F(SelectOverlayManagerTestNg, SetHolder, TestSize.Level1)
1599 {
1600 /**
1601 * @tc.steps: step1. SetHolder
1602 */
1603 auto content = SelectContentOverlayManager(root_);
1604 content.SetHolder(nullptr);
1605
1606 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1607 content.SetHolder(holder);
1608
1609 content.selectionHoldId_ = 1;
1610 content.SetHolder(holder);
1611 EXPECT_EQ(content.selectOverlayHolder_, holder);
1612 }
1613
1614 /**
1615 * @tc.name: SetHolderInternal
1616 * @tc.desc: test SetHolderInternal
1617 * @tc.type: FUNC
1618 */
1619 HWTEST_F(SelectOverlayManagerTestNg, SetHolderInternal, TestSize.Level1)
1620 {
1621 /**
1622 * @tc.steps: step1. SetHolderInternal
1623 */
1624 auto content = SelectContentOverlayManager(root_);
1625 content.SetHolderInternal(nullptr);
1626
1627 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1628 content.SetHolder(holder);
1629
1630 content.SetHolder(holder);
1631 content.SetHolderInternal(holder);
1632 EXPECT_EQ(content.selectionHoldId_, -1);
1633 }
1634
1635 /**
1636 * @tc.name: HasHolder
1637 * @tc.desc: test HasHolder
1638 * @tc.type: FUNC
1639 */
1640 HWTEST_F(SelectOverlayManagerTestNg, HasHolder, TestSize.Level1)
1641 {
1642 /**
1643 * @tc.steps: step1. HasHolder
1644 */
1645 auto content = SelectContentOverlayManager(root_);
1646 int32_t id = -1;
1647 bool hasHolder = content.HasHolder(id);
1648 EXPECT_FALSE(hasHolder);
1649 }
1650
1651 /**
1652 * @tc.name: SelectContent Show
1653 * @tc.desc: test SelectContent Show
1654 * @tc.type: FUNC
1655 */
1656 HWTEST_F(SelectOverlayManagerTestNg, Show, TestSize.Level1)
1657 {
1658 /**
1659 * @tc.steps: step1. Show
1660 */
1661 auto content = SelectContentOverlayManager(root_);
1662 bool animation = true;
1663 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1664 content.SetHolder(holder);
1665 int32_t requestCode = -1;
1666 content.Show(animation, requestCode);
1667 EXPECT_EQ(content.selectionHoldId_, -1);
1668 }
1669
1670 /**
1671 * @tc.name: SelectContent BuildSelectOverlayInfo
1672 * @tc.desc: test SelectContent BuildSelectOverlayInfo
1673 * @tc.type: FUNC
1674 */
1675 HWTEST_F(SelectOverlayManagerTestNg, BuildSelectOverlayInfo, TestSize.Level1)
1676 {
1677 /**
1678 * @tc.steps: step1. BuildSelectOverlayInfo
1679 */
1680 auto content = SelectContentOverlayManager(root_);
1681 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1682 content.SetHolder(holder);
1683 int32_t requestCode = -1;
1684 content.BuildSelectOverlayInfo(requestCode);
1685 EXPECT_EQ(content.selectionHoldId_, -1);
1686 }
1687
1688 /**
1689 * @tc.name: SelectContent UpdateStatusInfos
1690 * @tc.desc: test SelectContent UpdateStatusInfos
1691 * @tc.type: FUNC
1692 */
1693 HWTEST_F(SelectOverlayManagerTestNg, UpdateStatusInfos, TestSize.Level1)
1694 {
1695 /**
1696 * @tc.steps: step1. UpdateStatusInfos
1697 */
1698 auto content = SelectContentOverlayManager(root_);
1699 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1700 content.SetHolder(holder);
1701 SelectOverlayInfo info;
1702 content.UpdateStatusInfos(info);
1703 EXPECT_NE(holder, nullptr);
1704 }
1705
1706 /**
1707 * @tc.name: MarkInfoChange
1708 * @tc.desc: test MarkInfoChange
1709 * @tc.type: FUNC
1710 */
1711 HWTEST_F(SelectOverlayManagerTestNg, MarkInfoChange, TestSize.Level1)
1712 {
1713 /**
1714 * @tc.steps: step1. MarkInfoChange
1715 */
1716 auto content = SelectContentOverlayManager(root_);
1717 SelectOverlayDirtyFlag dirty = 1;
1718
1719 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1720 content.SetHolder(holder);
1721 content.MarkInfoChange(dirty);
1722 EXPECT_EQ(content.selectionHoldId_, -1);
1723 }
1724
1725 /**
1726 * @tc.name: UpdateHandleInfosWithFlag
1727 * @tc.desc: test UpdateHandleInfosWithFlag
1728 * @tc.type: FUNC
1729 */
1730 HWTEST_F(SelectOverlayManagerTestNg, UpdateHandleInfosWithFlag, TestSize.Level1)
1731 {
1732 /**
1733 * @tc.steps: step1. UpdateHandleInfosWithFlag
1734 */
1735 auto content = SelectContentOverlayManager(root_);
1736 int32_t updateFlag = 1;
1737
1738 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1739 content.SetHolder(holder);
1740 content.UpdateHandleInfosWithFlag(updateFlag);
1741
1742 updateFlag = 2;
1743 content.UpdateHandleInfosWithFlag(updateFlag);
1744
1745 updateFlag = 3;
1746 content.UpdateHandleInfosWithFlag(updateFlag);
1747 EXPECT_EQ(content.selectionHoldId_, -1);
1748 }
1749
1750 /**
1751 * @tc.name: CreateSelectOverlay
1752 * @tc.desc: test CreateSelectOverlay
1753 * @tc.type: FUNC
1754 */
1755 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay, TestSize.Level1)
1756 {
1757 /**
1758 * @tc.steps: step1. CreateSelectOverlay
1759 */
1760 auto content = SelectContentOverlayManager(root_);
1761 SelectOverlayInfo info;
1762 bool animation = true;
1763 content.CreateSelectOverlay(info, animation);
1764 EXPECT_EQ(content.selectionHoldId_, -1);
1765 }
1766
1767 /**
1768 * @tc.name: MountNodeToRoot
1769 * @tc.desc: test MountNodeToRoot
1770 * @tc.type: FUNC
1771 */
1772 HWTEST_F(SelectOverlayManagerTestNg, MountNodeToRoot, TestSize.Level1)
1773 {
1774 /**
1775 * @tc.steps: step1. MountNodeToRoot
1776 */
1777 auto content = SelectContentOverlayManager(root_);
1778 bool animation = true;
1779 content.MountNodeToRoot(root_, animation, NodeType::HANDLE);
1780 EXPECT_EQ(content.selectionHoldId_, -1);
1781 }
1782
1783 /**
1784 * @tc.name: GetSelectOverlayRoot
1785 * @tc.desc: test GetSelectOverlayRoot
1786 * @tc.type: FUNC
1787 */
1788 HWTEST_F(SelectOverlayManagerTestNg, GetSelectOverlayRoot, TestSize.Level1)
1789 {
1790 /**
1791 * @tc.steps: step1. GetSelectOverlayRoot
1792 */
1793 auto content = SelectContentOverlayManager(root_);
1794 auto rootNode = content.GetSelectOverlayRoot();
1795 EXPECT_EQ(rootNode, nullptr);
1796 }
1797
1798 /**
1799 * @tc.name: CloseInternal
1800 * @tc.desc: test CloseInternal
1801 * @tc.type: FUNC
1802 */
1803 HWTEST_F(SelectOverlayManagerTestNg, CloseInternal, TestSize.Level1)
1804 {
1805 /**
1806 * @tc.steps: step1. CloseInternal
1807 */
1808 auto content = SelectContentOverlayManager(root_);
1809 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1810 content.SetHolder(holder);
1811 int32_t id = 1;
1812 bool animation = true;
1813 CloseReason reason = CloseReason::CLOSE_REASON_NORMAL;
1814 content.CloseInternal(id, animation, reason);
1815 EXPECT_EQ(content.selectionHoldId_, -1);
1816 }
1817
1818 /**
1819 * @tc.name: DestroySelectOverlayNode
1820 * @tc.desc: test DestroySelectOverlayNode
1821 * @tc.type: FUNC
1822 */
1823 HWTEST_F(SelectOverlayManagerTestNg, DestroySelectOverlayNode, TestSize.Level1)
1824 {
1825 /**
1826 * @tc.steps: step1. DestroySelectOverlayNode
1827 */
1828 auto content = SelectContentOverlayManager(root_);
1829 content.DestroySelectOverlayNode(root_);
1830 content.ClearAllStatus();
1831 EXPECT_EQ(content.selectionHoldId_, -1);
1832 }
1833
1834 /**
1835 * @tc.name: ClearAllStatus
1836 * @tc.desc: test ClearAllStatus
1837 * @tc.type: FUNC
1838 */
1839 HWTEST_F(SelectOverlayManagerTestNg, ClearAllStatus, TestSize.Level1)
1840 {
1841 /**
1842 * @tc.steps: step1. ClearAllStatus
1843 */
1844 auto content = SelectContentOverlayManager(root_);
1845 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1846 content.SetHolder(holder);
1847 content.ClearAllStatus();
1848 EXPECT_NE(holder, nullptr);
1849 }
1850
1851 /**
1852 * @tc.name: CloseCurrent
1853 * @tc.desc: test CloseCurrent
1854 * @tc.type: FUNC
1855 */
1856 HWTEST_F(SelectOverlayManagerTestNg, CloseCurrent, TestSize.Level1)
1857 {
1858 /**
1859 * @tc.steps: step1. CloseCurrent
1860 */
1861 auto content = SelectContentOverlayManager(root_);
1862 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1863 content.SetHolder(holder);
1864 bool animation = true;
1865 CloseReason reason = CloseReason::CLOSE_REASON_NORMAL;
1866 bool isCloseCurrent = content.CloseCurrent(animation, reason);
1867 EXPECT_FALSE(isCloseCurrent);
1868 }
1869
1870 /**
1871 * @tc.name: ShowOptionMenu
1872 * @tc.desc: test ShowOptionMenu
1873 * @tc.type: FUNC
1874 */
1875 HWTEST_F(SelectOverlayManagerTestNg, ShowOptionMenu, TestSize.Level1)
1876 {
1877 /**
1878 * @tc.steps: step1. ShowOptionMenu
1879 */
1880 auto content = SelectContentOverlayManager(root_);
1881 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1882 content.SetHolder(holder);
1883 content.ShowOptionMenu();
1884 content.HideOptionMenu(true);
1885 content.ToggleOptionMenu();
1886 content.DisableMenu();
1887 content.EnableMenu();
1888 content.HideHandle();
1889 content.IsCreating();
1890 content.IsMenuShow();
1891 content.IsSingleHandle();
1892 bool isHandlesShow = content.IsHandlesShow();
1893 EXPECT_FALSE(isHandlesShow);
1894 }
1895
1896 /**
1897 * @tc.name: IsHandleReverse
1898 * @tc.desc: test IsHandleReverse
1899 * @tc.type: FUNC
1900 */
1901 HWTEST_F(SelectOverlayManagerTestNg, IsHandleReverse, TestSize.Level1)
1902 {
1903 /**
1904 * @tc.steps: step1. IsHandleReverse
1905 */
1906 auto content = SelectContentOverlayManager(root_);
1907 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1908 content.SetHolder(holder);
1909 bool isHandle = content.IsHandleReverse();
1910 EXPECT_FALSE(isHandle);
1911 }
1912
1913 /**
1914 * @tc.name: RestartHiddenHandleTask
1915 * @tc.desc: test RestartHiddenHandleTask
1916 * @tc.type: FUNC
1917 */
1918 HWTEST_F(SelectOverlayManagerTestNg, RestartHiddenHandleTask, TestSize.Level1)
1919 {
1920 /**
1921 * @tc.steps: step1. RestartHiddenHandleTask
1922 */
1923 auto content = SelectContentOverlayManager(root_);
1924 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1925 content.SetHolder(holder);
1926 bool isDelay = true;
1927 content.RestartHiddenHandleTask(isDelay);
1928 EXPECT_FALSE(content.isIntercept_);
1929 }
1930
1931 /**
1932 * @tc.name: CancelHiddenHandleTask
1933 * @tc.desc: test RestartHiddenHandleTask
1934 * @tc.type: FUNC
1935 */
1936 HWTEST_F(SelectOverlayManagerTestNg, CancelHiddenHandleTask, TestSize.Level1)
1937 {
1938 /**
1939 * @tc.steps: step1. CancelHiddenHandleTask
1940 */
1941 auto content = SelectContentOverlayManager(root_);
1942 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1943 content.SetHolder(holder);
1944 content.CancelHiddenHandleTask();
1945 EXPECT_FALSE(content.isIntercept_);
1946 }
1947
1948 /**
1949 * @tc.name: GetSelectOverlayNode
1950 * @tc.desc: test GetSelectOverlayNode
1951 * @tc.type: FUNC
1952 */
1953 HWTEST_F(SelectOverlayManagerTestNg, GetSelectOverlayNode, TestSize.Level1)
1954 {
1955 /**
1956 * @tc.steps: step1. GetSelectOverlayNode
1957 */
1958 auto content = SelectContentOverlayManager(root_);
1959 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1960 content.SetHolder(holder);
1961 auto selectOverlayNode = content.GetSelectOverlayNode();
1962 EXPECT_EQ(selectOverlayNode, nullptr);
1963 }
1964
1965 /**
1966 * @tc.name: GetShowMenuType
1967 * @tc.desc: test GetShowMenuType
1968 * @tc.type: FUNC
1969 */
1970 HWTEST_F(SelectOverlayManagerTestNg, GetShowMenuType, TestSize.Level1)
1971 {
1972 /**
1973 * @tc.steps: step1. GetShowMenuType
1974 */
1975 auto content = SelectContentOverlayManager(root_);
1976 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1977 content.SetHolder(holder);
1978 content.GetShowMenuType();
1979 EXPECT_FALSE(content.IsOpen());
1980 }
1981
1982 /**
1983 * @tc.name: ContentHandleGlobalEvent
1984 * @tc.desc: test SelectContentOverlayManager HandleGlobalEvent
1985 * @tc.type: FUNC
1986 */
1987 HWTEST_F(SelectOverlayManagerTestNg, ContentHandleGlobalEvent, TestSize.Level1)
1988 {
1989 /**
1990 * @tc.steps: step1. HandleGlobalEvent
1991 */
1992 Init();
1993 auto content = SelectContentOverlayManager(root_);
1994 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1995 content.SetHolder(holder);
1996 TouchEvent touchPoint;
1997 content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
1998 EXPECT_NE(touchPoint.type, TouchType::DOWN);
1999 /**
2000 * @tc.steps: step2. Change the TouchEvent and call HandleGlobalEvent
2001 */
2002 touchPoint.type = TouchType::DOWN;
2003 content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
2004 EXPECT_NE(touchPoint.type, TouchType::UP);
2005
2006 touchPoint.type = TouchType::UP;
2007 content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
2008 EXPECT_NE(touchPoint.type, TouchType::MOVE);
2009 }
2010
2011 /**
2012 * @tc.name: IsTouchInSelectOverlayArea001
2013 * @tc.desc: test IsTouchInSelectOverlayArea
2014 * @tc.type: FUNC
2015 */
2016 HWTEST_F(SelectOverlayManagerTestNg, IsTouchInSelectOverlayArea001, TestSize.Level1)
2017 {
2018 /**
2019 * @tc.steps: step1. IsTouchInSelectOverlayArea
2020 */
2021 Init();
2022 auto content = SelectContentOverlayManager(root_);
2023 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2024 PointF point { 9.0f, 12.0f };
2025 content.SetHolder(holder);
2026 content.IsTouchInSelectOverlayArea(point);
2027 EXPECT_FALSE(content.IsOpen());
2028 }
2029
2030 /**
2031 * @tc.name: IsTouchInSelectOverlayArea002
2032 * @tc.desc: test IsTouchInSelectOverlayArea
2033 * @tc.type: FUNC
2034 */
2035 HWTEST_F(SelectOverlayManagerTestNg, IsTouchInSelectOverlayArea002, TestSize.Level1)
2036 {
2037 /**
2038 * @tc.steps: step1. init SelectContentOverlayManager
2039 */
2040 Init();
2041 auto content = SelectContentOverlayManager(root_);
2042 SelectOverlayInfo selectInfo;
2043 selectInfo.enableHandleLevel = true;
2044 selectInfo.menuInfo.showCut = true;
2045 content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2046 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2047 PointF point { 9.0f, 12.0f };
2048 content.SetHolder(holder);
2049
2050 /**
2051 * @tc.steps: step2. call IsTouchInSelectOverlayArea
2052 */
2053 content.IsTouchInSelectOverlayArea(point);
2054 EXPECT_FALSE(content.IsOpen());
2055 }
2056
2057 /**
2058 * @tc.name: HandleSelectionEvent
2059 * @tc.desc: test HandleSelectionEvent
2060 * @tc.type: FUNC
2061 */
2062 HWTEST_F(SelectOverlayManagerTestNg, HandleSelectionEvent, TestSize.Level1)
2063 {
2064 /**
2065 * @tc.steps: step1. HandleSelectionEvent
2066 */
2067 Init();
2068 auto content = SelectContentOverlayManager(root_);
2069 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2070 PointF point { 9.0f, 12.0f };
2071 content.SetHolder(holder);
2072 TouchEvent touchPoint;
2073 touchPoint.type = TouchType::UP;
2074 content.HandleSelectionEvent(point, touchPoint);
2075 EXPECT_FALSE(content.IsOpen());
2076 }
2077
2078 /**
2079 * @tc.name: ResetSelectionRect
2080 * @tc.desc: test ResetSelectionRect
2081 * @tc.type: FUNC
2082 */
2083 HWTEST_F(SelectOverlayManagerTestNg, ResetSelectionRect, TestSize.Level1)
2084 {
2085 /**
2086 * @tc.steps: step1. ResetSelectionRect
2087 */
2088 Init();
2089 auto content = SelectContentOverlayManager(root_);
2090 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2091 content.SetHolder(holder);
2092 HoldSelectionInfo holdSelectionInfo_;
2093 holdSelectionInfo_ = {};
2094 content.ResetSelectionRect();
2095 EXPECT_EQ(content.selectionHoldId_, -1);
2096 }
2097
2098 /**
2099 * @tc.name: SetHoldSelectionCallback
2100 * @tc.desc: test SetHoldSelectionCallback
2101 * @tc.type: FUNC
2102 */
2103 HWTEST_F(SelectOverlayManagerTestNg, SetHoldSelectionCallback, TestSize.Level1)
2104 {
2105 /**
2106 * @tc.steps: step1. SetHoldSelectionCallback
2107 */
2108 Init();
2109 auto content = SelectContentOverlayManager(root_);
2110 int32_t id = -1;
2111 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2112 HoldSelectionInfo holdSelectionInfo_;
2113 holdSelectionInfo_ = {};
2114 content.SetHolder(holder);
2115 content.SetHoldSelectionCallback(id, holdSelectionInfo_);
2116 EXPECT_EQ(content.selectionHoldId_, -1);
2117 id = 1;
2118 content.SetHoldSelectionCallback(id, holdSelectionInfo_);
2119 EXPECT_EQ(content.selectionHoldId_, 1);
2120 }
2121
2122 /**
2123 * @tc.name: RemoveHoldSelectionCallback
2124 * @tc.desc: test RemoveHoldSelectionCallback
2125 * @tc.type: FUNC
2126 */
2127 HWTEST_F(SelectOverlayManagerTestNg, RemoveHoldSelectionCallback, TestSize.Level1)
2128 {
2129 /**
2130 * @tc.steps: step1. RemoveHoldSelectionCallback
2131 */
2132 Init();
2133 auto content = SelectContentOverlayManager(root_);
2134 HoldSelectionInfo holdSelectionInfo_;
2135 holdSelectionInfo_ = {};
2136 int32_t id = -1;
2137 auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2138 content.SetHolder(holder);
2139 content.RemoveHoldSelectionCallback(id);
2140 id = 1;
2141 content.RemoveHoldSelectionCallback(id);
2142 EXPECT_EQ(content.selectionHoldId_, -1);
2143 }
2144
2145 /**
2146 * @tc.name: SwitchToHandleMode
2147 * @tc.desc: test SwitchToHandleMode
2148 * @tc.type: FUNC
2149 */
2150 HWTEST_F(SelectOverlayManagerTestNg, SwitchToHandleMode, TestSize.Level1)
2151 {
2152 /**
2153 * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2154 */
2155 Init();
2156 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2157 auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2158 content->SetHolder(holder);
2159 content->Show(false, 0);
2160 EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2161 EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2162 /**
2163 * @tc.steps: step2. SwitchToHandleMode OVERLAY mode.
2164 */
2165 content->SwitchToHandleMode(HandleLevelMode::OVERLAY);
2166 EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2167
2168 /**
2169 * @tc.steps: step3. SwitchToHandleMode EMBED mode.
2170 */
2171 content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2172 EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2173 holder->allowSwitchMode_ = true;
2174 holder->SetOwner(root_);
2175 content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2176 EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2177 }
2178
2179 /**
2180 * @tc.name: ClickAndSwitchToHandleMode
2181 * @tc.desc: test click to switch overlay mode.
2182 * @tc.type: FUNC
2183 */
2184 HWTEST_F(SelectOverlayManagerTestNg, ClickAndSwitchToHandleMode, TestSize.Level1)
2185 {
2186 /**
2187 * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2188 */
2189 Init();
2190 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2191 auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2192 content->SetHolder(holder);
2193 content->Show(false, 0);
2194 ASSERT_NE(content->handleNode_.Upgrade(), nullptr);
2195 ASSERT_NE(content->menuNode_.Upgrade(), nullptr);
2196 /**
2197 * @tc.steps: step2. SwitchToHandleMode EMBED mode.
2198 */
2199 content->SwitchToHandleMode(HandleLevelMode::EMBED);
2200 EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2201
2202 /**
2203 * @tc.steps: step3. click handle to switch overlay mode.
2204 */
2205 auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(content->menuNode_.Upgrade());
2206 ASSERT_NE(selectOverlayNode, nullptr);
2207 auto selectOverlayPattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2208 ASSERT_NE(selectOverlayPattern, nullptr);
2209 selectOverlayPattern->isFirstHandleTouchDown_ = true;
2210 selectOverlayPattern->isSecondHandleTouchDown_ = true;
2211 TouchEventInfo info("");
2212 TouchLocationInfo location(1);
2213 location.SetLocalLocation(Offset(0.0f, 0.0f));
2214 location.touchType_ = TouchType::UP;
2215 info.changedTouches_ = { location };
2216 auto pipeline = PipelineContext::GetCurrentContext();
2217 ASSERT_NE(pipeline, nullptr);
2218 auto overlayManager = pipeline->GetSelectOverlayManager();
2219 ASSERT_NE(overlayManager, nullptr);
2220 overlayManager->selectContentManager_ = content;
2221 holder->allowSwitchMode_ = true;
2222 selectOverlayPattern->HandleTouchEvent(info);
2223 EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2224 }
2225
2226 /**
2227 * @tc.name: CreateSelectOverlay03
2228 * @tc.desc: test CreateSelectOverlay
2229 * @tc.type: FUNC
2230 */
2231 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay03, TestSize.Level1)
2232 {
2233 /**
2234 * @tc.steps: step1. CreateSelectOverlay
2235 */
2236 Init();
2237 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2238 ASSERT_NE(content, nullptr);
2239 SelectOverlayInfo info;
2240 info.enableHandleLevel = false;
2241 info.enableSubWindowMenu = true;
2242 info.isUsingMouse = IS_USING_MOUSE;
2243 TextMenuOptions textMenuOptions_;
2244 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2245 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2246 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2247 bool animation = true;
2248 content->CreateSelectOverlay(info, animation);
2249 EXPECT_EQ(content->selectionHoldId_, -1);
2250 }
2251
2252 /**
2253 * @tc.name: CreateSelectOverlay04
2254 * @tc.desc: test CreateSelectOverlay
2255 * @tc.type: FUNC
2256 */
2257 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay04, TestSize.Level1)
2258 {
2259 /**
2260 * @tc.steps: step1. CreateSelectOverlay
2261 */
2262 Init();
2263 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2264 ASSERT_NE(content, nullptr);
2265 SelectOverlayInfo info;
2266 info.enableHandleLevel = true;
2267 info.enableSubWindowMenu = true;
2268 TextMenuOptions textMenuOptions_;
2269 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2270 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2271 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2272 bool animation = true;
2273 content->CreateSelectOverlay(info, animation);
2274 EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2275 EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2276 }
2277
2278 /**
2279 * @tc.name: MountMenuNodeToSubWindow01
2280 * @tc.desc: test MountMenuNodeToSubWindow
2281 * @tc.type: FUNC
2282 */
2283 HWTEST_F(SelectOverlayManagerTestNg, MountMenuNodeToSubWindow01, TestSize.Level1)
2284 {
2285 /**
2286 * @tc.steps: step1. init SelectContentOverlayManager
2287 */
2288 Init();
2289 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2290 ASSERT_NE(content, nullptr);
2291 SelectOverlayInfo selectInfo;
2292 selectInfo.enableHandleLevel = true;
2293 selectInfo.enableSubWindowMenu = true;
2294 selectInfo.isUseOverlayNG = true;
2295 selectInfo.menuInfo.showCut = true;
2296 selectInfo.menuInfo.showCopy = true;
2297 TextMenuOptions textMenuOptions_;
2298 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2299 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2300 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2301
2302 /**
2303 * @tc.steps: step2. CreateSelectOverlayNode
2304 */
2305 content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2306 ASSERT_NE(content->shareOverlayInfo_, nullptr);
2307 auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content->shareOverlayInfo_);
2308 ASSERT_NE(frameNode, nullptr);
2309 auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2310 ASSERT_NE(selectOverlayNode, nullptr);
2311
2312 /**
2313 * @tc.steps: step3. MountMenuNodeToSubWindow
2314 */
2315 bool animation = true;
2316 content->MountMenuNodeToSubWindow(selectOverlayNode, animation, NodeType::TOUCH_MENU);
2317 auto selectoverlayPattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2318 ASSERT_NE(selectoverlayPattern, nullptr);
2319 EXPECT_EQ(selectoverlayPattern->GetIsMenuShowInSubWindow(), false);
2320 }
2321
2322 /**
2323 * @tc.name: IsEnableSubWindowMenu01
2324 * @tc.desc: test IsEnableSubWindowMenu
2325 * @tc.type: FUNC
2326 */
2327 HWTEST_F(SelectOverlayManagerTestNg, IsEnableSubWindowMenu01, TestSize.Level1)
2328 {
2329 Init();
2330 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2331 ASSERT_NE(content, nullptr);
2332 SelectOverlayInfo info;
2333 info.enableHandleLevel = true;
2334 info.enableSubWindowMenu = true;
2335 TextMenuOptions textMenuOptions_;
2336 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2337 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2338 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2339 content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2340 EXPECT_EQ(content->IsEnableSubWindowMenu(), false);
2341 }
2342
2343 /**
2344 * @tc.name: IsEnableSubWindowMenu02
2345 * @tc.desc: test IsEnableSubWindowMenu
2346 * @tc.type: FUNC
2347 */
2348 HWTEST_F(SelectOverlayManagerTestNg, IsEnableSubWindowMenu02, TestSize.Level1)
2349 {
2350 Init();
2351 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2352 ASSERT_NE(content, nullptr);
2353 SelectOverlayInfo info;
2354 info.enableHandleLevel = true;
2355 info.enableSubWindowMenu = true;
2356 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::DEFAULT);
2357 content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2358 EXPECT_EQ(content->IsEnableSubWindowMenu(), false);
2359 }
2360
2361 /**
2362 * @tc.name: IsRightClickSubWindowMenu01
2363 * @tc.desc: test IsRightClickSubWindowMenu
2364 * @tc.type: FUNC
2365 */
2366 HWTEST_F(SelectOverlayManagerTestNg, IsRightClickSubWindowMenu01, TestSize.Level1)
2367 {
2368 /**
2369 * @tc.steps: step1. init SelectContentOverlayManager
2370 */
2371 Init();
2372 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2373 ASSERT_NE(content, nullptr);
2374 SelectOverlayInfo info;
2375 info.enableHandleLevel = false;
2376 info.enableSubWindowMenu = true;
2377 info.isUsingMouse = IS_USING_MOUSE;
2378 info.isUseOverlayNG = true;
2379 TextMenuOptions textMenuOptions_;
2380 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2381 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2382 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2383 content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2384 ASSERT_NE(content->shareOverlayInfo_, nullptr);
2385
2386 auto wrapperNode_ = FrameNode::CreateFrameNode(V2::MENU_WRAPPER_ETS_TAG,
2387 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<MenuWrapperPattern>(1));
2388 ASSERT_NE(wrapperNode_, nullptr);
2389 content->selectOverlayNode_ = wrapperNode_;
2390 auto selectoverlayNode = content->selectOverlayNode_.Upgrade();
2391 ASSERT_NE(selectoverlayNode, nullptr);
2392
2393 /**
2394 * @tc.steps: step2. Update menunode menuWrapperPattern
2395 */
2396 auto menuWrapperPattern = selectoverlayNode->GetPattern<MenuWrapperPattern>();
2397 ASSERT_NE(menuWrapperPattern, nullptr);
2398 menuWrapperPattern->SetIsSelectOverlaySubWindowWrapper(true);
2399 EXPECT_EQ(menuWrapperPattern->GetIsSelectOverlaySubWindowWrapper(), true);
2400 EXPECT_EQ(content->IsRightClickSubWindowMenu(), true);
2401 }
2402
2403 /**
2404 * @tc.name: IsRightClickSubWindowMenu02
2405 * @tc.desc: test IsRightClickSubWindowMenu
2406 * @tc.type: FUNC
2407 */
2408 HWTEST_F(SelectOverlayManagerTestNg, IsRightClickSubWindowMenu02, TestSize.Level1)
2409 {
2410 /**
2411 * @tc.steps: step1. CreateSelectOverlay
2412 */
2413 Init();
2414 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2415 ASSERT_NE(content, nullptr);
2416 SelectOverlayInfo info;
2417 info.enableHandleLevel = false;
2418 info.enableSubWindowMenu = true;
2419 info.isUsingMouse = IS_USING_MOUSE;
2420 TextMenuOptions textMenuOptions_;
2421 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2422 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2423 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2424 bool animation = true;
2425 content->CreateSelectOverlay(info, animation);
2426 EXPECT_EQ(content->IsRightClickSubWindowMenu(), false);
2427 }
2428
2429 /**
2430 * @tc.name: IsSelectOverlaySubWindowMenu01
2431 * @tc.desc: test IsSelectOverlaySubWindowMenu
2432 * @tc.type: FUNC
2433 */
2434 HWTEST_F(SelectOverlayManagerTestNg, IsSelectOverlaySubWindowMenu01, TestSize.Level1)
2435 {
2436 /**
2437 * @tc.steps: step1. CreateSelectOverlay
2438 */
2439 Init();
2440 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2441 ASSERT_NE(content, nullptr);
2442 SelectOverlayInfo info;
2443 info.enableHandleLevel = true;
2444 info.enableSubWindowMenu = true;
2445 info.isUseOverlayNG = true;
2446 TextMenuOptions textMenuOptions_;
2447 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2448 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2449 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2450 bool animation = true;
2451 content->CreateSelectOverlay(info, animation);
2452 EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2453 EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2454
2455 /**
2456 * @tc.steps: step2. Update menunode selectOverlayPattern
2457 */
2458 RefPtr<Pattern> pattern = content->GetMenuPattern();
2459 ASSERT_NE(pattern, nullptr);
2460 auto selectOverlayPattern = AceType::DynamicCast<SelectOverlayPattern>(pattern);
2461 ASSERT_NE(selectOverlayPattern, nullptr);
2462 selectOverlayPattern->SetIsMenuShowInSubWindow(true);
2463 EXPECT_EQ(selectOverlayPattern->GetIsMenuShowInSubWindow(), true);
2464 EXPECT_EQ(content->IsSelectOverlaySubWindowMenu(), true);
2465 }
2466
2467 /**
2468 * @tc.name: IsSelectOverlaySubWindowMenu02
2469 * @tc.desc: test IsSelectOverlaySubWindowMenu
2470 * @tc.type: FUNC
2471 */
2472 HWTEST_F(SelectOverlayManagerTestNg, IsSelectOverlaySubWindowMenu02, TestSize.Level1)
2473 {
2474 /**
2475 * @tc.steps: step1. CreateSelectOverlay
2476 */
2477 Init();
2478 auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2479 ASSERT_NE(content, nullptr);
2480 SelectOverlayInfo info;
2481 info.enableHandleLevel = true;
2482 info.enableSubWindowMenu = true;
2483 info.isUseOverlayNG = true;
2484 TextMenuOptions textMenuOptions_;
2485 textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2486 selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2487 EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2488 bool animation = true;
2489 content->CreateSelectOverlay(info, animation);
2490 EXPECT_EQ(content->IsSelectOverlaySubWindowMenu(), false);
2491 }
2492 } // namespace OHOS::Ace::NG
2493