• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 =
__anon412ff7280202() 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      */
__anon412ff7280302(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      */
__anon412ff7280402(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      */
__anon412ff7280502(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      */
__anon412ff7280602(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      */
__anon412ff7280702(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: CloseInternalTest001
1800  * @tc.desc: test CloseInternal
1801  * @tc.type: FUNC
1802  */
1803 HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest001, 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: CloseInternalTest002
1820  * @tc.desc: test CloseInternal
1821  * @tc.type: FUNC
1822  */
1823 HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest002, TestSize.Level1)
1824 {
1825     /**
1826      * @tc.steps: step1. CloseInternal
1827      */
1828     Init();
1829     auto content = SelectContentOverlayManager(root_);
1830     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
1831     holder->SetOwner(root_);
1832     content.SetHolder(holder);
1833     SelectOverlayInfo selectInfo;
1834     selectInfo.enableHandleLevel = true;
1835     selectInfo.menuInfo.showCut = true;
1836     content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
1837     ASSERT_NE(content.shareOverlayInfo_, nullptr);
1838     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content.shareOverlayInfo_);
1839     ASSERT_NE(frameNode, nullptr);
1840     content.menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1841     ASSERT_NE(content.menuNode_.Upgrade(), nullptr);
1842 
1843     /**
1844      * @tc.steps: step2. mount menuNode to root node
1845      */
1846     frameNode->SetParent(root_);
1847 
1848     /**
1849      * @tc.steps: step3. call CloseInternal
1850      */
1851     int32_t id = root_->GetId();
1852     bool animation = true;
1853     CloseReason reason = CloseReason::CLOSE_REASON_NORMAL;
1854     content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>();
1855     content.shareOverlayInfo_->menuInfo.menuIsShow = true;
1856     content.shareOverlayInfo_->enableHandleLevel = true;
1857     bool result = content.CloseInternal(id, animation, reason);
1858     EXPECT_TRUE(result);
1859 }
1860 
1861 /**
1862  * @tc.name: CloseInternalTest003
1863  * @tc.desc: test CloseInternal
1864  * @tc.type: FUNC
1865  */
1866 HWTEST_F(SelectOverlayManagerTestNg, CloseInternalTest003, TestSize.Level1)
1867 {
1868     /**
1869      * @tc.steps: step1. CloseInternal.
1870      */
1871     Init();
1872     auto content = SelectContentOverlayManager(root_);
1873     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1874     content.SetHolder(holder);
1875     SelectOverlayInfo selectInfo;
1876     selectInfo.enableHandleLevel = true;
1877     selectInfo.menuInfo.showCut = true;
1878     content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
1879     ASSERT_NE(content.shareOverlayInfo_, nullptr);
1880     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content.shareOverlayInfo_);
1881     ASSERT_NE(frameNode, nullptr);
1882     content.menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1883     ASSERT_NE(content.menuNode_.Upgrade(), nullptr);
1884 
1885     /**
1886      * @tc.steps: step2. mount menuNode to root node
1887      */
1888     frameNode->SetParent(root_);
1889 
1890     /**
1891      * @tc.steps: step3. call CloseInternal
1892      */
1893     int32_t id = root_->GetId();
1894     bool animation = true;
1895     CloseReason reason = CloseReason::CLOSE_REASON_NORMAL;
1896     content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>();
1897     content.shareOverlayInfo_->menuInfo.menuIsShow = true;
1898     content.shareOverlayInfo_->enableHandleLevel = false;
1899     bool result = content.CloseInternal(id, animation, reason);
1900     EXPECT_TRUE(result);
1901 }
1902 
1903 /**
1904  * @tc.name: DestroySelectOverlayNode
1905  * @tc.desc: test DestroySelectOverlayNode
1906  * @tc.type: FUNC
1907  */
1908 HWTEST_F(SelectOverlayManagerTestNg, DestroySelectOverlayNode, TestSize.Level1)
1909 {
1910     /**
1911      * @tc.steps: step1. DestroySelectOverlayNode
1912      */
1913     auto content = SelectContentOverlayManager(root_);
1914     content.DestroySelectOverlayNode(root_);
1915     content.ClearAllStatus();
1916     EXPECT_EQ(content.selectionHoldId_, -1);
1917 }
1918 
1919 /**
1920  * @tc.name: ClearAllStatus
1921  * @tc.desc: test ClearAllStatus
1922  * @tc.type: FUNC
1923  */
1924 HWTEST_F(SelectOverlayManagerTestNg, ClearAllStatus, TestSize.Level1)
1925 {
1926     /**
1927      * @tc.steps: step1. ClearAllStatus
1928      */
1929     auto content = SelectContentOverlayManager(root_);
1930     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1931     content.SetHolder(holder);
1932     content.ClearAllStatus();
1933     EXPECT_NE(holder, nullptr);
1934 }
1935 
1936 /**
1937  * @tc.name: CloseCurrent
1938  * @tc.desc: test CloseCurrent
1939  * @tc.type: FUNC
1940  */
1941 HWTEST_F(SelectOverlayManagerTestNg, CloseCurrent, TestSize.Level1)
1942 {
1943     /**
1944      * @tc.steps: step1. CloseCurrent
1945      */
1946     auto content = SelectContentOverlayManager(root_);
1947     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1948     content.SetHolder(holder);
1949     bool animation = true;
1950     CloseReason reason = CloseReason::CLOSE_REASON_NORMAL;
1951     bool isCloseCurrent = content.CloseCurrent(animation, reason);
1952     EXPECT_FALSE(isCloseCurrent);
1953 }
1954 
1955 /**
1956  * @tc.name: ShowOptionMenu
1957  * @tc.desc: test ShowOptionMenu
1958  * @tc.type: FUNC
1959  */
1960 HWTEST_F(SelectOverlayManagerTestNg, ShowOptionMenu, TestSize.Level1)
1961 {
1962     /**
1963      * @tc.steps: step1. ShowOptionMenu
1964      */
1965     auto content = SelectContentOverlayManager(root_);
1966     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1967     content.SetHolder(holder);
1968     content.ShowOptionMenu();
1969     content.HideOptionMenu(true);
1970     content.ToggleOptionMenu();
1971     content.DisableMenu();
1972     content.EnableMenu();
1973     content.HideHandle();
1974     content.IsCreating();
1975     content.IsMenuShow();
1976     content.IsSingleHandle();
1977     bool isHandlesShow = content.IsHandlesShow();
1978     EXPECT_FALSE(isHandlesShow);
1979 }
1980 
1981 /**
1982  * @tc.name: IsHandleReverse
1983  * @tc.desc: test IsHandleReverse
1984  * @tc.type: FUNC
1985  */
1986 HWTEST_F(SelectOverlayManagerTestNg, IsHandleReverse, TestSize.Level1)
1987 {
1988     /**
1989      * @tc.steps: step1. IsHandleReverse
1990      */
1991     auto content = SelectContentOverlayManager(root_);
1992     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
1993     content.SetHolder(holder);
1994     bool isHandle = content.IsHandleReverse();
1995     EXPECT_FALSE(isHandle);
1996 }
1997 
1998 /**
1999  * @tc.name: RestartHiddenHandleTask
2000  * @tc.desc: test RestartHiddenHandleTask
2001  * @tc.type: FUNC
2002  */
2003 HWTEST_F(SelectOverlayManagerTestNg, RestartHiddenHandleTask, TestSize.Level1)
2004 {
2005     /**
2006      * @tc.steps: step1. RestartHiddenHandleTask
2007      */
2008     auto content = SelectContentOverlayManager(root_);
2009     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2010     content.SetHolder(holder);
2011     bool isDelay = true;
2012     content.RestartHiddenHandleTask(isDelay);
2013     EXPECT_FALSE(content.isIntercept_);
2014 }
2015 
2016 /**
2017  * @tc.name: CancelHiddenHandleTask
2018  * @tc.desc: test RestartHiddenHandleTask
2019  * @tc.type: FUNC
2020  */
2021 HWTEST_F(SelectOverlayManagerTestNg, CancelHiddenHandleTask, TestSize.Level1)
2022 {
2023     /**
2024      * @tc.steps: step1. CancelHiddenHandleTask
2025      */
2026     auto content = SelectContentOverlayManager(root_);
2027     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2028     content.SetHolder(holder);
2029     content.CancelHiddenHandleTask();
2030     EXPECT_FALSE(content.isIntercept_);
2031 }
2032 
2033 /**
2034  * @tc.name: GetSelectOverlayNode
2035  * @tc.desc: test GetSelectOverlayNode
2036  * @tc.type: FUNC
2037  */
2038 HWTEST_F(SelectOverlayManagerTestNg, GetSelectOverlayNode, TestSize.Level1)
2039 {
2040     /**
2041      * @tc.steps: step1. GetSelectOverlayNode
2042      */
2043     auto content = SelectContentOverlayManager(root_);
2044     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2045     content.SetHolder(holder);
2046     auto selectOverlayNode = content.GetSelectOverlayNode();
2047     EXPECT_EQ(selectOverlayNode, nullptr);
2048 }
2049 
2050 /**
2051  * @tc.name: GetShowMenuType
2052  * @tc.desc: test GetShowMenuType
2053  * @tc.type: FUNC
2054  */
2055 HWTEST_F(SelectOverlayManagerTestNg, GetShowMenuType, TestSize.Level1)
2056 {
2057     /**
2058      * @tc.steps: step1. GetShowMenuType
2059      */
2060     auto content = SelectContentOverlayManager(root_);
2061     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2062     content.SetHolder(holder);
2063     content.GetShowMenuType();
2064     EXPECT_FALSE(content.IsOpen());
2065 }
2066 
2067 /**
2068  * @tc.name: ContentHandleGlobalEvent
2069  * @tc.desc: test SelectContentOverlayManager HandleGlobalEvent
2070  * @tc.type: FUNC
2071  */
2072 HWTEST_F(SelectOverlayManagerTestNg, ContentHandleGlobalEvent, TestSize.Level1)
2073 {
2074     /**
2075      * @tc.steps: step1. HandleGlobalEvent
2076      */
2077     Init();
2078     auto content = SelectContentOverlayManager(root_);
2079     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2080     content.SetHolder(holder);
2081     TouchEvent touchPoint;
2082     content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
2083     EXPECT_NE(touchPoint.type, TouchType::DOWN);
2084     /**
2085      * @tc.steps: step2. Change the TouchEvent and call HandleGlobalEvent
2086      */
2087     touchPoint.type = TouchType::DOWN;
2088     content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
2089     EXPECT_NE(touchPoint.type, TouchType::UP);
2090 
2091     touchPoint.type = TouchType::UP;
2092     content.HandleGlobalEvent(touchPoint, ROOT_OFFSET);
2093     EXPECT_NE(touchPoint.type, TouchType::MOVE);
2094 }
2095 
2096 /**
2097  * @tc.name: IsTouchInSelectOverlayArea001
2098  * @tc.desc: test IsTouchInSelectOverlayArea
2099  * @tc.type: FUNC
2100  */
2101 HWTEST_F(SelectOverlayManagerTestNg, IsTouchInSelectOverlayArea001, TestSize.Level1)
2102 {
2103     /**
2104      * @tc.steps: step1. IsTouchInSelectOverlayArea
2105      */
2106     Init();
2107     auto content = SelectContentOverlayManager(root_);
2108     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2109     PointF point { 9.0f, 12.0f };
2110     content.SetHolder(holder);
2111     content.IsTouchInSelectOverlayArea(point);
2112     EXPECT_FALSE(content.IsOpen());
2113 }
2114 
2115 /**
2116  * @tc.name: IsTouchInSelectOverlayArea002
2117  * @tc.desc: test IsTouchInSelectOverlayArea
2118  * @tc.type: FUNC
2119  */
2120 HWTEST_F(SelectOverlayManagerTestNg, IsTouchInSelectOverlayArea002, TestSize.Level1)
2121 {
2122     /**
2123      * @tc.steps: step1. init SelectContentOverlayManager
2124      */
2125     Init();
2126     auto content = SelectContentOverlayManager(root_);
2127     SelectOverlayInfo selectInfo;
2128     selectInfo.enableHandleLevel = true;
2129     selectInfo.menuInfo.showCut = true;
2130     content.shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2131     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2132     PointF point { 9.0f, 12.0f };
2133     content.SetHolder(holder);
2134 
2135     /**
2136      * @tc.steps: step2. call IsTouchInSelectOverlayArea
2137      */
2138     content.IsTouchInSelectOverlayArea(point);
2139     EXPECT_FALSE(content.IsOpen());
2140 }
2141 
2142 /**
2143  * @tc.name: HandleSelectionEvent
2144  * @tc.desc: test HandleSelectionEvent
2145  * @tc.type: FUNC
2146  */
2147 HWTEST_F(SelectOverlayManagerTestNg, HandleSelectionEvent, TestSize.Level1)
2148 {
2149     /**
2150      * @tc.steps: step1. HandleSelectionEvent
2151      */
2152     Init();
2153     auto content = SelectContentOverlayManager(root_);
2154     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2155     PointF point { 9.0f, 12.0f };
2156     content.SetHolder(holder);
2157     TouchEvent touchPoint;
2158     touchPoint.type = TouchType::UP;
2159     content.HandleSelectionEvent(point, touchPoint);
2160     EXPECT_FALSE(content.IsOpen());
2161 }
2162 
2163 /**
2164  * @tc.name: ResetSelectionRect
2165  * @tc.desc: test ResetSelectionRect
2166  * @tc.type: FUNC
2167  */
2168 HWTEST_F(SelectOverlayManagerTestNg, ResetSelectionRect, TestSize.Level1)
2169 {
2170     /**
2171      * @tc.steps: step1. ResetSelectionRect
2172      */
2173     Init();
2174     auto content = SelectContentOverlayManager(root_);
2175     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2176     content.SetHolder(holder);
2177     HoldSelectionInfo holdSelectionInfo_;
2178     holdSelectionInfo_ = {};
2179     content.ResetSelectionRect();
2180     EXPECT_EQ(content.selectionHoldId_, -1);
2181 }
2182 
2183 /**
2184  * @tc.name: SetHoldSelectionCallback
2185  * @tc.desc: test SetHoldSelectionCallback
2186  * @tc.type: FUNC
2187  */
2188 HWTEST_F(SelectOverlayManagerTestNg, SetHoldSelectionCallback, TestSize.Level1)
2189 {
2190     /**
2191      * @tc.steps: step1. SetHoldSelectionCallback
2192      */
2193     Init();
2194     auto content = SelectContentOverlayManager(root_);
2195     int32_t id = -1;
2196     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2197     HoldSelectionInfo holdSelectionInfo_;
2198     holdSelectionInfo_ = {};
2199     content.SetHolder(holder);
2200     content.SetHoldSelectionCallback(id, holdSelectionInfo_);
2201     EXPECT_EQ(content.selectionHoldId_, -1);
2202     id = 1;
2203     content.SetHoldSelectionCallback(id, holdSelectionInfo_);
2204     EXPECT_EQ(content.selectionHoldId_, 1);
2205 }
2206 
2207 /**
2208  * @tc.name: RemoveHoldSelectionCallback
2209  * @tc.desc: test RemoveHoldSelectionCallback
2210  * @tc.type: FUNC
2211  */
2212 HWTEST_F(SelectOverlayManagerTestNg, RemoveHoldSelectionCallback, TestSize.Level1)
2213 {
2214     /**
2215      * @tc.steps: step1. RemoveHoldSelectionCallback
2216      */
2217     Init();
2218     auto content = SelectContentOverlayManager(root_);
2219     HoldSelectionInfo holdSelectionInfo_;
2220     holdSelectionInfo_ = {};
2221     int32_t id = -1;
2222     auto holder = AceType::MakeRefPtr<SelectOverlayHolder>();
2223     content.SetHolder(holder);
2224     content.RemoveHoldSelectionCallback(id);
2225     id = 1;
2226     content.RemoveHoldSelectionCallback(id);
2227     EXPECT_EQ(content.selectionHoldId_, -1);
2228 }
2229 
2230 /**
2231  * @tc.name: SwitchToHandleMode
2232  * @tc.desc: test SwitchToHandleMode
2233  * @tc.type: FUNC
2234  */
2235 HWTEST_F(SelectOverlayManagerTestNg, SwitchToHandleMode, TestSize.Level1)
2236 {
2237     /**
2238      * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2239      */
2240     Init();
2241     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2242     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2243     content->SetHolder(holder);
2244     content->Show(false, 0);
2245     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2246     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2247     /**
2248      * @tc.steps: step2. SwitchToHandleMode OVERLAY mode.
2249      */
2250     content->SwitchToHandleMode(HandleLevelMode::OVERLAY);
2251     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2252 
2253     /**
2254      * @tc.steps: step3. SwitchToHandleMode EMBED mode.
2255      */
2256     content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2257     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2258     holder->allowSwitchMode_ = true;
2259     holder->SetOwner(root_);
2260     content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2261     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2262 }
2263 
2264 /**
2265  * @tc.name: SwitchToHandleMode001
2266  * @tc.desc: test SwitchToHandleMode
2267  * @tc.type: FUNC
2268  */
2269 HWTEST_F(SelectOverlayManagerTestNg, SwitchToHandleMode001, TestSize.Level1)
2270 {
2271     /**
2272      * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2273      */
2274     Init();
2275     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2276     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2277     content->SetHolder(holder);
2278     content->Show(false, 0);
2279     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2280     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2281     holder->allowSwitchMode_ = true;
2282     holder->SetOwner(root_);
2283 
2284     /**
2285      * @tc.steps: step2. SwitchToHandleMode EMBED mode.
2286      */
2287     content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2288     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2289 
2290     /**
2291      * @tc.steps: step3. SwitchToHandleMode OVERLAY mode.
2292      */
2293     content->SwitchToHandleMode(HandleLevelMode::OVERLAY);
2294     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2295 }
2296 
2297 /**
2298  * @tc.name: SwitchToHandleMode002
2299  * @tc.desc: test SwitchToHandleMode
2300  * @tc.type: FUNC
2301  */
2302 HWTEST_F(SelectOverlayManagerTestNg, SwitchToHandleMode002, TestSize.Level1)
2303 {
2304     /**
2305      * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2306      */
2307     Init();
2308     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2309     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2310     content->SetHolder(holder);
2311     content->Show(false, 0);
2312     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2313     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2314     holder->allowSwitchMode_ = true;
2315     holder->SetOwner(root_);
2316 
2317     /**
2318      * @tc.steps: step2. Update enableHandleLevel
2319      */
2320     EXPECT_NE(content->shareOverlayInfo_, nullptr);
2321     content->shareOverlayInfo_->enableHandleLevel = false;
2322 
2323     /**
2324      * @tc.steps: step3. SwitchToHandleMode EMBED mode.
2325      */
2326     content->SwitchToHandleMode(HandleLevelMode::EMBED, false);
2327     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2328 
2329     /**
2330      * @tc.steps: step4. SwitchToHandleMode OVERLAY mode.
2331      */
2332     content->SwitchToHandleMode(HandleLevelMode::OVERLAY);
2333     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2334 }
2335 
2336 /**
2337  * @tc.name: ClickAndSwitchToHandleMode
2338  * @tc.desc: test click to switch overlay mode.
2339  * @tc.type: FUNC
2340  */
2341 HWTEST_F(SelectOverlayManagerTestNg, ClickAndSwitchToHandleMode, TestSize.Level1)
2342 {
2343     /**
2344      * @tc.steps: step1. Crate SelectContentOverlayManager and SelectOverlayHolder.
2345      */
2346     Init();
2347     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2348     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2349     content->SetHolder(holder);
2350     content->Show(false, 0);
2351     ASSERT_NE(content->handleNode_.Upgrade(), nullptr);
2352     ASSERT_NE(content->menuNode_.Upgrade(), nullptr);
2353     /**
2354      * @tc.steps: step2. SwitchToHandleMode EMBED mode.
2355      */
2356     content->SwitchToHandleMode(HandleLevelMode::EMBED);
2357     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::EMBED);
2358 
2359     /**
2360      * @tc.steps: step3. click handle to switch overlay mode.
2361      */
2362     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(content->menuNode_.Upgrade());
2363     ASSERT_NE(selectOverlayNode, nullptr);
2364     auto selectOverlayPattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2365     ASSERT_NE(selectOverlayPattern, nullptr);
2366     selectOverlayPattern->isFirstHandleTouchDown_ = true;
2367     selectOverlayPattern->isSecondHandleTouchDown_ = true;
2368     TouchEventInfo info("");
2369     TouchLocationInfo location(1);
2370     location.SetLocalLocation(Offset(0.0f, 0.0f));
2371     location.touchType_ = TouchType::UP;
2372     info.changedTouches_ = { location };
2373     auto pipeline = PipelineContext::GetCurrentContext();
2374     ASSERT_NE(pipeline, nullptr);
2375     auto overlayManager = pipeline->GetSelectOverlayManager();
2376     ASSERT_NE(overlayManager, nullptr);
2377     overlayManager->selectContentManager_ = content;
2378     holder->allowSwitchMode_ = true;
2379     selectOverlayPattern->HandleTouchEvent(info);
2380     EXPECT_EQ(holder->handleLevelMode_, HandleLevelMode::OVERLAY);
2381 }
2382 
2383 /**
2384  * @tc.name: CreateSelectOverlay03
2385  * @tc.desc: test CreateSelectOverlay
2386  * @tc.type: FUNC
2387  */
2388 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay03, TestSize.Level1)
2389 {
2390     /**
2391      * @tc.steps: step1. CreateSelectOverlay
2392      */
2393     Init();
2394     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2395     ASSERT_NE(content, nullptr);
2396     SelectOverlayInfo info;
2397     info.enableHandleLevel = false;
2398     info.enableSubWindowMenu = true;
2399     info.isUsingMouse = IS_USING_MOUSE;
2400     TextMenuOptions textMenuOptions_;
2401     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2402     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2403     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2404     bool animation = true;
2405     content->CreateSelectOverlay(info, animation);
2406     EXPECT_EQ(content->selectionHoldId_, -1);
2407 }
2408 
2409 /**
2410  * @tc.name: CreateSelectOverlay04
2411  * @tc.desc: test CreateSelectOverlay
2412  * @tc.type: FUNC
2413  */
2414 HWTEST_F(SelectOverlayManagerTestNg, CreateSelectOverlay04, TestSize.Level1)
2415 {
2416     /**
2417      * @tc.steps: step1. CreateSelectOverlay
2418      */
2419     Init();
2420     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2421     ASSERT_NE(content, nullptr);
2422     SelectOverlayInfo info;
2423     info.enableHandleLevel = true;
2424     info.enableSubWindowMenu = true;
2425     TextMenuOptions textMenuOptions_;
2426     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2427     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2428     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2429     bool animation = true;
2430     content->CreateSelectOverlay(info, animation);
2431     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2432     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2433 }
2434 
2435 /**
2436  * @tc.name: MountMenuNodeToSubWindow01
2437  * @tc.desc: test MountMenuNodeToSubWindow
2438  * @tc.type: FUNC
2439  */
2440 HWTEST_F(SelectOverlayManagerTestNg, MountMenuNodeToSubWindow01, TestSize.Level1)
2441 {
2442     /**
2443      * @tc.steps: step1. init SelectContentOverlayManager
2444      */
2445     Init();
2446     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2447     ASSERT_NE(content, nullptr);
2448     SelectOverlayInfo selectInfo;
2449     selectInfo.enableHandleLevel = true;
2450     selectInfo.enableSubWindowMenu = true;
2451     selectInfo.isUseOverlayNG = true;
2452     selectInfo.menuInfo.showCut = true;
2453     selectInfo.menuInfo.showCopy = true;
2454     TextMenuOptions textMenuOptions_;
2455     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2456     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2457     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2458 
2459     /**
2460      * @tc.steps: step2. CreateSelectOverlayNode
2461      */
2462     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2463     ASSERT_NE(content->shareOverlayInfo_, nullptr);
2464     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content->shareOverlayInfo_);
2465     ASSERT_NE(frameNode, nullptr);
2466     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2467     ASSERT_NE(selectOverlayNode, nullptr);
2468 
2469     /**
2470      * @tc.steps: step3. MountMenuNodeToSubWindow
2471      */
2472     bool animation = true;
2473     content->MountMenuNodeToSubWindow(selectOverlayNode, animation, NodeType::TOUCH_MENU);
2474     auto selectoverlayPattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2475     ASSERT_NE(selectoverlayPattern, nullptr);
2476     EXPECT_EQ(selectoverlayPattern->GetIsMenuShowInSubWindow(), false);
2477 }
2478 
2479 /**
2480  * @tc.name: IsEnableSubWindowMenu01
2481  * @tc.desc: test IsEnableSubWindowMenu
2482  * @tc.type: FUNC
2483  */
2484 HWTEST_F(SelectOverlayManagerTestNg, IsEnableSubWindowMenu01, TestSize.Level1)
2485 {
2486     Init();
2487     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2488     ASSERT_NE(content, nullptr);
2489     SelectOverlayInfo info;
2490     info.enableHandleLevel = true;
2491     info.enableSubWindowMenu = true;
2492     TextMenuOptions textMenuOptions_;
2493     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2494     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2495     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2496     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2497     EXPECT_EQ(content->IsEnableSubWindowMenu(), false);
2498 }
2499 
2500 /**
2501  * @tc.name: IsEnableSubWindowMenu02
2502  * @tc.desc: test IsEnableSubWindowMenu
2503  * @tc.type: FUNC
2504  */
2505 HWTEST_F(SelectOverlayManagerTestNg, IsEnableSubWindowMenu02, TestSize.Level1)
2506 {
2507     Init();
2508     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2509     ASSERT_NE(content, nullptr);
2510     SelectOverlayInfo info;
2511     info.enableHandleLevel = true;
2512     info.enableSubWindowMenu = true;
2513     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::DEFAULT);
2514     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2515     EXPECT_EQ(content->IsEnableSubWindowMenu(), false);
2516 }
2517 
2518 /**
2519  * @tc.name: IsRightClickSubWindowMenu01
2520  * @tc.desc: test IsRightClickSubWindowMenu
2521  * @tc.type: FUNC
2522  */
2523 HWTEST_F(SelectOverlayManagerTestNg, IsRightClickSubWindowMenu01, TestSize.Level1)
2524 {
2525     /**
2526      * @tc.steps: step1. init SelectContentOverlayManager
2527      */
2528     Init();
2529     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2530     ASSERT_NE(content, nullptr);
2531     SelectOverlayInfo info;
2532     info.enableHandleLevel = false;
2533     info.enableSubWindowMenu = true;
2534     info.isUsingMouse = IS_USING_MOUSE;
2535     info.isUseOverlayNG = true;
2536     TextMenuOptions textMenuOptions_;
2537     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2538     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2539     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2540     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(info);
2541     ASSERT_NE(content->shareOverlayInfo_, nullptr);
2542 
2543     auto wrapperNode_ = FrameNode::CreateFrameNode(V2::MENU_WRAPPER_ETS_TAG,
2544         ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<MenuWrapperPattern>(1));
2545     ASSERT_NE(wrapperNode_, nullptr);
2546     content->selectOverlayNode_ = wrapperNode_;
2547     auto selectoverlayNode = content->selectOverlayNode_.Upgrade();
2548     ASSERT_NE(selectoverlayNode, nullptr);
2549 
2550     /**
2551      * @tc.steps: step2. Update menunode menuWrapperPattern
2552      */
2553     auto menuWrapperPattern = selectoverlayNode->GetPattern<MenuWrapperPattern>();
2554     ASSERT_NE(menuWrapperPattern, nullptr);
2555     menuWrapperPattern->SetIsSelectOverlaySubWindowWrapper(true);
2556     EXPECT_EQ(menuWrapperPattern->GetIsSelectOverlaySubWindowWrapper(), true);
2557     EXPECT_EQ(content->IsRightClickSubWindowMenu(), true);
2558 }
2559 
2560 /**
2561  * @tc.name: IsRightClickSubWindowMenu02
2562  * @tc.desc: test IsRightClickSubWindowMenu
2563  * @tc.type: FUNC
2564  */
2565 HWTEST_F(SelectOverlayManagerTestNg, IsRightClickSubWindowMenu02, TestSize.Level1)
2566 {
2567     /**
2568      * @tc.steps: step1. CreateSelectOverlay
2569      */
2570     Init();
2571     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2572     ASSERT_NE(content, nullptr);
2573     SelectOverlayInfo info;
2574     info.enableHandleLevel = false;
2575     info.enableSubWindowMenu = true;
2576     info.isUsingMouse = IS_USING_MOUSE;
2577     TextMenuOptions textMenuOptions_;
2578     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2579     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2580     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2581     bool animation = true;
2582     content->CreateSelectOverlay(info, animation);
2583     EXPECT_EQ(content->IsRightClickSubWindowMenu(), false);
2584 }
2585 
2586 /**
2587  * @tc.name: IsSelectOverlaySubWindowMenu01
2588  * @tc.desc: test IsSelectOverlaySubWindowMenu
2589  * @tc.type: FUNC
2590  */
2591 HWTEST_F(SelectOverlayManagerTestNg, IsSelectOverlaySubWindowMenu01, TestSize.Level1)
2592 {
2593     /**
2594      * @tc.steps: step1. CreateSelectOverlay
2595      */
2596     Init();
2597     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2598     ASSERT_NE(content, nullptr);
2599     SelectOverlayInfo info;
2600     info.enableHandleLevel = true;
2601     info.enableSubWindowMenu = true;
2602     info.isUseOverlayNG = true;
2603     TextMenuOptions textMenuOptions_;
2604     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2605     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2606     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2607     bool animation = true;
2608     content->CreateSelectOverlay(info, animation);
2609     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2610     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2611 
2612     /**
2613      * @tc.steps: step2. Update menunode selectOverlayPattern
2614      */
2615     RefPtr<Pattern> pattern = content->GetMenuPattern();
2616     ASSERT_NE(pattern, nullptr);
2617     auto selectOverlayPattern = AceType::DynamicCast<SelectOverlayPattern>(pattern);
2618     ASSERT_NE(selectOverlayPattern, nullptr);
2619     selectOverlayPattern->SetIsMenuShowInSubWindow(true);
2620     EXPECT_EQ(selectOverlayPattern->GetIsMenuShowInSubWindow(), true);
2621     EXPECT_EQ(content->IsSelectOverlaySubWindowMenu(), true);
2622 }
2623 
2624 /**
2625  * @tc.name: IsSelectOverlaySubWindowMenu02
2626  * @tc.desc: test IsSelectOverlaySubWindowMenu
2627  * @tc.type: FUNC
2628  */
2629 HWTEST_F(SelectOverlayManagerTestNg, IsSelectOverlaySubWindowMenu02, TestSize.Level1)
2630 {
2631     /**
2632      * @tc.steps: step1. CreateSelectOverlay
2633      */
2634     Init();
2635     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2636     ASSERT_NE(content, nullptr);
2637     SelectOverlayInfo info;
2638     info.enableHandleLevel = true;
2639     info.enableSubWindowMenu = true;
2640     info.isUseOverlayNG = true;
2641     TextMenuOptions textMenuOptions_;
2642     textMenuOptions_.showMode = TextMenuShowMode::PREFER_WINDOW;
2643     selectOverlayManager_->SetTextMenuOptions(textMenuOptions_);
2644     EXPECT_EQ(selectOverlayManager_->GetMenuShowMode(), TextMenuShowMode::PREFER_WINDOW);
2645     bool animation = true;
2646     content->CreateSelectOverlay(info, animation);
2647     EXPECT_EQ(content->IsSelectOverlaySubWindowMenu(), false);
2648 }
2649 
2650 /**
2651  * @tc.name: DisableMenu001
2652  * @tc.desc: test select_content_overlay_manager.cpp DisableMenu
2653  * @tc.type: FUNC
2654  */
2655 HWTEST_F(SelectOverlayManagerTestNg, DisableMenu001, TestSize.Level1)
2656 {
2657     /**
2658      * @tc.steps: step1. init SelectContentOverlayManager
2659      */
2660     Init();
2661     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2662     ASSERT_NE(content, nullptr);
2663     SelectOverlayInfo selectInfo;
2664     selectInfo.enableHandleLevel = true;
2665     selectInfo.menuInfo.showCut = true;
2666     selectInfo.isUseOverlayNG = true;
2667 
2668     /**
2669      * @tc.steps: step2. CreateSelectOverlayNode
2670      */
2671     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2672     ASSERT_NE(content->shareOverlayInfo_, nullptr);
2673     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content->shareOverlayInfo_);
2674     ASSERT_NE(frameNode, nullptr);
2675     content->menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
2676     ASSERT_NE(content->menuNode_.Upgrade(), nullptr);
2677 
2678     /**
2679      * @tc.steps: step3. call DisableMenu
2680      */
2681     content->DisableMenu();
2682     auto selectOverlayPattern = frameNode->GetPattern<SelectOverlayPattern>();
2683     ASSERT_NE(selectOverlayPattern, nullptr);
2684     EXPECT_TRUE(selectOverlayPattern->info_->menuInfo.menuDisable);
2685 }
2686 
2687 /**
2688  * @tc.name: EnableMenu001
2689  * @tc.desc: test select_content_overlay_manager.cpp EnableMenu
2690  * @tc.type: FUNC
2691  */
2692 HWTEST_F(SelectOverlayManagerTestNg, EnableMenu001, TestSize.Level1)
2693 {
2694     /**
2695      * @tc.steps: step1. init SelectContentOverlayManager
2696      */
2697     Init();
2698     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2699     ASSERT_NE(content, nullptr);
2700     SelectOverlayInfo selectInfo;
2701     selectInfo.enableHandleLevel = true;
2702     selectInfo.menuInfo.showCut = true;
2703     selectInfo.isUseOverlayNG = true;
2704 
2705     /**
2706      * @tc.steps: step2. CreateSelectOverlayNode
2707      */
2708     content->shareOverlayInfo_ = std::make_shared<SelectOverlayInfo>(selectInfo);
2709     ASSERT_NE(content->shareOverlayInfo_, nullptr);
2710     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(content->shareOverlayInfo_);
2711     ASSERT_NE(frameNode, nullptr);
2712     content->menuNode_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
2713     ASSERT_NE(content->menuNode_.Upgrade(), nullptr);
2714 
2715     /**
2716      * @tc.steps: step3. call EnableMenu
2717      */
2718     content->EnableMenu();
2719     auto selectOverlayPattern = frameNode->GetPattern<SelectOverlayPattern>();
2720     ASSERT_NE(selectOverlayPattern, nullptr);
2721     EXPECT_FALSE(selectOverlayPattern->info_->menuInfo.menuDisable);
2722 }
2723 
2724 /**
2725  * @tc.name: HideHandle001
2726  * @tc.desc: test select_content_overlay_manager.cpp HideHandle
2727  * @tc.type: FUNC
2728  */
2729 HWTEST_F(SelectOverlayManagerTestNg, HideHandle001, TestSize.Level1)
2730 {
2731     Init();
2732     auto content = AceType::MakeRefPtr<SelectContentOverlayManager>(root_);
2733     auto holder = AceType::MakeRefPtr<MockSelectOverlayHolder>();
2734     content->SetHolder(holder);
2735     content->Show(false, 0);
2736     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2737     EXPECT_NE(content->menuNode_.Upgrade(), nullptr);
2738     content->HideHandle();
2739     EXPECT_NE(content->handleNode_.Upgrade(), nullptr);
2740 }
2741 } // namespace OHOS::Ace::NG
2742