• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <vector>
16 
17 #include "gtest/gtest.h"
18 #include "gtest/internal/gtest-internal.h"
19 
20 #define protected public
21 #define private public
22 
23 #include "test/mock/base/mock_task_executor.h"
24 #include "test/mock/core/common/mock_container.h"
25 #include "test/mock/core/common/mock_theme_manager.h"
26 #include "test/mock/core/pipeline/mock_pipeline_context.h"
27 #include "test/mock/core/rosen/mock_canvas.h"
28 
29 #include "base/geometry/dimension_rect.h"
30 #include "base/geometry/ng/offset_t.h"
31 #include "base/geometry/ng/rect_t.h"
32 #include "base/geometry/ng/size_t.h"
33 #include "base/memory/referenced.h"
34 #include "core/components/common/layout/constants.h"
35 #include "core/components/select/select_theme.h"
36 #include "core/components/text_overlay/text_overlay_theme.h"
37 #include "core/components/theme/theme.h"
38 #include "core/components_ng/base/frame_node.h"
39 #include "core/components_ng/base/modifier.h"
40 #include "core/components_ng/layout/layout_property.h"
41 #include "core/components_ng/pattern/button/button_pattern.h"
42 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
43 #include "core/components_ng/pattern/menu/menu_layout_property.h"
44 #include "core/components_ng/pattern/menu/menu_pattern.h"
45 #include "core/components_ng/pattern/menu/menu_theme.h"
46 #include "core/components_ng/pattern/select_overlay/select_overlay_node.h"
47 #include "core/components_ng/pattern/select_overlay/select_overlay_pattern.h"
48 #include "core/components_ng/pattern/select_overlay/select_overlay_property.h"
49 #include "core/pipeline/base/constants.h"
50 
51 using namespace testing;
52 using namespace testing::ext;
53 
54 namespace OHOS::Ace::NG {
55 namespace {
56 const std::string TEST_TAG = "Test";
57 constexpr int32_t NODE_ID = 143;
58 constexpr int32_t NODE_ID2 = 153;
59 constexpr int32_t NODE_ID3 = 10;
60 const RectF FIRST_HANDLE_REGION(0, 0, 10, 10);
61 const RectF SECOND_HANDLE_REGION(10, 10, 10, 10);
62 const RectF SECOND_HANDLE_REGION2(20, 20, 10, 10);
63 const float FIRST_ITEM_WIDTH = 150.0f;
64 const float FIRST_ITEM_HEIGHT = 75.0f;
65 const SizeF FIRST_ITEM_SIZE(FIRST_ITEM_WIDTH, FIRST_ITEM_HEIGHT);
66 const Color COLOR_ALPHA_MASK = Color::FromRGB(255, 100, 100);
67 constexpr MenuType TYPE = MenuType::MENU;
68 const OffsetF offset(10, 10);
69 int32_t callBackFlag = 0;
70 constexpr float RK356_HEIGHT = 1136.0f;
71 const OffsetF OFFSET_ITEM1 = OffsetF(5, 5);
72 const Rect WINDOW_RECT(0, 0, 280, 1280);
73 constexpr Dimension OVERLAY_MAX_WIDTH = 280.0_vp;
74 } // namespace
75 
76 class SelectOverlayTestNg : public testing::Test {
77 public:
78     static void SetUpTestCase();
79     static void TearDownTestCase();
80 
81 protected:
82     std::vector<MenuOptionsParam> GetMenuOptionItems();
83     DrawingContext GetDrawingContext(Testing::MockCanvas& canvas);
84 };
85 
SetUpTestCase()86 void SelectOverlayTestNg::SetUpTestCase()
87 {
88     MockPipelineContext::SetUp();
89     // set SelectTheme to themeManager before using themeManager to get SelectTheme
90     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
91     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
92     auto selectTheme = AceType::MakeRefPtr<SelectTheme>();
93     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(selectTheme));
94 }
95 
TearDownTestCase()96 void SelectOverlayTestNg::TearDownTestCase()
97 {
98     MockPipelineContext::TearDown();
99     MockContainer::TearDown();
100 }
101 
GetMenuOptionItems()102 std::vector<MenuOptionsParam> SelectOverlayTestNg::GetMenuOptionItems()
103 {
104     std::vector<MenuOptionsParam> menuOptionItems;
105     MenuOptionsParam menuOptionItem1;
106     menuOptionItem1.content = "test1";
107     menuOptionItem1.action = [](const std::string&) {};
108     MenuOptionsParam menuOptionItem2;
109     menuOptionItem2.content = "test2";
110     menuOptionItem2.action = [](const std::string&) {};
111     menuOptionItems.emplace_back(menuOptionItem1);
112     menuOptionItems.emplace_back(menuOptionItem2);
113     return menuOptionItems;
114 }
115 
GetDrawingContext(Testing::MockCanvas & canvas)116 DrawingContext SelectOverlayTestNg::GetDrawingContext(Testing::MockCanvas& canvas)
117 {
118     DrawingContext context { canvas, 100, 100 };
119     EXPECT_CALL(canvas, Save()).Times(AnyNumber());
120     EXPECT_CALL(canvas, DrawLine(_, _)).Times(AnyNumber());
121     EXPECT_CALL(canvas, AttachBrush(_)).WillRepeatedly(ReturnRef(canvas));
122     EXPECT_CALL(canvas, DetachBrush()).WillRepeatedly(ReturnRef(canvas));
123     EXPECT_CALL(canvas, Rotate(_, _, _)).Times(AnyNumber());
124     EXPECT_CALL(canvas, AttachPen(_)).WillRepeatedly(ReturnRef(canvas));
125     EXPECT_CALL(canvas, DetachPen()).WillRepeatedly(ReturnRef(canvas));
126     EXPECT_CALL(canvas, DrawCircle(_, _)).Times(AnyNumber());
127     EXPECT_CALL(canvas, Translate(_, _)).Times(AnyNumber());
128     EXPECT_CALL(canvas, Restore()).Times(AnyNumber());
129     EXPECT_CALL(canvas, ClipRect(_, _, _)).WillRepeatedly(Return());
130     return context;
131 }
132 
133 /**
134  * @tc.name: SelectFrameNodeCreator002
135  * @tc.desc: Test CreateSelectOverlayNode
136  * @tc.type: FUNC
137  */
138 HWTEST_F(SelectOverlayTestNg, SelectFrameNodeCreator002, TestSize.Level1)
139 {
140     /**
141      * @tc.steps: step1. Create selectOverlayNode with camera input.
142      * @tc.expected: the selectOverlayNode including selectMenu with camera input is created successfully.
143      */
144     SelectOverlayInfo selectInfo;
145     selectInfo.menuInfo.menuIsShow = true;
146     selectInfo.menuInfo.showCameraInput = true;
147     selectInfo.menuOptionItems = GetMenuOptionItems();
148     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
149     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
150     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
151     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
152     EXPECT_NE(selectOverlayNode->selectMenuInner_, nullptr);
153 }
154 
155 /**
156  * @tc.name: SelectFrameNodeAnimationTest001
157  * @tc.desc: Test MoreAnimation and BackAnimation.
158  * @tc.type: FUNC
159  */
160 HWTEST_F(SelectOverlayTestNg, SelectFrameNodeAnimationTest001, TestSize.Level1)
161 {
162     /**
163      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
164      */
165     SelectOverlayInfo selectInfo;
166     selectInfo.menuInfo.menuDisable = true;
167     selectInfo.menuInfo.showCut = false;
168     selectInfo.menuInfo.showPaste = false;
169     auto menuOptionItems = GetMenuOptionItems();
170     selectInfo.menuOptionItems = menuOptionItems;
171     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
172     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
173     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
174     EXPECT_NE(selectOverlayNode, nullptr);
175     /**
176      * @tc.steps: step2. Create default menu and extension menu .
177      * @tc.expected: The default menu and extended menu are created successfully.
178      */
179     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
180     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
181     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
182     selectOverlayNode->CreateToolBar();
183     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
184     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f0402() 185         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
186     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
187     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
188     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
189     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
190     EXPECT_NE(selectOverlayNode->extensionMenu_, nullptr);
191     /**
192      * @tc.steps: step3. Execute MoreAnimation.
193      * @tc.expected: The node state switches correctly.
194      */
195     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
196     EXPECT_NE(pattern, nullptr);
197     pattern->CreateNodePaintMethod();
198     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
199     selectOverlayNode->MoreOrBackAnimation(true);
200     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
201     /**
202      * @tc.steps: step4. Execute BackAnimation.
203      * @tc.expected: The node state switches correctly.
204      */
205     selectOverlayNode->isDoingAnimation_ = false;
206     selectOverlayNode->MoreOrBackAnimation(false);
207     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
208 }
209 /**
210  * @tc.name: OnAttachToFrameNode001
211  * @tc.desc: Test SelectOverlayPattern OnAttachToFrameNode.
212  * @tc.type: FUNC
213  */
214 HWTEST_F(SelectOverlayTestNg, OnAttachToFrameNode001, TestSize.Level1)
215 {
216     /**
217      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
218      */
219     SelectOverlayInfo selectInfo;
220     selectInfo.menuOptionItems = GetMenuOptionItems();
221     selectInfo.singleLineHeight = NODE_ID;
222     selectInfo.isSingleHandle = true;
223     bool isShow[2] = { false, true };
224     for (int turn = 0; turn < 2; turn++) {
225         selectInfo.firstHandle.isShow = isShow[turn];
226         auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
227         MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
228         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
229         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
230         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
231         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
232         ASSERT_NE(selectOverlayNode, nullptr);
233         /**
234          * @tc.steps: step2. Create pattern.
235          */
236         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
237         ASSERT_NE(pattern, nullptr);
238         /**
239          * @tc.steps: step3. call OnAttachToFrameNode function.
240          * @tc.expected: the function exits normally.
241          */
242         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
243         ASSERT_NE(pattern->info_, nullptr);
244         pattern->info_->isHandleLineShow = isShow[turn];
245         pattern->OnAttachToFrameNode();
246         EXPECT_NE(pattern->GetSelectOverlayInfo(), nullptr);
247     }
248 }
249 /**
250  * @tc.name: UpdateSelectHandleInfo001
251  * @tc.desc: Test SelectOverlayPattern UpdateSelectHandleInfo.
252  * @tc.type: FUNC
253  */
254 HWTEST_F(SelectOverlayTestNg, UpdateSelectHandleInfo001, TestSize.Level1)
255 {
256     /**
257      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
258      */
259     SelectOverlayInfo selectInfo;
260     selectInfo.menuOptionItems = GetMenuOptionItems();
261     selectInfo.singleLineHeight = NODE_ID;
262     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
263     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
264     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
265     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
266     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
267     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
268     ASSERT_NE(selectOverlayNode, nullptr);
269     /**
270      * @tc.steps: step2. Create pattern.
271      */
272     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
273     ASSERT_NE(pattern, nullptr);
274     /**
275      * @tc.steps: step3. call UpdateHandleInfo functions without changing HandleInfo.
276      * @tc.expected: The branch of function runs correctly
277      */
278     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
279     pattern->UpdateFirstSelectHandleInfo(selectInfo.firstHandle);
280     pattern->UpdateSecondSelectHandleInfo(selectInfo.secondHandle);
281     pattern->UpdateFirstAndSecondHandleInfo(selectInfo.firstHandle, selectInfo.secondHandle);
282     EXPECT_EQ(pattern->info_->firstHandle, selectInfo.firstHandle);
283     EXPECT_EQ(pattern->info_->secondHandle, selectInfo.secondHandle);
284 }
285 /**
286  * @tc.name: UpdateSelectHandleInfo002
287  * @tc.desc: Test SelectOverlayPattern UpdateSelectHandleInfo.
288  * @tc.type: FUNC
289  */
290 HWTEST_F(SelectOverlayTestNg, UpdateSelectHandleInfo002, TestSize.Level1)
291 {
292     /**
293      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
294      */
295     SelectOverlayInfo selectInfo;
296     selectInfo.menuOptionItems = GetMenuOptionItems();
297     selectInfo.singleLineHeight = NODE_ID;
298     bool handleReverse[2] = { false, true };
299     for (int turn = 0; turn < 2; turn++) {
300         selectInfo.handleReverse = handleReverse[turn];
301         auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
302         MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
303         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
304         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
305         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
306         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
307         ASSERT_NE(selectOverlayNode, nullptr);
308         /**
309          * @tc.steps: step2. Create pattern.
310          */
311         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
312         ASSERT_NE(pattern, nullptr);
313         /**
314          * @tc.steps: step3. call UpdateHandleInfo functions with changing HandleInfo.
315          * @tc.expected: The branch of function runs correctly
316          */
317         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
318         SelectOverlayInfo selectInfo2;
319         selectInfo2.singleLineHeight = NODE_ID2;
320         selectInfo2.firstHandle.isShow = false;
321         selectInfo2.secondHandle.isShow = false;
322         SelectOverlayInfo selectInfo3;
323         selectInfo3.singleLineHeight = NODE_ID3;
324         pattern->UpdateFirstSelectHandleInfo(selectInfo2.firstHandle);
325         pattern->UpdateSecondSelectHandleInfo(selectInfo2.secondHandle);
326         pattern->UpdateFirstAndSecondHandleInfo(selectInfo3.firstHandle, selectInfo3.secondHandle);
327     }
328 }
329 /**
330  * @tc.name: OnDirtyLayoutWrapperSwap001
331  * @tc.desc: Test SelectOverlayPattern OnDirtyLayoutWrapperSwap.
332  * @tc.type: FUNC
333  */
334 HWTEST_F(SelectOverlayTestNg, OnDirtyLayoutWrapperSwap001, TestSize.Level1)
335 {
336     /**
337      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
338      */
339     SelectOverlayInfo selectInfo;
340     selectInfo.menuOptionItems = GetMenuOptionItems();
341     selectInfo.singleLineHeight = NODE_ID;
342     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
343     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
344     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
345     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
346     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
347     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
348     ASSERT_NE(selectOverlayNode, nullptr);
349     /**
350      * @tc.steps: step2. Create pattern and geometryNode.
351      */
352     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
353     ASSERT_NE(pattern, nullptr);
354     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
355     /**
356      * @tc.steps: step2. Call OnDirtyLayoutWrapperSwap function.
357      * @tc.expected: return false
358      */
359     auto layoutWrapper =
360         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
361     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
362     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
363     layoutWrapper->SetLayoutAlgorithm(
364         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
365 
366     DirtySwapConfig config;
367     config.skipMeasure = true;
368     EXPECT_FALSE(pattern->OnDirtyLayoutWrapperSwap(layoutWrapper, config));
369 
370     layoutWrapper->skipMeasureContent_ = false;
371     config.skipMeasure = false;
372     EXPECT_TRUE(pattern->OnDirtyLayoutWrapperSwap(layoutWrapper, config));
373 }
374 /**
375  * @tc.name: UpdateShowArea001
376  * @tc.desc: Test SelectOverlayPattern UpdateShowArea.
377  * @tc.type: FUNC
378  */
379 HWTEST_F(SelectOverlayTestNg, UpdateShowArea001, TestSize.Level1)
380 {
381     /**
382      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
383      */
384     SelectOverlayInfo selectInfo;
385     selectInfo.menuOptionItems = GetMenuOptionItems();
386     selectInfo.singleLineHeight = NODE_ID;
387     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
388     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
389     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
390     ASSERT_NE(selectOverlayNode, nullptr);
391     /**
392      * @tc.steps: step2. Create pattern
393      */
394     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
395     ASSERT_NE(pattern, nullptr);
396     /**
397      * @tc.steps: step3. Call UpdateShowArea
398      * @tc.expected: the function exits normally
399      */
400     RectF area;
401     pattern->UpdateShowArea(area);
402     EXPECT_NE(pattern->GetSelectOverlayInfo(), nullptr);
403 
404     area = RectF(1, 1, 1, 1);
405     pattern->UpdateShowArea(area);
406     EXPECT_NE(pattern->GetSelectOverlayInfo(), nullptr);
407 }
408 
409 /**
410  * @tc.name: HandleOperator001
411  * @tc.desc: Test SelectOverlayPattern HandleOperator.
412  * @tc.type: FUNC
413  */
414 HWTEST_F(SelectOverlayTestNg, HandleOperator001, TestSize.Level1)
415 {
416     /**
417      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
418      */
419     SelectOverlayInfo selectInfo;
420     selectInfo.singleLineHeight = NODE_ID;
421     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
422     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
423     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
424     ASSERT_NE(selectOverlayNode, nullptr);
425     /**
426      * @tc.steps: step2. Create pattern
427      */
428     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
429     ASSERT_NE(pattern, nullptr);
430     /**
431      * @tc.steps: step3. Construct GestureEvent and Call UpdateShowArea
432      * @tc.expected: the function exits normally
433      */
434     GestureEvent info;
435     info.localLocation_ = Offset(1, 1);
436     pattern->HandleOnClick(info);
437     EXPECT_FALSE(pattern->GetSelectOverlayInfo()->isSingleHandle);
438     pattern->HandlePanEnd(info);
439     EXPECT_FALSE(pattern->GetSelectOverlayInfo()->isSingleHandle);
440     infoPtr->menuInfo.menuIsShow = true;
441     pattern->firstHandleDrag_ = true;
442     callBackFlag = 0;
__anon0c486c3f0502(const RectF& tmp, bool isFirst) 443     infoPtr->onHandleMoveDone = [&](const RectF& tmp, bool isFirst) {
444         callBackFlag = 1;
445     };
446     pattern->HandlePanEnd(info);
447     EXPECT_EQ(callBackFlag, 1);
448     pattern->firstHandleDrag_ = false;
449     pattern->secondHandleDrag_ = true;
450 
451     callBackFlag = 0;
452     pattern->HandlePanEnd(info);
453     EXPECT_EQ(callBackFlag, 1);
454 
455     /**
456      * @tc.steps: step4. Menu is not show, call HandleOnClick
457      * @tc.expected: menuIsShow is true.
458      */
459     ASSERT_NE(pattern->info_, nullptr);
460     pattern->info_->isSingleHandle = true;
461     pattern->info_->isHandleLineShow = false;
462     pattern->info_->menuInfo.menuIsShow = false;
463     pattern->HandleOnClick(info);
464     EXPECT_TRUE(pattern->info_->menuInfo.menuIsShow);
465 }
466 
467 /**
468  * @tc.name: HandleOperator002
469  * @tc.desc: Test SelectOverlayPattern HandleOperator.
470  * @tc.type: FUNC
471  */
472 HWTEST_F(SelectOverlayTestNg, HandleOperator002, TestSize.Level1)
473 {
474     /**
475      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
476      */
477     SelectOverlayInfo selectInfo;
478     selectInfo.singleLineHeight = NODE_ID;
479     selectInfo.isSingleHandle = true;
480     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
481     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
482     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
483     ASSERT_NE(selectOverlayNode, nullptr);
484     /**
485      * @tc.steps: step2. Create pattern and initialize HandleRegion
486      */
487     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
488     ASSERT_NE(pattern, nullptr);
489     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
490     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
491     /**
492      * @tc.steps: step3. Construct GestureEvent and Call HandleOperator functions in firstHandleRegion.
493      * @tc.expected: the function runs rightly
494      */
495     GestureEvent info;
496     info.localLocation_ = Offset(1, 1);
497     pattern->HandleOnClick(info);
498     EXPECT_TRUE(pattern->GetSelectOverlayInfo()->menuInfo.menuIsShow);
499     pattern->isFirstHandleTouchDown_ = true;
500     pattern->HandlePanStart(info);
501     EXPECT_TRUE(pattern->firstHandleDrag_);
502     const auto& offset = OffsetF(info.GetDelta().GetX(), info.GetDelta().GetY());
503     auto firstHandlePaintRect = pattern->GetSelectOverlayInfo()->firstHandle.paintRect + offset;
504     pattern->HandlePanMove(info);
505     auto firstHandlePaintRect2 = pattern->GetSelectOverlayInfo()->secondHandle.paintRect;
506     EXPECT_EQ(firstHandlePaintRect.GetX(), firstHandlePaintRect2.GetX());
507     pattern->HandlePanEnd(info);
508     EXPECT_FALSE(pattern->firstHandleDrag_);
509     /**
510      * @tc.steps: step4. Construct GestureEvent and Call HandleOperator functions in secondHandleRegion.
511      * @tc.expected: the function runs rightly
512      */
513     GestureEvent info2;
514     info2.localLocation_ = Offset(11, 11);
515     ASSERT_NE(pattern->info_, nullptr);
516     pattern->info_->isHandleLineShow = false;
517     pattern->isSecondHandleTouchDown_ = true;
518     pattern->HandlePanStart(info2);
519     EXPECT_TRUE(pattern->secondHandleDrag_);
520     const auto& offset2 = OffsetF(info2.GetDelta().GetX(), info2.GetDelta().GetY());
521     auto secondHandlePaintRect = pattern->GetSelectOverlayInfo()->secondHandle.paintRect + offset2;
522     pattern->HandlePanMove(info2);
523     auto secondHandlePaintRect2 = pattern->GetSelectOverlayInfo()->secondHandle.paintRect;
524     EXPECT_EQ(secondHandlePaintRect.GetX(), secondHandlePaintRect2.GetX());
525     pattern->HandlePanEnd(info2);
526     EXPECT_FALSE(pattern->secondHandleDrag_);
527     /**
528      * @tc.steps: step5. Construct GestureEvent and Call HandleOperator functions which is not in handleRegion.
529      * @tc.expected: the function runs rightly
530      */
531     GestureEvent info3;
532     info3.localLocation_ = Offset(21, 21);
533     pattern->info_->isSingleHandle = false;
534     pattern->HandlePanStart(info3);
535     pattern->HandlePanMove(info3);
536     EXPECT_FALSE(pattern->firstHandleDrag_);
537     EXPECT_FALSE(pattern->secondHandleDrag_);
538 
539     // in first region
540     GestureEvent info4;
541     info4.localLocation_ = Offset(1, 1);
542     pattern->info_->isSingleHandle = false;
543     callBackFlag = 0;
__anon0c486c3f0602(const GestureEvent& event, bool isFirst) 544     pattern->info_->onHandleMoveStart = [&](const GestureEvent& event, bool isFirst) {
545         callBackFlag = 1;
546     };
547     pattern->isFirstHandleTouchDown_ = true;
548     pattern->HandlePanStart(info4);
549     EXPECT_EQ(callBackFlag, 1);
550 
551     // not in first region and in second region
552     info4.localLocation_ = Offset(11, 11);
553     callBackFlag = 0;
554     pattern->isSecondHandleTouchDown_ = true;
555     pattern->HandlePanStart(info4);
556     EXPECT_EQ(callBackFlag, 1);
557 
558     // not in neither region
559     info4.localLocation_ = Offset(21, 21);
560     callBackFlag = 0;
561     pattern->info_->menuInfo.menuIsShow = false;
562 
563     for (int i = 0; i < 4; ++i) {
564         pattern->info_->isSingleHandle = i & 1;
565         pattern->info_->isHandleLineShow = i >> 1 & 1;
566         callBackFlag = 0;
567         pattern->HandlePanStart(info4);
568         EXPECT_EQ(callBackFlag, 0);
569     }
570 }
571 
572 /**
573  * @tc.name: HandleOperator003
574  * @tc.desc: Test SelectOverlayPattern HandleOperator.
575  * @tc.type: FUNC
576  */
577 HWTEST_F(SelectOverlayTestNg, HandleOperator003, TestSize.Level1)
578 {
579     /**
580      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
581      */
582     SelectOverlayInfo selectInfo;
583     selectInfo.singleLineHeight = NODE_ID;
584     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
585     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
586     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
587     ASSERT_NE(selectOverlayNode, nullptr);
588     /**
589      * @tc.steps: step2. Create pattern
590      */
591     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
592     ASSERT_NE(pattern, nullptr);
593     /**
594      * @tc.steps: step3. Construct TouchEventInfo and Call HandleTouchEvent function.
595      * @tc.expected: check whether the function is executed.
596      */
597     TouchEventInfo touchInfo("touchDown");
__anon0c486c3f0702(const TouchEventInfo& info) 598     infoPtr->onTouchDown = [](const TouchEventInfo& info) {
599         callBackFlag = 1;
600         return ;
601     };
__anon0c486c3f0802(const TouchEventInfo& info) 602     infoPtr->onTouchUp = [](const TouchEventInfo& info) {
603         callBackFlag = 2;
604         return ;
605     };
606     TouchLocationInfo touchLocationInfo(1);
607     touchLocationInfo.SetTouchType(TouchType::DOWN);
608     touchInfo.AddChangedTouchLocationInfo(std::move(touchLocationInfo));
609     pattern->HandleTouchEvent(touchInfo);
610     EXPECT_EQ(callBackFlag, 1);
611 }
612 
613 /**
614  * @tc.name: HandleOperator003
615  * @tc.desc: Test SelectOverlayPattern HandleOperator.
616  * @tc.type: FUNC
617  */
618 HWTEST_F(SelectOverlayTestNg, HandleOperator004, TestSize.Level1)
619 {
620     /**
621      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
622      */
623     SelectOverlayInfo selectInfo;
624     selectInfo.singleLineHeight = NODE_ID;
625     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
626     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
627     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
628     ASSERT_NE(selectOverlayNode, nullptr);
629     /**
630      * @tc.steps: step2. Create pattern
631      */
632     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
633     ASSERT_NE(pattern, nullptr);
634     /**
635      * @tc.steps: step3. Construct TouchEventInfo and Call HandleTouchEvent function.
636      * @tc.expected: check whether the function is executed.
637      */
638     TouchEventInfo touchInfo("touchDown");
__anon0c486c3f0902(const TouchEventInfo& info) 639     infoPtr->onTouchDown = [](const TouchEventInfo& info) {
640         callBackFlag = 1;
641         return;
642     };
__anon0c486c3f0a02(const TouchEventInfo& info) 643     infoPtr->onTouchUp = [](const TouchEventInfo& info) {
644         callBackFlag = 2;
645         return;
646     };
647     TouchLocationInfo touchLocationInfo(1);
648     touchLocationInfo.SetTouchType(TouchType::UP);
649     touchInfo.AddChangedTouchLocationInfo(std::move(touchLocationInfo));
650     pattern->HandleTouchEvent(touchInfo);
651     EXPECT_EQ(callBackFlag, 2);
652 }
653 
654 /**
655  * @tc.name: HandleOperator003
656  * @tc.desc: Test SelectOverlayPattern HandleOperator.
657  * @tc.type: FUNC
658  */
659 HWTEST_F(SelectOverlayTestNg, HandleOperator005, TestSize.Level1)
660 {
661     /**
662      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
663      */
664     SelectOverlayInfo selectInfo;
665     selectInfo.singleLineHeight = NODE_ID;
666     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
667     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
668     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
669     ASSERT_NE(selectOverlayNode, nullptr);
670     /**
671      * @tc.steps: step2. Create pattern
672      */
673     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
674     ASSERT_NE(pattern, nullptr);
675     /**
676      * @tc.steps: step3. Construct TouchEventInfo and Call HandleTouchEvent function.
677      * @tc.expected: check whether the function is executed.
678      */
679     TouchEventInfo touchInfo("touchDown");
__anon0c486c3f0b02(const TouchEventInfo& info) 680     infoPtr->onTouchDown = [](const TouchEventInfo& info) {
681         callBackFlag = 1;
682         return;
683     };
__anon0c486c3f0c02(const TouchEventInfo& info) 684     infoPtr->onTouchMove = [](const TouchEventInfo& info) {
685         callBackFlag = 3;
686         return;
687     };
688     TouchLocationInfo touchLocationInfo(1);
689     touchLocationInfo.SetTouchType(TouchType::MOVE);
690     touchInfo.AddChangedTouchLocationInfo(std::move(touchLocationInfo));
691     pattern->HandleTouchEvent(touchInfo);
692     EXPECT_EQ(callBackFlag, 3);
693 }
694 
695 /**
696  * @tc.name: CheckHandleReverse001
697  * @tc.desc: Test SelectOverlayPattern CheckHandleReverse.
698  * @tc.type: FUNC
699  */
700 HWTEST_F(SelectOverlayTestNg, CheckHandleReverse001, TestSize.Level1)
701 {
702     /**
703      * @tc.steps: step1. Create selectOverlayNode and initialize selectHandleInfo properties.
704      */
705     SelectOverlayInfo selectInfo;
706     selectInfo.singleLineHeight = NODE_ID3;
707     SelectHandleInfo firstHandle;
708     firstHandle.paintRect = FIRST_HANDLE_REGION;
709     SelectHandleInfo secondHandle;
710     secondHandle.paintRect = SECOND_HANDLE_REGION2;
711     selectInfo.firstHandle = firstHandle;
712     selectInfo.secondHandle = secondHandle;
713     bool handleReverse[2] = { false, true };
714     for (int turn = 0; turn < 2; turn++) {
715         selectInfo.handleReverse = handleReverse[turn];
716         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
717         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
718         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
719         ASSERT_NE(selectOverlayNode, nullptr);
720         /**
721          * @tc.steps: step2. Create pattern
722          */
723         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
724         ASSERT_NE(pattern, nullptr);
725         /**
726          * @tc.steps: step3. call CheckHandleReverse function.
727          * @tc.expected: check whether the value of handleReverse is correct.
728          */
729         pattern->CheckHandleReverse();
730         auto res = pattern->GetSelectOverlayInfo()->handleReverse;
731         EXPECT_FALSE(res);
732     }
733 }
734 /**
735  * @tc.name: CheckHandleReverse002
736  * @tc.desc: Test SelectOverlayPattern CheckHandleReverse.
737  * @tc.type: FUNC
738  */
739 HWTEST_F(SelectOverlayTestNg, CheckHandleReverse002, TestSize.Level1)
740 {
741     /**
742      * @tc.steps: step1. Create selectOverlayNode and initialize selectHandleInfo properties.
743      */
744     SelectOverlayInfo selectInfo;
745     selectInfo.singleLineHeight = NODE_ID3;
746     SelectHandleInfo firstHandle;
747     firstHandle.paintRect = SECOND_HANDLE_REGION2;
748     SelectHandleInfo secondHandle;
749     secondHandle.paintRect = FIRST_HANDLE_REGION;
750     selectInfo.firstHandle = firstHandle;
751     selectInfo.secondHandle = secondHandle;
752     bool handleReverse[2] = { false, true };
753     for (int turn = 0; turn < 2; turn++) {
754         selectInfo.handleReverse = handleReverse[turn];
755         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
756         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
757         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
758         ASSERT_NE(selectOverlayNode, nullptr);
759         /**
760          * @tc.steps: step2. Create pattern
761          */
762         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
763         ASSERT_NE(pattern, nullptr);
764         /**
765          * @tc.steps: step3. call CheckHandleReverse function.
766          * @tc.expected: check whether the value of handleReverse is correct.
767          */
768         pattern->CheckHandleReverse();
769         auto res = pattern->GetSelectOverlayInfo()->handleReverse;
770         EXPECT_TRUE(res);
771     }
772 }
773 /**
774  * @tc.name: SelectOverlayLayout001
775  * @tc.desc: Test selectOverlay layout.
776  * @tc.type: FUNC
777  */
778 HWTEST_F(SelectOverlayTestNg, SelectOverlayLayout001, TestSize.Level1)
779 {
780     /**
781      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
782      */
783     SelectOverlayInfo selectInfo;
784     selectInfo.singleLineHeight = NODE_ID;
785     selectInfo.menuOptionItems = GetMenuOptionItems();
786     bool menuIsShow[2] = { false, true };
787     for (int turn = 0; turn < 2; turn++) {
788         selectInfo.menuInfo.menuIsShow = menuIsShow[turn];
789         auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
790         MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
791         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
792         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
793         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
794         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
795         ASSERT_NE(selectOverlayNode, nullptr);
796         /**
797          * @tc.steps: step2. Create pattern and geometryNode.
798          */
799         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
800         ASSERT_NE(pattern, nullptr);
801         RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
802         /**
803          * @tc.steps: step3. Get layoutWrapper and layoutAlgorithm.
804          * @tc.expected: layoutWrapper and layoutAlgorithm are created successfully
805          */
806         auto layoutWrapper =
807             AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
808         auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
809         ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
810         layoutWrapper->SetLayoutAlgorithm(
811             AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
812 
813         auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
814         childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
815         // create menu and extensionMenu
816         for (int i = 0; i < 3; i++) {
817             auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f0d02() 818                 V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
819             // add item to selectOverlayNode
820             selectOverlayNode->AddChild(item);
821             RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
822             firstGeometryNode->Reset();
823             RefPtr<LayoutWrapperNode> firstLayoutWrapper =
824                 AceType::MakeRefPtr<LayoutWrapperNode>(item, firstGeometryNode, item->GetLayoutProperty());
825             ASSERT_NE(firstLayoutWrapper, nullptr);
826             auto itemPattern = item->GetPattern<MenuPattern>();
827             ASSERT_NE(itemPattern, nullptr);
828             firstLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
829             auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
830             ASSERT_NE(itemLayoutAlgorithm, nullptr);
831             firstLayoutWrapper->SetLayoutAlgorithm(
832                 AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
833             firstLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
834                 CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
835             layoutWrapper->AppendChild(firstLayoutWrapper);
836         }
837 
838         /**
839          * @tc.steps: step4. use layoutAlgorithm to measure and layout.
840          * @tc.expected: the function runs rightly.
841          */
842         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
843         selectOverlayLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
844     }
845 }
846 /**
847  * @tc.name: SelectOverlayNodeTest001
848  * @tc.desc: Test IsInSelectedOrSelectOverlayArea with menuOptions.
849  * @tc.type: FUNC
850  */
851 HWTEST_F(SelectOverlayTestNg, SelectOverlayNodeTest001, TestSize.Level1)
852 {
853     /**
854      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
855      */
856     SelectOverlayInfo selectInfo;
857     selectInfo.singleLineHeight = NODE_ID;
858     selectInfo.menuOptionItems = GetMenuOptionItems();
859     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
860     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
861     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
862     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
863     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
864     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
865     ASSERT_NE(selectOverlayNode, nullptr);
866     /**
867      * @tc.steps: step2. Create pattern and initialize HandleRegion
868      */
869     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
870     ASSERT_NE(pattern, nullptr);
871     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
872     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
873     /**
874      * @tc.steps: step3. Construct Point and Call IsInSelectedOrSelectOverlayArea.
875      * @tc.expected: return false
876      */
877     const NG::PointF point { 9.0f, 12.0f };
878     auto result = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point);
879     EXPECT_FALSE(result);
880     /**
881      * @tc.steps: step4. Construct Point and Call IsInSelectedOrSelectOverlayArea.
882      * @tc.expected: return true
883      */
884     const NG::PointF point2 { 12.0f, 12.0f };
885     auto result2 = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point2);
886     EXPECT_TRUE(result2);
887 }
888 
889 /**
890  * @tc.name: SelectOverlayNodeTest002
891  * @tc.desc: Test IsInSelectedOrSelectOverlayArea without menuOptions.
892  * @tc.type: FUNC
893  */
894 HWTEST_F(SelectOverlayTestNg, SelectOverlayNodeTest002, TestSize.Level1)
895 {
896     /**
897      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
898      */
899     SelectOverlayInfo selectInfo;
900     selectInfo.singleLineHeight = NODE_ID;
901     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
902     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
903     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
904     ASSERT_NE(selectOverlayNode, nullptr);
905     /**
906      * @tc.steps: step2. Create pattern and initialize HandleRegion
907      */
908     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
909     ASSERT_NE(pattern, nullptr);
910     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
911     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
912     /**
913      * @tc.steps: step3. Construct Point and Call IsInSelectedOrSelectOverlayArea.
914      * @tc.expected: return false
915      */
916     const NG::PointF point { 9.0f, 12.0f };
917     auto result = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point);
918     EXPECT_FALSE(result);
919     /**
920      * @tc.steps: step4. Construct Point and Call IsInSelectedOrSelectOverlayArea.
921      * @tc.expected: return true
922      */
923     const NG::PointF point2 { 12.0f, 12.0f };
924     auto result2 = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point2);
925     EXPECT_TRUE(result2);
926 }
927 /**
928  * @tc.name: SelectFrameNodeAnimationTest002
929  * @tc.desc: Test MoreAnimation and BackAnimation when isShowInDefaultMenu is false.
930  * @tc.type: FUNC
931  */
932 HWTEST_F(SelectOverlayTestNg, SelectFrameNodeAnimationTest002, TestSize.Level1)
933 {
934     /**
935      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
936      */
937     SelectOverlayInfo selectInfo;
938     selectInfo.menuInfo.menuDisable = true;
939     selectInfo.menuInfo.showCut = false;
940     selectInfo.menuInfo.showPaste = false;
941     auto menuOptionItems = GetMenuOptionItems();
942     selectInfo.menuOptionItems = menuOptionItems;
943     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
944     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
945     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
946     EXPECT_NE(selectOverlayNode, nullptr);
947     /**
948      * @tc.steps: step2. Create default menu and extension menu .
949      * @tc.expected: The default menu and extended menu are created successfully.
950      */
951     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
952     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
953     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
954     selectOverlayNode->CreateToolBar();
955     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
956     for (int i = 0; i < 7; i++) {
957         selectOverlayNode->isShowInDefaultMenu_[i] = false;
958     }
959     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
960     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
961 }
962 
963 /**
964  * @tc.name: SetHasShowAnimation001
965  * @tc.desc: Test SetHasShowAnimation when argument is true.
966  * @tc.type: FUNC
967  */
968 HWTEST_F(SelectOverlayTestNg, SetHasShowAnimation001, TestSize.Level1)
969 {
970     /**
971      * @tc.steps: step1. Create selectOverlayNode and pattern.
972      */
973     SelectOverlayInfo selectInfo;
974     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
975     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
976     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
977     ASSERT_NE(selectOverlayNode, nullptr);
978     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
979     ASSERT_NE(pattern, nullptr);
980     /**
981      * @tc.steps: step2. call SetHasShowAnimation and argument is true .
982      * @tc.expected: The hasShowAnimation_ be changed success.
983      */
984     pattern->SetHasShowAnimation(true);
985     EXPECT_TRUE(pattern->hasShowAnimation_);
986 }
987 
988 /**
989  * @tc.name: SetFrameNodeStatus001
990  * @tc.desc: Test SetFrameNodeStatus different argument.
991  * @tc.type: FUNC
992  */
993 HWTEST_F(SelectOverlayTestNg, SetFrameNodeStatus001, TestSize.Level1)
994 {
995     /**
996      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern.
997      */
998     SelectOverlayInfo selectInfo;
999     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1000     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1001     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1002     ASSERT_NE(selectOverlayNode, nullptr);
1003     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1004     ASSERT_NE(pattern, nullptr);
1005     /**
1006      * @tc.steps: step2. call SetFrameNodeStatus and pass different parameters .
1007      * @tc.expected: the corresponding value was successfully changed.
1008      */
1009     selectOverlayNode->SetFrameNodeStatus(FrameNodeType::SELECTMENU, FrameNodeStatus::VISIBLE);
1010     EXPECT_EQ(selectOverlayNode->selectMenuStatus_, FrameNodeStatus::VISIBLE);
1011     selectOverlayNode->SetFrameNodeStatus(FrameNodeType::EXTENSIONMENU, FrameNodeStatus::VISIBLE);
1012     EXPECT_EQ(selectOverlayNode->extensionMenuStatus_, FrameNodeStatus::VISIBLE);
1013     selectOverlayNode->SetFrameNodeStatus(FrameNodeType::BACKBUTTON, FrameNodeStatus::VISIBLE);
1014     EXPECT_EQ(selectOverlayNode->backButtonStatus_, FrameNodeStatus::VISIBLE);
1015 }
1016 
1017 /**
1018  * @tc.name: SetFrameNodeVisibility001
1019  * @tc.desc: Test SetFrameNodeVisibility different argument.
1020  * @tc.type: FUNC
1021  */
1022 HWTEST_F(SelectOverlayTestNg, SetFrameNodeVisibility001, TestSize.Level1)
1023 {
1024     /**
1025      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern.
1026      */
1027     SelectOverlayInfo selectInfo;
1028     selectInfo.menuInfo.menuDisable = true;
1029     selectInfo.menuInfo.showCut = false;
1030     selectInfo.menuInfo.showPaste = false;
1031     auto menuOptionItems = GetMenuOptionItems();
1032     selectInfo.menuOptionItems = menuOptionItems;
1033     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1034     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1035     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1036     EXPECT_NE(selectOverlayNode, nullptr);
1037     /**
1038      * @tc.steps: step2. Create default menu and extension menu .
1039      */
1040     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1041     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1042     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
1043     selectOverlayNode->CreateToolBar();
1044     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1045     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f0e02() 1046         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1047     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1048     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
1049     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1050     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1051     EXPECT_NE(selectOverlayNode->extensionMenu_, nullptr);
1052     /**
1053      * @tc.steps: step3. call SetFrameNodeVisibility and pass different parameters .
1054      * @tc.expected: the corresponding value was successfully changed.
1055      */
1056     selectOverlayNode->SetFrameNodeVisibility(FrameNodeType::SELECTMENU, VisibleType::VISIBLE);
1057     selectOverlayNode->SetFrameNodeVisibility(FrameNodeType::EXTENSIONMENU, VisibleType::VISIBLE);
1058     selectOverlayNode->SetFrameNodeVisibility(FrameNodeType::BACKBUTTON, VisibleType::VISIBLE);
1059     EXPECT_EQ(selectOverlayNode->selectMenu_->GetLayoutProperty()->GetVisibility(), VisibleType::VISIBLE);
1060     EXPECT_EQ(selectOverlayNode->extensionMenu_->GetLayoutProperty()->GetVisibility(), VisibleType::VISIBLE);
1061     EXPECT_EQ(selectOverlayNode->backButton_->GetLayoutProperty()->GetVisibility(), VisibleType::VISIBLE);
1062 }
1063 
1064 /**
1065  * @tc.name: SetFrameNodeOpacity001
1066  * @tc.desc: Test SetFrameNodeOpacity different argument.
1067  * @tc.type: FUNC
1068  */
1069 HWTEST_F(SelectOverlayTestNg, SetFrameNodeOpacity001, TestSize.Level1)
1070 {
1071     /**
1072      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern.
1073      */
1074     SelectOverlayInfo selectInfo;
1075     selectInfo.menuInfo.menuDisable = true;
1076     selectInfo.menuInfo.showCut = false;
1077     selectInfo.menuInfo.showPaste = false;
1078     auto menuOptionItems = GetMenuOptionItems();
1079     selectInfo.menuOptionItems = menuOptionItems;
1080     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1081     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1082     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1083     EXPECT_NE(selectOverlayNode, nullptr);
1084     /**
1085      * @tc.steps: step2. Create default menu and extension menu .
1086      */
1087     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1088     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1089     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
1090     selectOverlayNode->CreateToolBar();
1091     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1092     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f0f02() 1093         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1094     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1095     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
1096     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1097     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1098     EXPECT_NE(selectOverlayNode->extensionMenu_, nullptr);
1099 
1100     /**
1101      * @tc.steps: step3. call SetFrameNodeOpacity and pass different parameters .
1102      * @tc.expected: the corresponding value was successfully changed.
1103      */
1104     selectOverlayNode->SetFrameNodeOpacity(FrameNodeType::SELECTMENU, 0.0);
1105     selectOverlayNode->SetFrameNodeOpacity(FrameNodeType::EXTENSIONMENU, 0.0);
1106     selectOverlayNode->SetFrameNodeOpacity(FrameNodeType::BACKBUTTON, 0.0);
1107 
1108     EXPECT_EQ(selectOverlayNode->selectMenu_->GetRenderContext()->GetOpacity(), 0.0);
1109     EXPECT_EQ(selectOverlayNode->extensionMenu_->GetRenderContext()->GetOpacity(), 0.0);
1110     EXPECT_EQ(selectOverlayNode->backButton_->GetRenderContext()->GetOpacity(), 0.0);
1111 }
1112 
1113 /**
1114  * @tc.name: ShowSelectOverlay001
1115  * @tc.desc: Test hasShowAnimation_ value change situation.
1116  * @tc.type: FUNC
1117  */
1118 HWTEST_F(SelectOverlayTestNg, ShowSelectOverlay001, TestSize.Level1)
1119 {
1120     /**
1121      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern.
1122      */
1123     SelectOverlayInfo selectInfo;
1124     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1125     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1126     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1127     ASSERT_NE(selectOverlayNode, nullptr);
1128     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1129     ASSERT_NE(pattern, nullptr);
1130     bool animate[2] = { true, false };
1131     /**
1132      * @tc.steps: step2. call ShowSelectOverlay  .
1133      * @tc.expected: the hasShowAnimation_ value was successfully changed.
1134      */
1135     for (int i = 0; i < 2; i++) {
1136         selectOverlayNode->ShowSelectOverlay(animate[i]);
1137         EXPECT_EQ(pattern->hasShowAnimation_, animate[i]);
1138     }
1139 }
1140 
1141 /**
1142  * @tc.name: HideSelectOverlay001
1143  * @tc.desc: Test select_overlay_node HideSelectOverlay.
1144  * @tc.type: FUNC
1145  */
1146 HWTEST_F(SelectOverlayTestNg, HideSelectOverlay001, TestSize.Level1)
1147 {
1148     /**
1149      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern.
1150      */
1151     SelectOverlayInfo selectInfo;
1152     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1153     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1154     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1155     ASSERT_NE(selectOverlayNode, nullptr);
1156     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1157     ASSERT_NE(pattern, nullptr);
1158     /**
1159      * @tc.steps: step2. call ShowSelectOverlay  .
1160      * @tc.expected: the circlesAndBackArrowOpacity_ value was successfully changed.
1161      */
1162     pattern->CreateNodePaintMethod();
1163     ASSERT_NE(pattern->selectOverlayModifier_, nullptr);
__anon0c486c3f1002() 1164     selectOverlayNode->HideSelectOverlay([]() {});
1165     EXPECT_EQ(pattern->selectOverlayModifier_->circlesAndBackArrowOpacity_->Get(), 0.0);
1166 }
1167 
1168 /**
1169  * @tc.name: UpdateToolBar001
1170  * @tc.desc: Test select_overlay_node UpdateToolBar.
1171  * @tc.type: FUNC
1172  */
1173 HWTEST_F(SelectOverlayTestNg, UpdateToolBar001, TestSize.Level1)
1174 {
1175     /**
1176      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern six situation.
1177      */
1178     SelectOverlayInfo selectInfo;
1179     auto menuOptionItems = GetMenuOptionItems();
1180     selectInfo.menuOptionItems = menuOptionItems;
1181     for (int i = 0; i < 6; i++) {
1182         switch (i) {
1183             case 0:
1184             case 3:
1185                 selectInfo.menuInfo.menuDisable = true;
1186                 break;
1187             case 1:
1188             case 4:
1189                 selectInfo.menuInfo.menuDisable = false;
1190                 selectInfo.menuInfo.menuIsShow = true;
1191                 break;
1192             case 2:
1193             case 6:
1194                 selectInfo.menuInfo.menuDisable = false;
1195                 selectInfo.menuInfo.menuIsShow = false;
1196                 break;
1197             default:
1198                 break;
1199         }
1200 
1201         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1202         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1203         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1204         ASSERT_NE(selectOverlayNode, nullptr);
1205         selectOverlayNode->isExtensionMenu_ = true;
1206         selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1207         selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f1102() 1208             ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1209         if (i < 3) {
1210             selectOverlayNode->selectMenuStatus_ = FrameNodeStatus::VISIBLETOGONE;
1211             selectOverlayNode->extensionMenuStatus_ = FrameNodeStatus::GONETOVISIBLE;
1212             selectOverlayNode->backButtonStatus_ = FrameNodeStatus::GONETOVISIBLE;
1213         }
1214         EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1215         EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1216         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1217         ASSERT_NE(pattern, nullptr);
1218         auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1219         MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1220         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
1221         selectOverlayNode->CreateToolBar();
1222         /**
1223          * @tc.steps: step3. call UpdateToolBar for call the other function .
1224          * @tc.expected: the isExtensionMenu_ value was successfully changed.
1225          */
1226         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1227         selectOverlayNode->UpdateToolBar(false);
1228 
1229         EXPECT_TRUE(selectOverlayNode->isExtensionMenu_);
1230 
1231         selectOverlayNode->UpdateToolBar(true);
1232 
1233         EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
1234     }
1235 }
1236 
1237 /**
1238  * @tc.name: ContentModifierOnDraw001
1239  * @tc.desc: Test select_ovelay_content_modifier onDraw.
1240  * @tc.type: FUNC
1241  */
1242 HWTEST_F(SelectOverlayTestNg, ContentModifierOnDraw001, TestSize.Level1)
1243 {
1244     /**
1245      * @tc.steps: step1. Create selectOverlayNode, pattern,canvs
1246      * and initialize properties.
1247      */
1248     SelectOverlayInfo selectInfo;
1249     selectInfo.menuInfo.menuDisable = true;
1250     selectInfo.menuInfo.showCut = false;
1251     selectInfo.menuInfo.showPaste = false;
1252     auto menuOptionItems = GetMenuOptionItems();
1253     selectInfo.menuOptionItems = menuOptionItems;
1254     selectInfo.singleLineHeight = NODE_ID;
1255     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1256     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1257     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1258     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1259     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1260     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1261     EXPECT_NE(selectOverlayNode, nullptr);
1262     selectOverlayNode->CreateToolBar();
1263     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1264     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f1202() 1265         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1266     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1267     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
1268     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1269     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1270     EXPECT_NE(selectOverlayNode->extensionMenu_, nullptr);
1271     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1272     EXPECT_NE(pattern, nullptr);
1273     RefPtr<NodePaintMethod> paintMethod = pattern->CreateNodePaintMethod();
1274     EXPECT_NE(paintMethod, nullptr);
1275     paintMethod = pattern->CreateNodePaintMethod();
1276     EXPECT_NE(paintMethod, nullptr);
1277     auto selectOverlayPaintMethod = AceType::DynamicCast<SelectOverlayPaintMethod>(paintMethod);
1278     EXPECT_NE(selectOverlayPaintMethod, nullptr);
1279     auto contentModifier = pattern->selectOverlayContentModifier_;
1280     auto overlayModifier = pattern->selectOverlayModifier_;
1281     EXPECT_NE(contentModifier, nullptr);
1282     EXPECT_NE(overlayModifier, nullptr);
1283     Testing::MockCanvas canvas;
1284     EXPECT_CALL(canvas, Save()).Times(AtLeast(1));
1285     EXPECT_CALL(canvas, AttachBrush(_)).WillRepeatedly(ReturnRef(canvas));
1286     EXPECT_CALL(canvas, DetachBrush()).WillRepeatedly(ReturnRef(canvas));
1287     EXPECT_CALL(canvas, AttachPen(_)).WillRepeatedly(ReturnRef(canvas));
1288     EXPECT_CALL(canvas, DetachPen()).WillRepeatedly(ReturnRef(canvas));
1289     EXPECT_CALL(canvas, DrawCircle(_, _)).Times(AtLeast(1));
1290     EXPECT_CALL(canvas, Translate(_, _)).Times(AtLeast(1));
1291     EXPECT_CALL(canvas, Restore()).Times(AtLeast(1));
1292     EXPECT_CALL(canvas, ClipRect(_, _, _)).WillRepeatedly(Return());
1293     EXPECT_CALL(canvas, DrawLine(_, _)).Times(AtLeast(1));
1294     DrawingContext context { canvas, 100, 100 };
1295     /**
1296      * @tc.steps: step2. get the contentModifier and initialize properies and call onDraw function.
1297      * @tc.expected: the innerHandleRadius_ value is correct.
1298      */
1299     contentModifier->SetIsSingleHandle(true);
1300     contentModifier->SetFirstHandleIsShow(true);
1301     contentModifier->SetInShowArea(true);
1302     EXPECT_EQ(contentModifier->inShowArea_->Get(), true);
1303     contentModifier->SetHandleReverse(false);
1304     EXPECT_EQ(contentModifier->handleReverse_->Get(), false);
1305     contentModifier->SetViewPort(SECOND_HANDLE_REGION);
1306     EXPECT_EQ(contentModifier->viewPort_->Get(), SECOND_HANDLE_REGION);
1307     contentModifier->SetFirstHandle(SECOND_HANDLE_REGION);
1308     EXPECT_EQ(contentModifier->firstHandle_->Get(), SECOND_HANDLE_REGION);
1309     contentModifier->SetSecondHandle(SECOND_HANDLE_REGION);
1310     EXPECT_EQ(contentModifier->secondHandle_->Get(), SECOND_HANDLE_REGION);
1311     contentModifier->SetHandleColor(Color::RED);
1312     EXPECT_EQ(contentModifier->handleColor_->Get(), Color::RED);
1313     contentModifier->SetInnerHandleColor(Color::RED);
1314     EXPECT_EQ(contentModifier->innerHandleColor_->Get(), Color::RED);
1315     contentModifier->SetHandleRadius(2.0f);
1316     EXPECT_EQ(contentModifier->handleRadius_->Get(), 2.0f);
1317     contentModifier->SetInnerHandleRadius(2.0f);
1318     EXPECT_EQ(contentModifier->innerHandleRadius_->Get(), 2.0f);
1319     contentModifier->SetHandleOpacity(2.0f);
1320     EXPECT_EQ(contentModifier->handleOpacity_->Get(), 2.0f);
1321     for (int i = 0; i < 6; i++) {
1322         switch (i) {
1323             case 0:
1324                 contentModifier->SetFirstHandleIsShow(true);
1325                 EXPECT_EQ(contentModifier->firstHandleIsShow_->Get(), true);
1326                 break;
1327             case 1:
1328                 contentModifier->SetIsSingleHandle(true);
1329                 EXPECT_EQ(contentModifier->isSingleHandle_->Get(), true);
1330                 contentModifier->SetFirstHandleIsShow(false);
1331                 EXPECT_EQ(contentModifier->firstHandleIsShow_->Get(), false);
1332                 contentModifier->SetSecondHandleIsShow(true);
1333                 EXPECT_EQ(contentModifier->secondHandleIsShow_->Get(), true);
1334                 break;
1335             case 2:
1336                 contentModifier->SetIsSingleHandle(false);
1337                 EXPECT_EQ(contentModifier->isSingleHandle_->Get(), false);
1338                 contentModifier->SetFirstHandleIsShow(true);
1339                 EXPECT_EQ(contentModifier->firstHandleIsShow_->Get(), true);
1340                 break;
1341             case 3:
1342                 contentModifier->SetIsSingleHandle(true);
1343                 EXPECT_EQ(contentModifier->isSingleHandle_->Get(), true);
1344                 contentModifier->SetFirstHandleIsShow(false);
1345                 EXPECT_EQ(contentModifier->firstHandleIsShow_->Get(), false);
1346                 contentModifier->SetSecondHandleIsShow(false);
1347                 EXPECT_EQ(contentModifier->secondHandleIsShow_->Get(), false);
1348                 break;
1349             case 4:
1350                 contentModifier->SetIsSingleHandle(false);
1351                 EXPECT_EQ(contentModifier->isSingleHandle_->Get(), false);
1352                 break;
1353             case 5:
1354                 contentModifier->SetInShowArea(false);
1355                 EXPECT_EQ(contentModifier->inShowArea_->Get(), false);
1356                 break;
1357             default:
1358                 break;
1359         }
1360 
1361         contentModifier->onDraw(context);
1362     }
1363     EXPECT_EQ(contentModifier->innerHandleRadius_->Get(), 2.0f);
1364 }
1365 
1366 /**
1367  * @tc.name: ContentModifierOnDraw002
1368  * @tc.desc: Test select_ovelay_content_modifier onDraw.
1369  * @tc.type: FUNC
1370  */
1371 HWTEST_F(SelectOverlayTestNg, ContentModifierOnDraw002, TestSize.Level1)
1372 {
1373     /**
1374      * @tc.steps: step1. Create selectOverlayNode, pattern, canvas, context
1375      * and initialize properties.
1376     */
1377     SelectOverlayInfo selectInfo;
1378     selectInfo.menuInfo.menuDisable = true;
1379     selectInfo.menuInfo.showCut = false;
1380     selectInfo.menuInfo.showPaste = false;
1381     auto menuOptionItems = GetMenuOptionItems();
1382     selectInfo.menuOptionItems = menuOptionItems;
1383     selectInfo.singleLineHeight = NODE_ID;
1384     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1385     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1386     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1387     ASSERT_NE(selectOverlayNode, nullptr);
1388     selectOverlayNode->CreateToolBar();
1389     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1390     ASSERT_NE(pattern, nullptr);
1391     pattern->CreateNodePaintMethod();
1392     auto contentModifier = pattern->selectOverlayContentModifier_;
1393     EXPECT_NE(contentModifier, nullptr);
1394 
1395     /**
1396      * @tc.steps: step2. set param and call onDraw function.
1397      */
1398     Testing::MockCanvas canvas;
1399     DrawingContext context { canvas, 100, 100 };
1400     contentModifier->isUsingMouse_ = false;
1401     contentModifier->SetIsHiddenHandle(true);
1402     contentModifier->onDraw(context);
1403     EXPECT_EQ(contentModifier->isHiddenHandle_->Get(), true);
1404 }
1405 
1406 /**
1407  * @tc.name: ContentModifierOnDraw003
1408  * @tc.desc: Test select_ovelay_content_modifier onDraw.
1409  * @tc.type: FUNC
1410  */
1411 HWTEST_F(SelectOverlayTestNg, ContentModifierOnDraw003, TestSize.Level1)
1412 {
1413     /**
1414      * @tc.steps: step1. Create selectOverlayNode, pattern,canvs
1415      * and initialize properties.
1416      */
1417     SelectOverlayInfo selectInfo;
1418     selectInfo.menuInfo.menuDisable = true;
1419     selectInfo.menuInfo.showCut = false;
1420     selectInfo.menuInfo.showPaste = false;
1421     auto menuOptionItems = GetMenuOptionItems();
1422     selectInfo.menuOptionItems = menuOptionItems;
1423     selectInfo.singleLineHeight = NODE_ID;
1424     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1425     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1426     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1427     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1428     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1429     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1430     EXPECT_NE(selectOverlayNode, nullptr);
1431     selectOverlayNode->CreateToolBar();
1432     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1433     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f1302() 1434         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1435     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1436     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1437     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1438     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1439     EXPECT_NE(pattern, nullptr);
1440     RefPtr<NodePaintMethod> paintMethod = pattern->CreateNodePaintMethod();
1441     EXPECT_NE(paintMethod, nullptr);
1442     paintMethod = pattern->CreateNodePaintMethod();
1443     EXPECT_NE(paintMethod, nullptr);
1444     auto selectOverlayPaintMethod = AceType::DynamicCast<SelectOverlayPaintMethod>(paintMethod);
1445     EXPECT_NE(selectOverlayPaintMethod, nullptr);
1446     auto contentModifier = pattern->selectOverlayContentModifier_;
1447     EXPECT_NE(contentModifier, nullptr);
1448     Testing::MockCanvas canvas;
1449     EXPECT_CALL(canvas, Save()).Times(AtLeast(1));
1450     EXPECT_CALL(canvas, AttachBrush(_)).WillRepeatedly(ReturnRef(canvas));
1451     EXPECT_CALL(canvas, DetachBrush()).WillRepeatedly(ReturnRef(canvas));
1452     EXPECT_CALL(canvas, AttachPen(_)).WillRepeatedly(ReturnRef(canvas));
1453     EXPECT_CALL(canvas, DetachPen()).WillRepeatedly(ReturnRef(canvas));
1454     EXPECT_CALL(canvas, Restore()).Times(AtLeast(1));
1455     EXPECT_CALL(canvas, ClipRect(_, _, _)).WillRepeatedly(Return());
1456     DrawingContext context { canvas, 100, 100 };
1457     /**
1458      * @tc.steps: step3. set param and call onDraw function.
1459      */
1460     contentModifier->isUsingMouse_ = false;
1461     contentModifier->SetIsHiddenHandle(false);
1462     contentModifier->SetInShowArea(true);
1463     contentModifier->SetIsSingleHandle(false);
1464     contentModifier->SetHandleReverse(true);
1465     contentModifier->onDraw(context);
1466     EXPECT_EQ(contentModifier->isHiddenHandle_->Get(), false);
1467 }
1468 
1469 /**
1470  * @tc.name: ContentModifierOnDraw004
1471  * @tc.desc: Test select_ovelay_content_modifier onDraw.
1472  * @tc.type: FUNC
1473  */
1474 HWTEST_F(SelectOverlayTestNg, ContentModifierOnDraw004, TestSize.Level1)
1475 {
1476     /**
1477      * @tc.steps: step1. Create selectOverlayNode, pattern,canvs
1478      * and initialize properties.
1479      */
1480     SelectOverlayInfo selectInfo;
1481     selectInfo.menuInfo.menuDisable = true;
1482     selectInfo.menuInfo.showCut = false;
1483     selectInfo.menuInfo.showPaste = false;
1484     selectInfo.singleLineHeight = NODE_ID;
1485     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1486     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1487     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1488     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1489     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1490     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1491     EXPECT_NE(selectOverlayNode, nullptr);
1492     selectOverlayNode->CreateToolBar();
1493     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1494     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1495     EXPECT_NE(pattern, nullptr);
1496     pattern->CreateNodePaintMethod();
1497     auto contentModifier = pattern->selectOverlayContentModifier_;
1498     EXPECT_NE(contentModifier, nullptr);
1499     Testing::MockCanvas canvas;
1500     EXPECT_CALL(canvas, Save()).Times(AtLeast(1));
1501     EXPECT_CALL(canvas, AttachBrush(_)).WillRepeatedly(ReturnRef(canvas));
1502     EXPECT_CALL(canvas, DetachBrush()).WillRepeatedly(ReturnRef(canvas));
1503     EXPECT_CALL(canvas, AttachPen(_)).WillRepeatedly(ReturnRef(canvas));
1504     EXPECT_CALL(canvas, DetachPen()).WillRepeatedly(ReturnRef(canvas));
1505     EXPECT_CALL(canvas, DrawCircle(_, _)).Times(AtLeast(1));
1506     EXPECT_CALL(canvas, Translate(_, _)).Times(AtLeast(1));
1507     EXPECT_CALL(canvas, Restore()).Times(AtLeast(1));
1508     EXPECT_CALL(canvas, ClipRect(_, _, _)).WillRepeatedly(Return());
1509     EXPECT_CALL(canvas, DrawLine(_, _)).Times(AtLeast(1));
1510     contentModifier->isUsingMouse_ = false;
1511     contentModifier->SetIsHiddenHandle(false);
1512     contentModifier->SetInShowArea(true);
1513 
1514     /**
1515      * @tc.steps: step2. set param and call PaintSingleHandle function
1516     */
1517     contentModifier->isPaintHandleUsePoints_ = true;
1518     contentModifier->SetIsSingleHandle(true);
1519     contentModifier->firstHandlePaintInfo_.width = 6.0f;
1520     contentModifier->firstHandleIsShow_->Set(true);
1521     contentModifier->secondHandlePaintInfo_.width = 6.0f;
1522     contentModifier->secondHandleIsShow_->Set(true);
1523     contentModifier->PaintSingleHandle(canvas);
1524     EXPECT_EQ(contentModifier->isPaintHandleUsePoints_, true);
1525 
1526     /**
1527      * @tc.steps: step3. set param and call PaintSingleHandle function
1528     */
1529     contentModifier->isPaintHandleUsePoints_ = true;
1530     contentModifier->SetIsSingleHandle(false);
1531     contentModifier->SetFirstHandleIsShow(true);
1532     contentModifier->SetSecondHandleIsShow(true);
1533     contentModifier->PaintDoubleHandle(canvas);
1534     EXPECT_EQ(contentModifier->isPaintHandleUsePoints_, true);
1535 }
1536 
1537 /**
1538  * @tc.name: OverlayModifierOnDraw001
1539  * @tc.desc: Test select_ovelay_modifier onDraw.
1540  * @tc.type: FUNC
1541  */
1542 HWTEST_F(SelectOverlayTestNg, OverlayModifierOnDraw001, TestSize.Level1)
1543 {
1544     /**
1545      * @tc.steps: step1. Create selectOverlayNode, pattern,canvs
1546      * and initialize properties.
1547      */
1548     SelectOverlayInfo selectInfo;
1549     selectInfo.menuInfo.menuDisable = true;
1550     selectInfo.menuInfo.showCut = false;
1551     selectInfo.menuInfo.showPaste = false;
1552     auto menuOptionItems = GetMenuOptionItems();
1553     selectInfo.menuOptionItems = menuOptionItems;
1554     selectInfo.singleLineHeight = NODE_ID;
1555     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1556     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1557     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1558     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1559     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1560     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1561     EXPECT_NE(selectOverlayNode, nullptr);
1562     selectOverlayNode->CreateToolBar();
1563     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1564     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
1565     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f1402() 1566         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1567     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
1568     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
1569     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
1570     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
1571     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1572     EXPECT_NE(pattern, nullptr);
1573     RefPtr<NodePaintMethod> paintMethod = pattern->CreateNodePaintMethod();
1574     EXPECT_NE(paintMethod, nullptr);
1575     paintMethod = pattern->CreateNodePaintMethod();
1576     EXPECT_NE(paintMethod, nullptr);
1577     auto selectOverlayPaintMethod = AceType::DynamicCast<SelectOverlayPaintMethod>(paintMethod);
1578     EXPECT_NE(selectOverlayPaintMethod, nullptr);
1579     auto overlayModifier = pattern->selectOverlayModifier_;
1580     EXPECT_NE(overlayModifier, nullptr);
1581     Testing::MockCanvas canvas;
1582     DrawingContext context = GetDrawingContext(canvas);
1583     for (int32_t i = 0; i < 4; i++) {
1584         overlayModifier->circleOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
1585         EXPECT_NE(overlayModifier->circleOffset_[i], nullptr);
1586         if (i < 4 - 1) {
1587             overlayModifier->lineEndOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
1588             EXPECT_NE(overlayModifier->lineEndOffset_[i], nullptr);
1589         }
1590     }
1591     overlayModifier->rotationAngle_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
1592     overlayModifier->SetMenuOptionOffset(offset);
1593     overlayModifier->pointRadius_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
1594     overlayModifier->SetHeadPointRadius(Dimension(1.0));
1595     /**
1596      * @tc.steps: step2. call onDraw.
1597      * @tc.expected: the menuOptionOffset_ value is correct.
1598      */
1599     overlayModifier->onDraw(context);
1600     EXPECT_EQ(overlayModifier->hasExtensionMenu_->Get(), false);
1601 }
1602 
1603 /**
1604  * @tc.name: SelectOverlayLayout002
1605  * @tc.desc: Test selectOverlay layout when checkIsInShowArea is false.
1606  * @tc.type: FUNC
1607  */
1608 HWTEST_F(SelectOverlayTestNg, SelectOverlayLayout002, TestSize.Level1)
1609 {
1610     /**
1611      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
1612      */
1613     SelectOverlayInfo selectInfo;
1614     selectInfo.singleLineHeight = NODE_ID;
1615     selectInfo.menuOptionItems = GetMenuOptionItems();
1616     selectInfo.menuInfo.menuIsShow = true;
1617     selectInfo.useFullScreen = false;
1618     bool isSingleHandle[2] = { false, true };
1619     for (int i = 0; i < 2; i++) {
1620         selectInfo.isSingleHandle = isSingleHandle[i];
1621         selectInfo.firstHandle.paintRect = FIRST_HANDLE_REGION;
1622         selectInfo.secondHandle.paintRect = SECOND_HANDLE_REGION;
1623         selectInfo.showArea = FIRST_HANDLE_REGION;
1624         auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1625         MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1626         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1627         auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1628         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1629         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1630         ASSERT_NE(selectOverlayNode, nullptr);
1631         /**
1632          * @tc.steps: step2. Create pattern and geometryNode.
1633          */
1634         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1635         ASSERT_NE(pattern, nullptr);
1636         RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
1637         /**
1638          * @tc.steps: step3. Get layoutWrapper and layoutAlgorithm.
1639          * @tc.expected: layoutWrapper and layoutAlgorithm are created successfully
1640          */
1641         LayoutWrapperNode* layoutWrapper =
1642             new LayoutWrapperNode(frameNode, geometryNode, frameNode->GetLayoutProperty());
1643         auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
1644         ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
1645         layoutWrapper->SetLayoutAlgorithm(
1646             AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
1647 
1648         auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
1649         childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
1650         // create menu
1651         auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f1502() 1652             V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
1653         // add item to selectOverlayNode
1654         selectOverlayNode->AddChild(item);
1655         RefPtr<GeometryNode> itemGeometryNode = AceType::MakeRefPtr<GeometryNode>();
1656         itemGeometryNode->Reset();
1657         RefPtr<LayoutWrapperNode> itemLayoutWrapper =
1658             AceType::MakeRefPtr<LayoutWrapperNode>(item, itemGeometryNode, item->GetLayoutProperty());
1659         EXPECT_FALSE(itemLayoutWrapper == nullptr);
1660         auto itemPattern = item->GetPattern<MenuPattern>();
1661         EXPECT_FALSE(itemPattern == nullptr);
1662         itemLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
1663         auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
1664         EXPECT_FALSE(itemLayoutAlgorithm == nullptr);
1665         itemLayoutWrapper->SetLayoutAlgorithm(
1666             AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
1667         itemLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
1668             CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
1669         layoutWrapper->AppendChild(itemLayoutWrapper);
1670         /**
1671          * @tc.steps: step4. use layoutAlgorithm to measure and layout.
1672          * @tc.expected: RemoveChildInRenderTree is executed successfully when checkIsInShowArea is false.
1673          */
1674         EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
1675         selectOverlayLayoutAlgorithm->Layout(layoutWrapper);
1676         EXPECT_FALSE(layoutWrapper->isActive_);
1677     }
1678 }
1679 
1680 /**
1681  * @tc.name: IsMenuShow001
1682  * @tc.desc: Test IsMenuShow function.
1683  * @tc.type: FUNC
1684  */
1685 HWTEST_F(SelectOverlayTestNg, IsMenuShow001, TestSize.Level1)
1686 {
1687     /**
1688      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1689      */
1690     SelectOverlayInfo selectInfo;
1691     selectInfo.menuOptionItems = GetMenuOptionItems();
1692     selectInfo.singleLineHeight = NODE_ID;
1693     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1694     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1695     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1696     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1697     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1698     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1699     ASSERT_NE(selectOverlayNode, nullptr);
1700     /**
1701      * @tc.steps: step2. Create pattern and call IsMenuShow function.
1702      * @tc.expected: The isMenuShow returns false
1703      */
1704     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1705     ASSERT_NE(pattern, nullptr);
1706     EXPECT_FALSE(pattern->IsMenuShow());
1707 }
1708 
1709 /**
1710  * @tc.name: IsHandleShow001
1711  * @tc.desc: Test IsHandleShow function.
1712  * @tc.type: FUNC
1713  */
1714 HWTEST_F(SelectOverlayTestNg, IsHandleShow001, TestSize.Level1)
1715 {
1716     /**
1717      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1718      */
1719     SelectOverlayInfo selectInfo;
1720     selectInfo.menuOptionItems = GetMenuOptionItems();
1721     selectInfo.singleLineHeight = NODE_ID;
1722     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1723     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1724     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1725     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1726     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1727     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1728     ASSERT_NE(selectOverlayNode, nullptr);
1729     /**
1730      * @tc.steps: step2. Create pattern and call IsHandleShow function.
1731      * @tc.expected: The IsHandleShow returns true.
1732      */
1733     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1734     ASSERT_NE(pattern, nullptr);
1735     EXPECT_TRUE(pattern->IsHandleShow());
1736 }
1737 
1738 /**
1739  * @tc.name: StartHiddenHandleTask001
1740  * @tc.desc: Test StartHiddenHandleTask function.
1741  * @tc.type: FUNC
1742  */
1743 HWTEST_F(SelectOverlayTestNg, StartHiddenHandleTask001, TestSize.Level1)
1744 {
1745     /**
1746      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1747      */
1748     SelectOverlayInfo selectInfo;
1749     selectInfo.menuOptionItems = GetMenuOptionItems();
1750     selectInfo.singleLineHeight = NODE_ID;
1751     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1752     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1753     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1754     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1755     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1756     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1757     ASSERT_NE(selectOverlayNode, nullptr);
1758     auto taskExecutor = AceType::MakeRefPtr<MockTaskExecutor>();
1759     ASSERT_NE(taskExecutor, nullptr);
1760     auto pipeline = PipelineBase::GetCurrentContext();
1761     pipeline->taskExecutor_ = taskExecutor;
1762     /**
1763      * @tc.steps: step2. Create pattern and call StartHiddenHandleTask function.
1764      */
1765     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1766     ASSERT_NE(pattern, nullptr);
1767     pattern->StartHiddenHandleTask();
1768 }
1769 
1770 /**
1771  * @tc.name: HiddenHandle001
1772  * @tc.desc: Test HiddenHandle function.
1773  * @tc.type: FUNC
1774  */
1775 HWTEST_F(SelectOverlayTestNg, HiddenHandle001, TestSize.Level1)
1776 {
1777     /**
1778      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1779      */
1780     SelectOverlayInfo selectInfo;
1781     selectInfo.menuOptionItems = GetMenuOptionItems();
1782     selectInfo.singleLineHeight = NODE_ID;
1783     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1784     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1785     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1786     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1787     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1788     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1789     ASSERT_NE(selectOverlayNode, nullptr);
1790     /**
1791      * @tc.steps: step2. Create pattern and call HiddenHandle function.
1792      * @tc.expected: The selectInfo->isHiddenHandle_ value is true
1793      */
1794     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1795     ASSERT_NE(pattern, nullptr);
1796     pattern->isHiddenHandle_ = false;
1797     pattern->HiddenHandle();
1798     EXPECT_TRUE(pattern->isHiddenHandle_);
1799 }
1800 
1801 /**
1802  * @tc.name: StopHiddenHandleTask001
1803  * @tc.desc: Test StopHiddenHandleTask function.
1804  * @tc.type: FUNC
1805  */
1806 HWTEST_F(SelectOverlayTestNg, StopHiddenHandleTask001, TestSize.Level1)
1807 {
1808     /**
1809      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1810      */
1811     SelectOverlayInfo selectInfo;
1812     selectInfo.menuOptionItems = GetMenuOptionItems();
1813     selectInfo.singleLineHeight = NODE_ID;
1814     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1815     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1816     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1817     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1818     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1819     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1820     ASSERT_NE(selectOverlayNode, nullptr);
1821     /**
1822      * @tc.steps: step2. Create pattern and call StopHiddenHandleTask function.
1823      */
1824     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1825     ASSERT_NE(pattern, nullptr);
1826     pattern->StopHiddenHandleTask();
1827 }
1828 
1829 /**
1830  * @tc.name: UpdateSelectArea001
1831  * @tc.desc: Test UpdateSelectArea function.
1832  * @tc.type: FUNC
1833  */
1834 HWTEST_F(SelectOverlayTestNg, UpdateSelectArea001, TestSize.Level1)
1835 {
1836     /**
1837      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1838      */
1839     SelectOverlayInfo selectInfo;
1840     selectInfo.menuOptionItems = GetMenuOptionItems();
1841     selectInfo.singleLineHeight = NODE_ID;
1842     selectInfo.menuInfo.menuDisable = false;
1843     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1844     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1845     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1846     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1847     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1848     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1849     ASSERT_NE(selectOverlayNode, nullptr);
1850 
1851     /**
1852      * @tc.steps: step2. Create pattern and call UpdateSelectArea function.
1853      */
1854     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1855     ASSERT_NE(pattern, nullptr);
1856     EXPECT_EQ(pattern->GetSelectOverlayInfo()->selectArea, RectF());
1857     RectF area;
1858     area = RectF(1, 1, 1, 1);
1859     pattern->UpdateSelectArea(area);
1860     EXPECT_EQ(pattern->GetSelectOverlayInfo()->selectArea, area);
1861 }
1862 
1863 /**
1864  * @tc.name: SetIsNewAvoid001
1865  * @tc.desc: Test SetIsNewAvoid function.
1866  * @tc.type: FUNC
1867  */
1868 HWTEST_F(SelectOverlayTestNg, SetIsNewAvoid001, TestSize.Level1)
1869 {
1870     /**
1871      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1872      */
1873     SelectOverlayInfo selectInfo;
1874     selectInfo.menuOptionItems = GetMenuOptionItems();
1875     selectInfo.singleLineHeight = NODE_ID;
1876     selectInfo.menuInfo.menuDisable = false;
1877     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1878     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1879     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1880     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1881     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1882     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1883     ASSERT_NE(selectOverlayNode, nullptr);
1884 
1885     /**
1886      * @tc.steps: step2. Create pattern and call SetIsNewAvoid function.
1887      */
1888     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1889     ASSERT_NE(pattern, nullptr);
1890     EXPECT_FALSE(pattern->GetSelectOverlayInfo()->isNewAvoid);
1891     pattern->SetIsNewAvoid(true);
1892     EXPECT_TRUE(pattern->GetSelectOverlayInfo()->isNewAvoid);
1893 }
1894 
1895 /**
1896  * @tc.name: CheckIfNeedMenuOrHandle001
1897  * @tc.desc: Test CheckIfNeedMenuOrHandle function.
1898  * @tc.type: FUNC
1899  */
1900 HWTEST_F(SelectOverlayTestNg, CheckIfNeedMenuOrHandle001, TestSize.Level1)
1901 {
1902     /**
1903      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1904      */
1905     SelectOverlayInfo selectInfo;
1906     selectInfo.menuOptionItems = GetMenuOptionItems();
1907     selectInfo.singleLineHeight = NODE_ID;
1908     selectInfo.menuInfo.menuDisable = false;
1909     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1910     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1911     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1912     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1913     std::vector<SelectOverlayMode> selectOverlayModeVec {
1914         SelectOverlayMode::ALL, SelectOverlayMode::MENU_ONLY, SelectOverlayMode::HANDLE_ONLY };
1915 
1916     /**
1917      * @tc.steps: step2. Create selectOverlay node in each SelectOverlayMode.
1918      */
1919     for (const auto& selectOverlayMode : selectOverlayModeVec) {
1920         auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr, selectOverlayMode);
1921         auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1922         ASSERT_NE(selectOverlayNode, nullptr);
1923 
1924         /**
1925          * @tc.steps: step3. Create pattern and call CheckIfNeedMenu function.
1926          */
1927         auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1928         ASSERT_NE(pattern, nullptr);
1929         EXPECT_EQ(pattern->GetMode(), selectOverlayMode);
1930         if (selectOverlayMode == SelectOverlayMode::ALL ||
1931             selectOverlayMode == SelectOverlayMode::MENU_ONLY) {
1932             EXPECT_TRUE(pattern->CheckIfNeedMenu());
1933         } else {
1934             EXPECT_FALSE(pattern->CheckIfNeedMenu());
1935         }
1936 
1937         /**
1938          * @tc.steps: step4. Call CheckIfNeedHandle function.
1939          */
1940         if (selectOverlayMode == SelectOverlayMode::ALL ||
1941             selectOverlayMode == SelectOverlayMode::HANDLE_ONLY) {
1942             EXPECT_TRUE(pattern->CheckIfNeedHandle());
1943         } else {
1944             EXPECT_FALSE(pattern->CheckIfNeedHandle());
1945         }
1946     }
1947 }
1948 
1949 /**
1950  * @tc.name: GetHandleDiameter001
1951  * @tc.desc: Test GetHandleDiameter function.
1952  * @tc.type: FUNC
1953  */
1954 HWTEST_F(SelectOverlayTestNg, GetHandleDiameter001, TestSize.Level1)
1955 {
1956     /**
1957      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1958      */
1959     SelectOverlayInfo selectInfo;
1960     selectInfo.menuOptionItems = GetMenuOptionItems();
1961     selectInfo.singleLineHeight = NODE_ID;
1962     selectInfo.menuInfo.menuDisable = false;
1963     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1964     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1965     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1966     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1967     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1968     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1969     ASSERT_NE(selectOverlayNode, nullptr);
1970 
1971     /**
1972      * @tc.steps: step2. Create pattern and call GetHandleDiameter function.
1973      */
1974     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
1975     ASSERT_NE(pattern, nullptr);
1976     EXPECT_EQ(pattern->GetHandleDiameter(), 0.0f);
1977 }
1978 
1979 /**
1980  * @tc.name: OnDpiConfigurationUpdate001
1981  * @tc.desc: Test OnDpiConfigurationUpdate function.
1982  * @tc.type: FUNC
1983  */
1984 HWTEST_F(SelectOverlayTestNg, OnDpiConfigurationUpdate001, TestSize.Level1)
1985 {
1986     /**
1987      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
1988      */
1989     SelectOverlayInfo selectInfo;
1990     selectInfo.menuOptionItems = GetMenuOptionItems();
1991     selectInfo.singleLineHeight = NODE_ID;
1992     selectInfo.menuInfo.menuDisable = false;
1993     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1994     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
1995     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1996     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
1997     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
1998     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
1999     ASSERT_NE(selectOverlayNode, nullptr);
2000 
2001     /**
2002      * @tc.steps: step2. Create pattern and call OnDpiConfigurationUpdate function.
2003      */
2004     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2005     ASSERT_NE(pattern, nullptr);
2006     pattern->OnDpiConfigurationUpdate();
2007     EXPECT_FALSE(selectOverlayNode->GetIsExtensionMenu());
2008 }
2009 
2010 /**
2011  * @tc.name: OnColorConfigurationUpdate001
2012  * @tc.desc: Test OnColorConfigurationUpdate function.
2013  * @tc.type: FUNC
2014  */
2015 HWTEST_F(SelectOverlayTestNg, OnColorConfigurationUpdate001, TestSize.Level1)
2016 {
2017     /**
2018      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2019      */
2020     SelectOverlayInfo selectInfo;
2021     selectInfo.menuOptionItems = GetMenuOptionItems();
2022     selectInfo.singleLineHeight = NODE_ID;
2023     selectInfo.menuInfo.menuDisable = false;
2024     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2025     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2026     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2027     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2028     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2029     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2030     ASSERT_NE(selectOverlayNode, nullptr);
2031 
2032     /**
2033      * @tc.steps: step2. Create pattern and call OnColorConfigurationUpdate function.
2034      */
2035     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2036     ASSERT_NE(pattern, nullptr);
2037     pattern->OnColorConfigurationUpdate();
2038     EXPECT_FALSE(selectOverlayNode->GetIsExtensionMenu());
2039 }
2040 
2041 /**
2042  * @tc.name: OnDetachFromFrameNode001
2043  * @tc.desc: Test OnDetachFromFrameNodee function.
2044  * @tc.type: FUNC
2045  */
2046 HWTEST_F(SelectOverlayTestNg, OnDetachFromFrameNode001, TestSize.Level1)
2047 {
2048     /**
2049      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2050      */
2051     SelectOverlayInfo selectInfo;
2052     selectInfo.menuOptionItems = GetMenuOptionItems();
2053     selectInfo.singleLineHeight = NODE_ID;
__anon0c486c3f1602(bool closedByGlobalTouchEvent_) 2054     auto testCallback = [](bool closedByGlobalTouchEvent_) {
2055         callBackFlag = static_cast<int32_t>(closedByGlobalTouchEvent_);
2056         return;
2057     };
2058     selectInfo.onClose = testCallback;
2059     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2060     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2061     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2062     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2063     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2064     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2065     ASSERT_NE(selectOverlayNode, nullptr);
2066 
2067     /**
2068      * @tc.steps: step2. Create pattern and call OnDetachFromFrameNode function.
2069      */
2070     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2071     ASSERT_NE(pattern, nullptr);
2072     pattern->OnDetachFromFrameNode(
__anon0c486c3f1702() 2073         FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton", ElementRegister::GetInstance()->MakeUniqueId(), []() {
2074             return AceType::MakeRefPtr<ButtonPattern>();
2075         }).rawPtr_);
2076     EXPECT_FALSE(pattern->closedByGlobalTouchEvent_);
2077     EXPECT_EQ(callBackFlag, 0);
2078 }
2079 
2080 /**
2081  * @tc.name: SetHandleReverse001
2082  * @tc.desc: Test SetHandleReverse function.
2083  * @tc.type: FUNC
2084  */
2085 HWTEST_F(SelectOverlayTestNg, SetHandleReverse001, TestSize.Level1)
2086 {
2087     /**
2088      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2089      */
2090     SelectOverlayInfo selectInfo;
2091     selectInfo.menuOptionItems = GetMenuOptionItems();
2092     selectInfo.singleLineHeight = NODE_ID;
2093     selectInfo.menuInfo.menuDisable = false;
2094     selectInfo.isSingleHandle = false;
2095     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2096     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2097     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2098     ASSERT_NE(selectOverlayNode, nullptr);
2099     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2100     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2101     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2102     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2103 
2104     /**
2105      * @tc.steps: step2. Create pattern and call SetHandleReverse function.
2106      */
2107     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2108     ASSERT_NE(pattern, nullptr);
2109     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2110     pattern->info_->handleReverse = true;
2111     pattern->SetHandleReverse(true);
2112     EXPECT_TRUE(pattern->info_->handleReverse);
2113     pattern->SetHandleReverse(false);
2114     EXPECT_FALSE(pattern->info_->handleReverse);
2115 }
2116 
2117 /**
2118  * @tc.name: UpdateSelectMenuInfo001
2119  * @tc.desc: Test UpdateSelectMenuInfo function.
2120  * @tc.type: FUNC
2121  */
2122 HWTEST_F(SelectOverlayTestNg, UpdateSelectMenuInfo001, TestSize.Level1)
2123 {
2124     /**
2125      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2126      */
2127     SelectOverlayInfo selectInfo;
2128     selectInfo.menuOptionItems = GetMenuOptionItems();
2129     selectInfo.singleLineHeight = NODE_ID;
2130     selectInfo.menuInfo.menuDisable = false;
2131     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2132     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2133     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2134     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2135     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2136     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2137     ASSERT_NE(selectOverlayNode, nullptr);
2138 
2139     /**
2140      * @tc.steps: step2. Create pattern and call UpdateSelectMenuInfo function.
2141      */
2142     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2143     ASSERT_NE(pattern, nullptr);
2144     SelectMenuInfo infoMenu;
2145     OffsetF testCase(4, 5);
2146     infoMenu.menuOffset = testCase;
2147     pattern->UpdateSelectMenuInfo(infoMenu);
2148     EXPECT_EQ(pattern->info_->menuInfo.menuOffset, testCase);
2149 }
2150 
2151 /**
2152  * @tc.name: ShowOrHiddenMenu001
2153  * @tc.desc: Test ShowOrHiddenMenu function.
2154  * @tc.type: FUNC
2155  */
2156 HWTEST_F(SelectOverlayTestNg, ShowOrHiddenMenu001, TestSize.Level1)
2157 {
2158     /**
2159      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2160      */
2161     SelectOverlayInfo selectInfo;
2162     selectInfo.menuOptionItems = GetMenuOptionItems();
2163     selectInfo.singleLineHeight = NODE_ID;
2164     selectInfo.menuInfo.menuDisable = false;
2165     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2166     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2167     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2168     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2169     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2170     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2171     ASSERT_NE(selectOverlayNode, nullptr);
2172 
2173     /**
2174      * @tc.steps: step2. Create pattern and call ShowOrHiddenMenu function.
2175      */
2176     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2177     ASSERT_NE(pattern, nullptr);
2178     for (int i = 0; i < 2; ++i) {
2179         bool isHidden = i;
2180         for (int j = 0; j < 2; ++j) {
2181             infoPtr->menuInfo.menuIsShow = j;
2182             for (int k = 0; k < 4; ++k) {
2183                 infoPtr->firstHandle.isShow = k & 1;
2184                 infoPtr->secondHandle.isShow = k >> 1 & 1;
2185                 pattern->ShowOrHiddenMenu(isHidden);
2186                 if (infoPtr->menuInfo.menuIsShow && isHidden) {
2187                     EXPECT_FALSE(pattern->info_->menuInfo.menuIsShow);
2188                 } else if (!infoPtr->menuInfo.menuIsShow && !isHidden &&
2189                            (infoPtr->firstHandle.isShow || infoPtr->secondHandle.isShow)) {
2190                     EXPECT_TRUE(pattern->info_->menuInfo.menuIsShow);
2191                 }
2192             }
2193         }
2194     }
2195 }
2196 
2197 /**
2198  * @tc.name: DisableMenu001
2199  * @tc.desc: Test DisableMenu function.
2200  * @tc.type: FUNC
2201  */
2202 HWTEST_F(SelectOverlayTestNg, DisableMenu001, TestSize.Level1)
2203 {
2204     /**
2205      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2206      */
2207     SelectOverlayInfo selectInfo;
2208     selectInfo.menuOptionItems = GetMenuOptionItems();
2209     selectInfo.singleLineHeight = NODE_ID;
2210     selectInfo.menuInfo.menuDisable = false;
2211     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2212     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2213     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2214     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2215     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2216     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2217     ASSERT_NE(selectOverlayNode, nullptr);
2218 
2219     /**
2220      * @tc.steps: step2. Create pattern and call DisableMenu function.
2221      */
2222     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2223     ASSERT_NE(pattern, nullptr);
2224     std::vector<bool> testCases = { true, false };
2225     for (uint32_t turn = 0; turn < testCases.size(); ++turn) {
2226         pattern->DisableMenu(testCases[turn]);
2227         EXPECT_EQ(pattern->info_->menuInfo.menuDisable, testCases[turn]);
2228     }
2229 }
2230 
2231 /**
2232  * @tc.name: SetClosedByGlobalEvent001
2233  * @tc.desc: Test SetClosedByGlobalEvent function.
2234  * @tc.type: FUNC
2235  */
2236 HWTEST_F(SelectOverlayTestNg, SetClosedByGlobalEvent001, TestSize.Level1)
2237 {
2238     /**
2239      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2240      */
2241     SelectOverlayInfo selectInfo;
2242     selectInfo.menuInfo.menuDisable = true;
2243     selectInfo.menuInfo.showCut = false;
2244     selectInfo.menuInfo.showPaste = false;
2245     auto menuOptionItems = GetMenuOptionItems();
2246     selectInfo.menuOptionItems = menuOptionItems;
2247     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2248     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2249     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2250     EXPECT_NE(selectOverlayNode, nullptr);
2251 
2252     /**
2253      * @tc.steps: step2. Create pattern and call SetClosedByGlobalEvent function.
2254      */
2255     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2256     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2257     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2258     selectOverlayNode->CreateToolBar();
2259     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2260     selectOverlayNode->SetClosedByGlobalEvent(true);
2261     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2262     ASSERT_NE(pattern, nullptr);
2263     EXPECT_TRUE(pattern->closedByGlobalTouchEvent_);
2264 }
2265 
2266 /**
2267  * @tc.name: UpdateToolBar002
2268  * @tc.desc: Test select_overlay_node UpdateToolBar.
2269  * @tc.type: FUNC
2270  */
2271 HWTEST_F(SelectOverlayTestNg, UpdateToolBar002, TestSize.Level1)
2272 {
2273     /**
2274      * @tc.steps: step1. Create and initialize selectOverlayNode and pattern six situation.
2275      */
2276     SelectOverlayInfo selectInfo;
2277     auto menuOptionItems = GetMenuOptionItems();
2278     selectInfo.menuOptionItems = menuOptionItems;
2279     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2280     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2281     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2282     ASSERT_NE(selectOverlayNode, nullptr);
2283     selectOverlayNode->isExtensionMenu_ = true;
2284     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2285     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2286     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<MenuTheme>()));
2287     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
2288 
2289     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2290     selectOverlayNode->CreateToolBar();
2291     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2292 
2293     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f1802() 2294         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
2295     selectOverlayNode->selectMenuStatus_ = FrameNodeStatus::VISIBLETOGONE;
2296     selectOverlayNode->extensionMenuStatus_ = FrameNodeStatus::GONETOVISIBLE;
2297     selectOverlayNode->backButtonStatus_ = FrameNodeStatus::GONETOVISIBLE;
2298     ASSERT_NE(selectOverlayNode->backButton_, nullptr);
2299     ASSERT_NE(selectOverlayNode->selectMenu_, nullptr);
2300 
2301     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2302     ASSERT_NE(pattern, nullptr);
2303     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
__anon0c486c3f1902() 2304     infoPtr->menuCallback.onCut = []() {
2305         callBackFlag = 1;
2306         return;
2307     };
__anon0c486c3f1a02() 2308     infoPtr->menuCallback.onPaste = []() {
2309         callBackFlag = 2;
2310         return;
2311     };
2312 
2313     /**
2314     * @tc.steps: step3. call UpdateToolBar for call the other function.
2315     * @tc.expected: the isExtensionMenu_ value was successfully changed.
2316     */
2317     selectOverlayNode->UpdateToolBar(false);
2318     EXPECT_TRUE(selectOverlayNode->isExtensionMenu_);
2319     selectOverlayNode->UpdateToolBar(true);
2320     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
2321 }
2322 
2323 /**
2324  * @tc.name: ExecuteOverlayStatus001
2325  * @tc.desc: Test ExecuteOverlayStatus function.
2326  * @tc.type: FUNC
2327  */
2328 HWTEST_F(SelectOverlayTestNg, ExecuteOverlayStatus001, TestSize.Level1)
2329 {
2330     /**
2331      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2332      */
2333     SelectOverlayInfo selectInfo;
2334     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2335     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2336     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2337     ASSERT_NE(selectOverlayNode, nullptr);
2338 
2339     /**
2340      * @tc.steps: step2. Create invalid type and call ExecuteOverlayStatus function.
2341      */
2342 
2343     FrameNodeType type = (FrameNodeType) 4;
2344     selectOverlayNode->ExecuteOverlayStatus(type, FrameNodeTrigger::HIDDEN);
2345     ASSERT_NE(selectOverlayNode, nullptr);
2346 }
2347 
2348 /**
2349  * @tc.name: SetFrameNodeOpacity002
2350  * @tc.desc: Test SetFrameNodeOpacity function.
2351  * @tc.type: FUNC
2352  */
2353 HWTEST_F(SelectOverlayTestNg, SetFrameNodeOpacity002, TestSize.Level1)
2354 {
2355     /**
2356      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2357      */
2358     SelectOverlayInfo selectInfo;
2359     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2360     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2361     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2362     ASSERT_NE(selectOverlayNode, nullptr);
2363 
2364     /**
2365      * @tc.steps: step2. Create invalid type and call SetFrameNodeOpacity function.
2366      */
2367 
2368     FrameNodeType type = (FrameNodeType) 4;
2369     selectOverlayNode->SetFrameNodeOpacity(type, 0.0);
2370     ASSERT_NE(selectOverlayNode, nullptr);
2371 }
2372 
2373 /**
2374  * @tc.name: SetFrameNodeVisibility002
2375  * @tc.desc: Test SetFrameNodeVisibility function.
2376  * @tc.type: FUNC
2377  */
2378 HWTEST_F(SelectOverlayTestNg, SetFrameNodeVisibility002, TestSize.Level1)
2379 {
2380     /**
2381      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2382      */
2383     SelectOverlayInfo selectInfo;
2384     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2385     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2386     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2387     ASSERT_NE(selectOverlayNode, nullptr);
2388 
2389     /**
2390      * @tc.steps: step2. Create invalid type and call SetFrameNodeVisibility function.
2391      */
2392 
2393     FrameNodeType type = (FrameNodeType) 4;
2394     selectOverlayNode->SetFrameNodeVisibility(type, VisibleType::INVISIBLE);
2395     ASSERT_NE(selectOverlayNode, nullptr);
2396 }
2397 
2398 /**
2399  * @tc.name: SetFrameNodeStatus002
2400  * @tc.desc: Test SetFrameNodeStatus function.
2401  * @tc.type: FUNC
2402  */
2403 HWTEST_F(SelectOverlayTestNg, SetFrameNodeStatus002, TestSize.Level1)
2404 {
2405     /**
2406      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2407      */
2408     SelectOverlayInfo selectInfo;
2409     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2410     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2411     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2412     ASSERT_NE(selectOverlayNode, nullptr);
2413 
2414     /**
2415      * @tc.steps: step2. Create invalid type and call SetFrameNodeStatus function.
2416      */
2417 
2418     FrameNodeType type = (FrameNodeType) 4;
2419     selectOverlayNode->SetFrameNodeStatus(type, FrameNodeStatus::VISIBLE);
2420     ASSERT_NE(selectOverlayNode, nullptr);
2421 }
2422 
2423 /**
2424  * @tc.name: SelectOverlayNodeTest003
2425  * @tc.desc: Test IsInSelectedOrSelectOverlayArea with menuOptions.
2426  * @tc.type: FUNC
2427  */
2428 HWTEST_F(SelectOverlayTestNg, SelectOverlayNodeTest003, TestSize.Level1)
2429 {
2430     /**
2431      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
2432      */
2433     SelectOverlayInfo selectInfo;
2434     selectInfo.singleLineHeight = NODE_ID;
2435     selectInfo.menuOptionItems = GetMenuOptionItems();
2436     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2437     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2438     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2439     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2440     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2441     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2442     ASSERT_NE(selectOverlayNode, nullptr);
2443 
2444     /**
2445      * @tc.steps: step2. Create pattern and initialize HandleRegion
2446      */
2447     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2448     ASSERT_NE(pattern, nullptr);
2449     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
2450     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
2451 
2452     /**
2453      * @tc.steps: step3. Construct Point and Call IsInSelectedOrSelectOverlayArea.
2454      * @tc.expected: return false
2455      */
__anon0c486c3f1b02() 2456     pattern->info_->menuInfo.menuBuilder = []() {
2457         return ;
2458     };
2459     frameNode->geometryNode_ = nullptr;
2460     selectOverlayNode->selectMenu_ = nullptr;
2461     selectOverlayNode->extensionMenu_ = nullptr;
2462     const NG::PointF point { 9.0f, 12.0f };
2463     auto result = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point);
2464     EXPECT_FALSE(result);
2465 
2466     /**
2467      * @tc.steps: step4. Construct Point and Call IsInSelectedOrSelectOverlayArea.
2468      * @tc.expected: return true
2469      */
2470     const NG::PointF point2 { 12.0f, 12.0f };
2471     auto result2 = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point2);
2472     EXPECT_TRUE(result2);
2473 }
2474 
2475 /**
2476  * @tc.name: DispatchGoneToVisibleState01
2477  * @tc.desc: Test DispatchGoneToVisibleState function.
2478  * @tc.type: FUNC
2479  */
2480 HWTEST_F(SelectOverlayTestNg, DispatchGoneToVisibleState001, TestSize.Level1)
2481 {
2482     /**
2483      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2484      */
2485     SelectOverlayInfo selectInfo;
2486     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2487     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2488     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2489     ASSERT_NE(selectOverlayNode, nullptr);
2490 
2491     /**
2492      * @tc.steps: step2. Create invalid type and call DispatchGoneToVisibleState function.
2493      */
2494     FrameNodeType type = FrameNodeType::BACKBUTTON;
2495     FrameNodeTrigger trigger = (FrameNodeTrigger) 4;
2496     selectOverlayNode->DispatchGoneToVisibleState(type, trigger);
2497     ASSERT_NE(selectOverlayNode, nullptr);
2498 }
2499 
2500 /**
2501  * @tc.name: DispatchGoneState001
2502  * @tc.desc: Test DispatchGoneState function.
2503  * @tc.type: FUNC
2504  */
2505 HWTEST_F(SelectOverlayTestNg, DispatchGoneState001, TestSize.Level1)
2506 {
2507     /**
2508      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2509      */
2510     SelectOverlayInfo selectInfo;
2511     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2512     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2513     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2514     ASSERT_NE(selectOverlayNode, nullptr);
2515 
2516     /**
2517      * @tc.steps: step2. Create invalid type and call DispatchGoneState function.
2518      */
2519     FrameNodeType type = FrameNodeType::BACKBUTTON;
2520     FrameNodeTrigger trigger = (FrameNodeTrigger) 4;
2521     selectOverlayNode->DispatchGoneState(type, trigger);
2522     ASSERT_NE(selectOverlayNode, nullptr);
2523 }
2524 
2525 /**
2526  * @tc.name: IsTextAreaSelectAll001
2527  * @tc.desc: Test IsTextAreaSelectAll in Select Overlay algorithm.
2528  * @tc.type: FUNC
2529  */
2530 HWTEST_F(SelectOverlayTestNg, IsTextAreaSelectAll001, TestSize.Level1)
2531 {
2532     /**
2533      * @tc.steps: step1. Create selectInfo
2534      */
2535     SelectOverlayInfo selectInfo;
2536     selectInfo.singleLineHeight = NODE_ID;
2537 
2538     /**
2539     * @tc.steps: step2. Get layoutWrapper and layoutAlgorithm.
2540     */
2541     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2542     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2543     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2544     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2545     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2546     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2547     ASSERT_NE(selectOverlayNode, nullptr);
2548     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2549     ASSERT_NE(pattern, nullptr);
2550     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2551     auto layoutWrapper =
2552         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2553     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2554     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2555 
2556     /**
2557     * @tc.steps: step3. Test cases.
2558     */
2559     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2560     for (int i = 0; i < 2; ++i) {
2561         infoPtr->firstHandle.isShow = i;
2562         for (int j = 0; j < 2; ++j) {
2563             infoPtr->secondHandle.isShow = j;
2564             EXPECT_FALSE(newNode->IsTextAreaSelectAll());
2565         }
2566     }
2567 
2568     infoPtr->menuInfo.menuOffset = {0, 0};
2569     for (int i = 0; i < 2; ++i) {
2570         infoPtr->firstHandle.isShow = i;
2571         for (int j = 0; j < 2; ++j) {
2572             infoPtr->secondHandle.isShow = j;
2573             EXPECT_EQ(newNode->IsTextAreaSelectAll(), i == 0 || j == 0);
2574         }
2575     }
2576 }
2577 
2578 /**
2579  * @tc.name: ComputeExtensionMenuPosition001
2580  * @tc.desc: Test ComputeExtensionMenuPosition in Select Overlay algorithm.
2581  * @tc.type: FUNC
2582  */
2583 HWTEST_F(SelectOverlayTestNg, ComputeExtensionMenuPosition001, TestSize.Level1)
2584 {
2585     /**
2586      * @tc.steps: step1. Create selectInfo
2587      */
2588     SelectOverlayInfo selectInfo;
2589     selectInfo.singleLineHeight = NODE_ID;
2590 
2591     /**
2592     * @tc.steps: step2. Get layoutWrapper and layoutAlgorithm.
2593     */
2594     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2595     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2596     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2597     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2598     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2599     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2600     ASSERT_NE(selectOverlayNode, nullptr);
2601     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2602     ASSERT_NE(pattern, nullptr);
2603     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2604     auto layoutWrapper =
2605         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2606     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2607     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2608 
2609     /**
2610     * @tc.steps: step3. Test Case.
2611     */
2612     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2613     newNode->ComputeSelectMenuPosition(AccessibilityManager::RawPtr(layoutWrapper));
2614 }
2615 
2616 /**
2617  * @tc.name: CheckInShowArea001
2618  * @tc.desc: Test CheckInShowArea in Select Overlay algorithm.
2619  * @tc.type: FUNC
2620  */
2621 HWTEST_F(SelectOverlayTestNg, CheckInShowArea001, TestSize.Level1)
2622 {
2623     /**
2624      * @tc.steps: step1. Create selectInfo
2625      */
2626     SelectOverlayInfo selectInfo;
2627     selectInfo.singleLineHeight = NODE_ID;
2628 
2629     /**
2630     * @tc.steps: step2. Get layoutWrapper and layoutAlgorithm.
2631     */
2632     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2633     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2634     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2635     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2636     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2637     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2638     ASSERT_NE(selectOverlayNode, nullptr);
2639     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2640     ASSERT_NE(pattern, nullptr);
2641     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2642     auto layoutWrapper =
2643         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2644     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2645     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2646 
2647     /**
2648     * @tc.steps: step3. Test cases.
2649     */
2650     std::vector<RectF> handlePaintRect = {
2651         {1, 1, 1, 1}, {3, 3, 1, 1}
2652     };
2653     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2654     SelectOverlayInfo selectInfo1;
2655     selectInfo1.useFullScreen = false;
2656     selectInfo1.isSingleHandle = false;
2657     selectInfo1.showArea = {1, 1, 1, 1};
2658 
2659     for (uint32_t first = 0; first < handlePaintRect.size(); ++first) {
2660         selectInfo1.firstHandle.paintRect = handlePaintRect[first];
2661         for (uint32_t second = 0; second < handlePaintRect.size(); ++second) {
2662             selectInfo1.secondHandle.paintRect = handlePaintRect[second];
2663             bool expectRes = (first == 0) && (second == 0);
2664             EXPECT_EQ(newNode->CheckInShowArea(selectInfo1), expectRes);
2665         }
2666     }
2667 }
2668 
2669 /**
2670  * @tc.name: ComputeSelectMenuPosition001
2671  * @tc.desc: Test ComputeSelectMenuPosition in Select Overlay algorithm.
2672  * @tc.type: FUNC
2673  */
2674 HWTEST_F(SelectOverlayTestNg, ComputeSelectMenuPosition001, TestSize.Level1)
2675 {
2676     /**
2677      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
2678      */
2679     SelectOverlayInfo selectInfo;
2680     selectInfo.singleLineHeight = NODE_ID;
2681     selectInfo.menuOptionItems = GetMenuOptionItems();
2682     selectInfo.menuInfo.menuIsShow = false;
2683 
2684     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2685     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2686     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2687     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2688     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2689     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2690     ASSERT_NE(selectOverlayNode, nullptr);
2691 
2692     /**
2693     * @tc.steps: step2. Create pattern and geometryNode.
2694     */
2695     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2696     ASSERT_NE(pattern, nullptr);
2697     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2698     geometryNode->SetFrameSize({ 300, 150 });
2699 
2700     /**
2701     * @tc.steps: step3. Get layoutWrapper and layoutAlgorithm.
2702     * @tc.expected: layoutWrapper and layoutAlgorithm are created successfully
2703     */
2704     auto layoutWrapper =
2705         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2706     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2707     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2708     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2709     layoutWrapper->SetLayoutAlgorithm(
2710         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
2711 
2712     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
2713     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
2714 
2715     // create menu and extensionMenu
2716     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f1c02() 2717         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
2718     // add item to selectOverlayNode
2719     selectOverlayNode->AddChild(item);
2720     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
2721 
2722     firstGeometryNode->Reset();
2723     firstGeometryNode->SetFrameSize({ 2, 1 });
2724 
2725     RefPtr<LayoutWrapperNode> firstLayoutWrapper =
2726         AceType::MakeRefPtr<LayoutWrapperNode>(item, firstGeometryNode, item->GetLayoutProperty());
2727     ASSERT_NE(firstLayoutWrapper, nullptr);
2728     auto itemPattern = item->GetPattern<MenuPattern>();
2729     ASSERT_NE(itemPattern, nullptr);
2730     firstLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
2731     auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
2732     ASSERT_NE(itemLayoutAlgorithm, nullptr);
2733 
2734     firstLayoutWrapper->SetLayoutAlgorithm(
2735         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
2736     firstLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
2737         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
2738     layoutWrapper->AppendChild(firstLayoutWrapper);
2739 
2740     /**
2741     * @tc.steps: step4. Test cases.
2742     */
2743     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2744 
2745     infoPtr->firstHandle.paintRect = {
2746         1, 1, 1, 1
2747     };
2748     infoPtr->secondHandle.paintRect = {
2749         3, 3, 1, 1
2750     };
2751 
2752     auto ret1 = newNode->ComputeSelectMenuPosition(AccessibilityManager::RawPtr(layoutWrapper));
2753     OffsetF expectRet1(16.0, 2.0);
2754     bool equal1 = (ret1 == expectRet1);
2755     EXPECT_TRUE(equal1);
2756 
2757     infoPtr->firstHandle.isShow = false;
2758     infoPtr->menuInfo.menuOffset = {1, 1};
2759     infoPtr->secondHandle.isShow = false;
2760     infoPtr->isSingleHandle = true;
2761     auto ret2 = newNode->ComputeSelectMenuPosition(AccessibilityManager::RawPtr(layoutWrapper));
2762     OffsetF expectRet2(16.0, 1.0);
2763     bool equal2 = (ret2 == expectRet2);
2764     EXPECT_TRUE(equal2);
2765 }
2766 
2767 /**
2768  * @tc.name: NewMenuAvoidStrategy001
2769  * @tc.desc: Test NewMenuAvoidStrategy001 in Select Overlay algorithm.
2770  * @tc.type: FUNC
2771  */
2772 HWTEST_F(SelectOverlayTestNg, NewMenuAvoidStrategy001, TestSize.Level1)
2773 {
2774     /**
2775      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
2776      */
2777     SelectOverlayInfo selectInfo;
2778     selectInfo.singleLineHeight = NODE_ID;
2779     selectInfo.menuOptionItems = GetMenuOptionItems();
2780     selectInfo.menuInfo.menuIsShow = false;
2781     selectInfo.selectArea = { 100, 500, 200, 50 };
2782 
2783     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2784     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2785     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2786     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2787     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2788     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2789     ASSERT_NE(selectOverlayNode, nullptr);
2790 
2791     /**
2792     * @tc.steps: step2. Create pattern and geometryNode.
2793     */
2794     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2795     ASSERT_NE(pattern, nullptr);
2796     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2797 
2798     /**
2799     * @tc.steps: step3. Get layoutWrapper and layoutAlgorithm.
2800     * @tc.expected: layoutWrapper and layoutAlgorithm are created successfully
2801     */
2802     auto layoutWrapper =
2803         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2804     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2805     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2806     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2807 
2808     /**
2809     * @tc.steps: step4. Test cases.
2810     */
2811     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2812 
2813     auto menuWidth = 200;
2814     auto menuHeight = 100;
2815     auto ret1 = newNode->NewMenuAvoidStrategy(AccessibilityManager::RawPtr(layoutWrapper), menuWidth, menuHeight);
2816     std::cout << ret1.ToString();
2817     OffsetF expectRet1(100, 398);
2818     bool equal1 = (ret1 == expectRet1);
2819     EXPECT_TRUE(equal1);
2820 
2821     infoPtr->firstHandle.isShow = false;
2822     infoPtr->secondHandle.isShow = false;
2823     auto ret2 = newNode->NewMenuAvoidStrategy(AccessibilityManager::RawPtr(layoutWrapper), menuWidth, menuHeight);
2824     OffsetF expectRet2(100, -100);
2825     bool equal2 = (ret2 == expectRet2);
2826     EXPECT_TRUE(equal2);
2827 
2828     infoPtr->firstHandle.isShow = false;
2829     infoPtr->secondHandle.isShow = true;
2830     auto ret3 = newNode->NewMenuAvoidStrategy(AccessibilityManager::RawPtr(layoutWrapper), menuWidth, menuHeight);
2831     OffsetF expectRet3(100, 0);
2832     bool equal3 = (ret3 == expectRet3);
2833     EXPECT_TRUE(equal3);
2834 }
2835 
2836 /**
2837  * @tc.name: NewMenuAvoidStrategy002
2838  * @tc.desc: Test NewMenuAvoidStrategy002 in Select Overlay algorithm.
2839  * @tc.type: FUNC
2840  */
2841 HWTEST_F(SelectOverlayTestNg, NewMenuAvoidStrategy002, TestSize.Level1)
2842 {
2843     /**
2844      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
2845      */
2846     SelectOverlayInfo selectInfo;
2847     selectInfo.singleLineHeight = NODE_ID;
2848     selectInfo.menuOptionItems = GetMenuOptionItems();
2849     selectInfo.menuInfo.menuIsShow = false;
2850     selectInfo.selectArea = { 100, 500, 200, 50 };
2851 
2852     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2853     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2854     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2855     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2856     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2857     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2858     ASSERT_NE(selectOverlayNode, nullptr);
2859 
2860     /**
2861     * @tc.steps: step2. Create pattern and geometryNode.
2862     */
2863     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2864     ASSERT_NE(pattern, nullptr);
2865     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2866 
2867     /**
2868     * @tc.steps: step3. Get layoutWrapper and layoutAlgorithm.
2869     * @tc.expected: layoutWrapper and layoutAlgorithm are created successfully
2870     */
2871     auto layoutWrapper =
2872         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
2873     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
2874     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
2875     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
2876 
2877     /**
2878     * @tc.steps: step4. set keyboardInset_ to button.
2879     */
2880     SafeAreaInsets::Inset insetBottom;
2881     insetBottom.start = RK356_HEIGHT - 1;
2882     insetBottom.end = RK356_HEIGHT;
2883     RefPtr<SafeAreaManager> safeAreamanager = AceType::MakeRefPtr<SafeAreaManager>();
2884     safeAreamanager->keyboardInset_ = SafeAreaInsets::Inset(insetBottom);
2885 
2886     auto pipeline = PipelineContext::GetCurrentContext();
2887     CHECK_NULL_VOID(pipeline);
2888     pipeline->safeAreaManager_ = safeAreamanager;
2889 
2890     /**
2891     * @tc.steps: step5. Test cases.
2892     */
2893     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2894 
2895     auto menuWidth = 200;
2896     auto menuHeight = 100;
2897     infoPtr->firstHandle.isShow = false;
2898     infoPtr->secondHandle.isShow = false;
2899     auto ret = newNode->NewMenuAvoidStrategy(AccessibilityManager::RawPtr(layoutWrapper), menuWidth, menuHeight);
2900     OffsetF expectRet(100, 200);
2901     bool equal = (ret == expectRet);
2902     EXPECT_TRUE(equal);
2903 }
2904 
2905 /**
2906  * @tc.name: UpdateFirstAndSecondHandleInfo001
2907  * @tc.desc: Test SelectOverlayPattern UpdateFirstAndSecondHandleInfo.
2908  * @tc.type: FUNC
2909  */
2910 HWTEST_F(SelectOverlayTestNg, UpdateFirstAndSecondHandleInfo001, TestSize.Level1)
2911 {
2912     /**
2913      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
2914      */
2915     SelectOverlayInfo selectInfo;
2916     selectInfo.menuOptionItems = GetMenuOptionItems();
2917     selectInfo.singleLineHeight = NODE_ID;
2918 
2919     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2920     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2921     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2922     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2923     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2924     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2925     ASSERT_NE(selectOverlayNode, nullptr);
2926 
2927     /**
2928      * @tc.steps: step2. Create pattern.
2929      */
2930     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2931     ASSERT_NE(pattern, nullptr);
2932     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
2933 
2934     /**
2935      * @tc.steps: step3. Test cases.
2936      */
2937     SelectHandleInfo comInfoFirst;
2938     comInfoFirst.isShow = true;
2939     SelectHandleInfo comInfoSecond;
2940     comInfoSecond.isShow = false;
2941 
2942     pattern->info_->firstHandle.isShow = true;
2943     pattern->info_->secondHandle.isShow = true;
2944     pattern->UpdateFirstAndSecondHandleInfo(comInfoFirst, comInfoSecond);
2945     EXPECT_EQ(pattern->info_->firstHandle, comInfoFirst);
2946     EXPECT_EQ(pattern->info_->secondHandle, comInfoSecond);
2947 
2948     pattern->info_->firstHandle.isShow = true;
2949     pattern->info_->secondHandle.isShow = true;
2950     pattern->UpdateFirstAndSecondHandleInfo(comInfoSecond, comInfoFirst);
2951     EXPECT_EQ(pattern->info_->firstHandle, comInfoSecond);
2952     EXPECT_EQ(pattern->info_->secondHandle, comInfoFirst);
2953 
2954     pattern->info_->firstHandle.isShow = true;
2955     pattern->info_->secondHandle.isShow = true;
2956     pattern->UpdateFirstAndSecondHandleInfo(comInfoSecond, comInfoSecond);
2957     EXPECT_EQ(pattern->info_->firstHandle, comInfoSecond);
2958     EXPECT_EQ(pattern->info_->secondHandle, comInfoSecond);
2959 
2960     pattern->info_->firstHandle.isShow = true;
2961     pattern->info_->secondHandle.isShow = true;
2962     pattern->UpdateFirstAndSecondHandleInfo(comInfoFirst, comInfoFirst);
2963     EXPECT_EQ(pattern->info_->firstHandle, comInfoFirst);
2964     EXPECT_EQ(pattern->info_->firstHandle, comInfoFirst);
2965 }
2966 
2967 /**
2968  * @tc.name: BeforeCreateLayoutWrapper001
2969  * @tc.desc: Test SelectOverlayPattern BeforeCreateLayoutWrapper.
2970  * @tc.type: FUNC
2971  */
2972 HWTEST_F(SelectOverlayTestNg, BeforeCreateLayoutWrapper001, TestSize.Level1)
2973 {
2974     /**
2975      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
2976      */
2977     SelectOverlayInfo selectInfo;
2978     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
2979     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
2980     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
2981     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
2982     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
2983     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
2984     ASSERT_NE(selectOverlayNode, nullptr);
2985 
2986     /**
2987      * @tc.steps: step2. Create pattern
2988      */
2989     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
2990     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2991     ASSERT_NE(pattern, nullptr);
2992     callBackFlag = 1;
2993     pattern->BeforeCreateLayoutWrapper();
2994     EXPECT_EQ(callBackFlag, 1);
__anon0c486c3f1d02() 2995     pattern->info_->menuInfo.menuBuilder = []() {
2996         callBackFlag = 2;
2997         return;
2998     };
2999     pattern->BeforeCreateLayoutWrapper();
3000     EXPECT_EQ(callBackFlag, 1);
3001 
3002     auto layoutWrapper =
3003         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3004     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3005     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
3006     layoutWrapper->SetLayoutAlgorithm(
3007         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3008 
3009     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3010     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
3011 
3012     // create menu and extensionMenu
3013     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f1e02() 3014         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
3015     // add item to selectOverlayNode
3016     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3017     selectOverlayNode->AddChild(item);
3018     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
3019 
3020     pattern->BeforeCreateLayoutWrapper();
3021     EXPECT_EQ(callBackFlag, 1);
3022 }
3023 
3024 /**
3025  * @tc.name: AddMenuResponseRegion001
3026  * @tc.desc: Test SelectOverlayPattern AddMenuResponseRegion.
3027  * @tc.type: FUNC
3028  */
3029 HWTEST_F(SelectOverlayTestNg, AddMenuResponseRegion001, TestSize.Level1)
3030 {
3031     /**
3032      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
3033      */
3034     SelectOverlayInfo selectInfo;
3035     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3036     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3037     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3038     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3039     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3040     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3041     ASSERT_NE(selectOverlayNode, nullptr);
3042 
3043     /**
3044      * @tc.steps: step2. Create pattern
3045      */
3046     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3047     ASSERT_NE(pattern, nullptr);
3048     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3049 
3050     auto layoutWrapper =
3051         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3052     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3053     ASSERT_NE(selectOverlayLayoutAlgorithm, nullptr);
3054     layoutWrapper->SetLayoutAlgorithm(
3055         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3056 
3057     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3058     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
3059 
3060     // create menu and extensionMenu
3061     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f1f02() 3062         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
3063     // add item to selectOverlayNode
3064     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3065     selectOverlayNode->AddChild(item);
3066 
3067     std::vector<DimensionRect> tmp;
3068     auto layoutProperty = pattern->CreateLayoutProperty();
3069     frameNode->SetLayoutProperty(layoutProperty);
3070     pattern->AddMenuResponseRegion(tmp);
3071     EXPECT_EQ(tmp.size(), 2);
3072 
3073     tmp.clear();
3074     auto layoutProps = pattern->GetLayoutProperty<LayoutProperty>();
3075     layoutProps->UpdateSafeAreaInsets(SafeAreaInsets());
3076     pattern->AddMenuResponseRegion(tmp);
3077     EXPECT_EQ(tmp.size(), 2);
3078     // if TextOverlayTheme is NULL, SelectOverlayNode::CreateToolBar() still continue, result in 2 children.
3079 }
3080 
3081 /**
3082  * @tc.name: GetDefaultLineWidth001
3083  * @tc.desc: Test SelectOverlayPattern GetDefaultLineWidth.
3084  * @tc.type: FUNC
3085  */
3086 HWTEST_F(SelectOverlayTestNg, GetDefaultLineWidth001, TestSize.Level1)
3087 {
3088     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3089     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3090     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
3091     Dimension dimension = SelectHandleInfo::GetDefaultLineWidth();
3092     EXPECT_EQ(dimension.Value(), 2);
3093 }
3094 
3095 /**
3096  * @tc.name: Measure001
3097  * @tc.desc: Test SelectOverlayLayoutAlgorithm Measure.
3098  * @tc.type: FUNC
3099  */
3100 HWTEST_F(SelectOverlayTestNg, Measure001, TestSize.Level1)
3101 {
3102     SelectOverlayInfo selectInfo;
3103     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3104     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3105     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3106     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3107     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3108     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3109     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3110     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
__anon0c486c3f2002() 3111     pattern->info_->menuInfo.menuBuilder = []() { return; };
3112     auto layoutWrapper =
3113         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3114     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3115     layoutWrapper->SetLayoutAlgorithm(
3116         AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3117     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3118     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
3119     auto menu = layoutWrapper->GetOrCreateChildByIndex(0);
3120     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f2102() 3121         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
3122     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3123     selectOverlayNode->AddChild(item);
3124     firstGeometryNode->Reset();
3125     firstGeometryNode->SetFrameSize({ 2, 1 });
3126     RefPtr<LayoutWrapperNode> firstLayoutWrapper =
3127         AceType::MakeRefPtr<LayoutWrapperNode>(item, firstGeometryNode, item->GetLayoutProperty());
3128     auto itemPattern = item->GetPattern<MenuPattern>();
3129     firstLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
3130     auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
3131     firstLayoutWrapper->SetLayoutAlgorithm(
3132         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
3133     firstLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3134         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3135     layoutWrapper->AppendChild(firstLayoutWrapper);
3136     selectOverlayLayoutAlgorithm->Measure(AceType::RawPtr(layoutWrapper));
3137     EXPECT_EQ(layoutWrapper->GetChildByIndex(1), nullptr);
3138 }
3139 
3140 /**
3141  * @tc.name: Measure002
3142  * @tc.desc: Test SelectOverlayLayoutAlgorithm Measure.
3143  * @tc.type: FUNC
3144  */
3145 HWTEST_F(SelectOverlayTestNg, Measure002, TestSize.Level1)
3146 {
3147     SelectOverlayInfo selectInfo;
3148     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3149     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3150     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3151     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3152     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3153     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3154     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3155     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3156     pattern->info_->menuInfo.menuBuilder = nullptr;
3157     auto layoutWrapper =
3158         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3159     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3160     layoutWrapper->SetLayoutAlgorithm(
3161         AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3162     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3163     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
3164     auto menu = layoutWrapper->GetOrCreateChildByIndex(0);
3165     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f2202() 3166         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
3167     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3168     selectOverlayNode->AddChild(item);
3169     auto layoutProperty = pattern->CreateLayoutProperty();
3170     selectOverlayLayoutAlgorithm->Measure(AceType::RawPtr(layoutWrapper));
3171     EXPECT_EQ(layoutWrapper->GetChildByIndex(1), nullptr);
3172 }
3173 
3174 /**
3175  * @tc.name: Measure003
3176  * @tc.desc: Test SelectOverlayLayoutAlgorithm Measure.
3177  * @tc.type: FUNC
3178  */
3179 HWTEST_F(SelectOverlayTestNg, Measure003, TestSize.Level1)
3180 {
3181     /**
3182     * @tc.steps: step1. Construct the root node and set its size
3183     */
3184 
3185     SelectOverlayInfo selectInfo;
3186     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3187     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3188     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3189     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3190     auto pipeline = PipelineContext::GetCurrentContext();
3191     ASSERT_NE(pipeline->rootNode_, nullptr);
3192     ASSERT_NE(pipeline->rootNode_->GetGeometryNode(), nullptr);
3193     pipeline->rootNode_->GetGeometryNode()->SetFrameSize(SizeF(100.0f, 50.0f));
3194 
3195     /**
3196     * @tc.steps: step2. Create selectOverlayNode and initialize selectOverlayInfo properties.
3197     */
3198 
3199     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr, SelectOverlayMode::HANDLE_ONLY);
3200     frameNode->MountToParent(pipeline->rootNode_);
3201     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3202     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3203     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3204     pattern->info_->menuInfo.menuBuilder = nullptr;
3205     auto layoutWrapper =
3206         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3207 
3208     /**
3209     * @tc.steps: step3. Get the layout algorithm.
3210     * Call the measure function of the layout algorithm.
3211     */
3212 
3213     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3214     layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3215     auto layoutProperty = pattern->CreateLayoutProperty();
3216     selectOverlayLayoutAlgorithm->Measure(AceType::RawPtr(layoutWrapper));
3217 
3218     /**
3219     * @tc.steps: step4. Contrast.
3220     * expected: geometryNode size is SizeF(100.0f, 50.0f).
3221     */
3222 
3223     EXPECT_EQ(geometryNode->GetFrameSize(), SizeF(100.0f, 50.0f));
3224 }
3225 
3226 /**
3227 * @tc.name: Measure004
3228 * @tc.desc: Test SelectOverlayLayoutAlgorithm Measure.
3229 * @tc.type: FUNC
3230 */
3231 HWTEST_F(SelectOverlayTestNg, Measure004, TestSize.Level1)
3232 {
3233     /**
3234     * @tc.steps: step1. Construct the selectInfo.
3235     */
3236     SelectOverlayInfo selectInfo;
3237     SelectHandleInfo firstHandle;
3238     firstHandle.paintRect = FIRST_HANDLE_REGION;
3239     SelectHandleInfo secondHandle;
3240     secondHandle.paintRect = SECOND_HANDLE_REGION2;
3241     selectInfo.firstHandle = firstHandle;
3242     selectInfo.secondHandle = secondHandle;
3243     selectInfo.selectArea = { 100, 500, 200, 50 };
3244 
3245     /**
3246     * @tc.steps: step2. Create selectOverlayNode and initialize selectOverlayInfo properties.
3247     */
3248 
3249     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3250     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3251     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
3252     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
3253     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3254     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3255     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3256     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3257     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3258 
3259     /**
3260     * @tc.steps: step3. Set up custom menu.
3261     */
3262 
__anon0c486c3f2302() 3263     pattern->info_->menuInfo.menuBuilder = []() { return; };
3264     auto layoutWrapper =
3265         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3266     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3267     layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3268     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3269     childLayoutConstraint.maxSize = SizeF(FIRST_ITEM_SIZE);
3270 
3271     /**
3272     * @tc.steps: step4. SelectOverlayNode append child.
3273     */
3274 
3275     auto menu = layoutWrapper->GetOrCreateChildByIndex(0);
3276     auto item = FrameNode::CreateFrameNode(V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
3277         AceType::MakeRefPtr<LinearLayoutPattern>(false));
3278     selectOverlayNode->AddChild(item);
3279 
3280     auto pattern1 = item->GetPattern();
3281     ASSERT_NE(pattern1, nullptr);
3282     item->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3283         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3284     /**
3285     * @tc.steps: step5. Set DisplayWindowRectInfo.
3286     */
3287 
3288     auto pipelineContext = MockPipelineContext::GetCurrentContext();
3289     ASSERT_NE(pipelineContext, nullptr);
3290     pipelineContext->SetDisplayWindowRectInfo({ 0, 0, 800, 800 }); // 800: window width and height
3291 
3292     /**
3293     * @tc.steps: step6. Get the layout algorithm.
3294     * Call the measure function of the layout algorithm.
3295     */
3296 
3297     selectOverlayLayoutAlgorithm->Measure(AceType::RawPtr(selectOverlayNode));
3298 
3299     EXPECT_EQ(item->GetGeometryNode()->GetFrameSize(), SizeF(FIRST_ITEM_WIDTH, FIRST_ITEM_HEIGHT));
3300     EXPECT_NE(selectOverlayNode->GetChildByIndex(0), nullptr);
3301 }
3302 
3303 /**
3304 * @tc.name: Measure005
3305 * @tc.desc: Test SelectOverlayLayoutAlgorithm Measure.
3306 * @tc.type: FUNC
3307 */
3308 HWTEST_F(SelectOverlayTestNg, Measure005, TestSize.Level1)
3309 {
3310     /**
3311     * @tc.steps: step1. Construct the selectInfo.
3312     */
3313     SelectOverlayInfo selectInfo;
3314     SelectHandleInfo firstHandle;
3315     firstHandle.paintRect = FIRST_HANDLE_REGION;
3316     SelectHandleInfo secondHandle;
3317     secondHandle.paintRect = SECOND_HANDLE_REGION2;
3318     selectInfo.firstHandle = firstHandle;
3319     selectInfo.secondHandle = secondHandle;
3320     selectInfo.selectArea = { 100, 500, 200, 50 };
3321 
3322     /**
3323     * @tc.steps: step2. Create selectOverlayNode and initialize selectOverlayInfo properties.
3324     */
3325 
3326     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3327     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3328     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
3329     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
3330     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3331     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3332     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3333     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3334     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3335 
3336     /**
3337     * @tc.steps: step3. Set up custom menu.
3338     */
3339 
__anon0c486c3f2402() 3340     pattern->info_->menuInfo.menuBuilder = []() { return; };
3341     auto layoutWrapper =
3342         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3343     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3344     layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3345     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3346     childLayoutConstraint.maxSize = SizeF(FIRST_ITEM_SIZE);
3347 
3348     /**
3349     * @tc.steps: step4. SelectOverlayNode append children.
3350     */
3351 
3352     auto menu = layoutWrapper->GetOrCreateChildByIndex(0);
3353     auto item = FrameNode::GetOrCreateFrameNode("TestSelectMenu", 3,
__anon0c486c3f2502() 3354         []() { return AceType::MakeRefPtr<MenuPattern>(1, "test", MenuType::SELECT_OVERLAY_CUSTOM_MENU); });
3355     selectOverlayNode->AddChild(item);
3356 
3357     auto pattern1 = item->GetPattern();
3358     ASSERT_NE(pattern1, nullptr);
3359     item->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3360         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3361     auto item2 = FrameNode::CreateFrameNode(V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
3362         AceType::MakeRefPtr<LinearLayoutPattern>(false));
3363     item2->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3364         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3365     selectOverlayNode->AddChild(item2);
3366     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3367     firstGeometryNode->Reset();
3368     firstGeometryNode->SetFrameSize({ 2, 1 });
3369     RefPtr<LayoutWrapperNode> firstLayoutWrapper =
3370         AceType::MakeRefPtr<LayoutWrapperNode>(item, firstGeometryNode, item->GetLayoutProperty());
3371     ASSERT_NE(firstLayoutWrapper, nullptr);
3372     auto itemPattern = item->GetPattern<MenuPattern>();
3373     ASSERT_NE(itemPattern, nullptr);
3374     firstLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
3375     auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
3376     ASSERT_NE(itemLayoutAlgorithm, nullptr);
3377     firstLayoutWrapper->SetLayoutAlgorithm(
3378         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
3379     firstLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3380         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3381     layoutWrapper->AppendChild(firstLayoutWrapper);
3382 
3383     /**
3384     * @tc.steps: step5. Set DisplayWindowRectInfo.
3385     */
3386 
3387     auto pipelineContext = MockPipelineContext::GetCurrentContext();
3388     ASSERT_NE(pipelineContext, nullptr);
3389     pipelineContext->SetDisplayWindowRectInfo({ 0, 0, 800, 800 }); // 800: window width and height
3390 
3391     /**
3392     * @tc.steps: step6. Get the layout algorithm.
3393     * Call the measure function of the layout algorithm.
3394     */
3395 
3396     selectOverlayLayoutAlgorithm->Measure(AceType::RawPtr(selectOverlayNode));
3397 
3398     EXPECT_EQ(item2->GetGeometryNode()->GetFrameSize(), SizeF(FIRST_ITEM_WIDTH, FIRST_ITEM_HEIGHT));
3399     EXPECT_NE(selectOverlayNode->GetChildByIndex(0), nullptr);
3400     EXPECT_NE(selectOverlayNode->GetChildByIndex(1), nullptr);
3401 }
3402 /**
3403  * @tc.name: CalculateCustomMenuByMouseOffset
3404  * @tc.desc: Test SelectOverlayLayoutAlgorithm CalculateCustomMenuByMouseOffset.
3405  * @tc.type: FUNC
3406  */
3407 HWTEST_F(SelectOverlayTestNg, CalculateCustomMenuByMouseOffset, TestSize.Level1)
3408 {
3409     SelectOverlayInfo selectInfo;
3410     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3411     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3412     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3413     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3414     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3415     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3416     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3417     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3418     auto layoutWrapper =
3419         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3420     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3421     layoutWrapper->SetLayoutAlgorithm(
3422         AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3423     SelectMenuInfo infoMenu;
3424     OffsetF testCase(4, 5);
3425     infoMenu.menuOffset = testCase;
3426     pattern->UpdateSelectMenuInfo(infoMenu);
3427     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
3428     newNode->CalculateCustomMenuByMouseOffset(AceType::RawPtr(layoutWrapper));
3429     EXPECT_EQ(pattern->info_->menuInfo.menuOffset, testCase);
3430 }
3431 
3432 /**
3433  * @tc.name: CalculateCustomMenuLayoutConstraint
3434  * @tc.desc: Test SelectOverlayLayoutAlgorithm CalculateCustomMenuLayoutConstraint.
3435  * @tc.type: FUNC
3436  */
3437 HWTEST_F(SelectOverlayTestNg, CalculateCustomMenuLayoutConstraint, TestSize.Level1)
3438 {
3439     SelectOverlayInfo selectInfo;
3440     SelectHandleInfo firstHandle;
3441     firstHandle.paintRect = FIRST_HANDLE_REGION;
3442     SelectHandleInfo secondHandle;
3443     secondHandle.paintRect = SECOND_HANDLE_REGION2;
3444     selectInfo.firstHandle = firstHandle;
3445     selectInfo.secondHandle = secondHandle;
3446     selectInfo.selectArea = { 100, 500, 200, 50 };
3447 
3448     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3449     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3450     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
3451     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
3452     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3453     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3454     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3455     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3456     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
__anon0c486c3f2602() 3457     pattern->info_->menuInfo.menuBuilder = []() { return; };
3458     auto layoutWrapper =
3459         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3460     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3461     layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3462     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3463     childLayoutConstraint.maxSize = SizeF(FIRST_ITEM_SIZE);
3464 
3465     auto menu = layoutWrapper->GetOrCreateChildByIndex(0);
3466     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f2702() 3467         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "test", TYPE); });
3468     selectOverlayNode->AddChild(item);
3469 
3470     layoutWrapper->GetGeometryNode()->GetFrameOffset() = OFFSET_ITEM1;
3471     infoPtr->isNewAvoid = false;
3472     infoPtr->isUsingMouse = false;
3473     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
3474     newNode->CalculateCustomMenuLayoutConstraint(AceType::RawPtr(layoutWrapper), childLayoutConstraint);
3475     EXPECT_EQ(childLayoutConstraint.selfIdealSize.Height(), 45);
3476 }
3477 
3478 /**
3479  * @tc.name: CalculateCustomMenuByMouseOffset002
3480  * @tc.desc: Test SelectOverlayLayoutAlgorithm CalculateCustomMenuByMouseOffset.
3481  * @tc.type: FUNC
3482  */
3483 HWTEST_F(SelectOverlayTestNg, CalculateCustomMenuByMouseOffset002, TestSize.Level1)
3484 {
3485     SelectOverlayInfo selectInfo;
3486     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3487     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3488     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3489     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3490     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3491     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3492     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3493     RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
3494     auto layoutWrapper =
3495         AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
3496     auto selectOverlayLayoutAlgorithm = pattern->CreateLayoutAlgorithm();
3497     layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(selectOverlayLayoutAlgorithm));
3498     auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
3499     childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
3500 
3501     auto item = FrameNode::GetOrCreateFrameNode(
__anon0c486c3f2802() 3502         V2::MENU_ETS_TAG, -1, []() { return AceType::MakeRefPtr<MenuPattern>(1, "Test", TYPE); });
3503     selectOverlayNode->AddChild(item);
3504     RefPtr<GeometryNode> firstGeometryNode = AceType::MakeRefPtr<GeometryNode>();
3505     firstGeometryNode->Reset();
3506     firstGeometryNode->SetFrameSize({ 2, 1 });
3507     RefPtr<LayoutWrapperNode> firstLayoutWrapper =
3508         AceType::MakeRefPtr<LayoutWrapperNode>(item, firstGeometryNode, item->GetLayoutProperty());
3509     ASSERT_NE(firstLayoutWrapper, nullptr);
3510     auto itemPattern = item->GetPattern<MenuPattern>();
3511     ASSERT_NE(itemPattern, nullptr);
3512     firstLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
3513     auto itemLayoutAlgorithm = itemPattern->CreateLayoutAlgorithm();
3514     ASSERT_NE(itemLayoutAlgorithm, nullptr);
3515     firstLayoutWrapper->SetLayoutAlgorithm(
3516         AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(itemLayoutAlgorithm));
3517     firstLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
3518         CalcSize(CalcLength(FIRST_ITEM_WIDTH), CalcLength(FIRST_ITEM_HEIGHT)));
3519     layoutWrapper->AppendChild(firstLayoutWrapper);
3520 
3521     SelectMenuInfo infoMenu;
3522     OffsetF testCase(4, 5);
3523     infoMenu.menuOffset = testCase;
3524     pattern->UpdateSelectMenuInfo(infoMenu);
3525     auto newNode = AceType::DynamicCast<SelectOverlayLayoutAlgorithm>(selectOverlayLayoutAlgorithm);
3526     newNode->CalculateCustomMenuByMouseOffset(AceType::RawPtr(layoutWrapper));
3527     EXPECT_EQ(pattern->info_->menuInfo.menuOffset->GetX(), 4.0f);
3528 }
3529 
3530 /**
3531  * @tc.name: StartHiddenHandleTask002
3532  * @tc.desc: Test SelectOverlayPattern StartHiddenHandleTask.
3533  * @tc.type: FUNC
3534  */
3535 HWTEST_F(SelectOverlayTestNg, StartHiddenHandleTask002, TestSize.Level1)
3536 {
3537     SelectOverlayInfo selectInfo;
3538     selectInfo.menuOptionItems = GetMenuOptionItems();
3539     selectInfo.singleLineHeight = NODE_ID;
3540     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3541     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3542     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3543     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3544     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3545     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3546     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3547     bool isDelay = false;
3548     RectF area;
3549     area = RectF(1, 1, 1, 1);
3550     pattern->UpdateShowArea(area);
3551     pattern->StartHiddenHandleTask(isDelay);
3552     EXPECT_NE(pattern->GetSelectOverlayInfo(), nullptr);
3553 }
3554 
3555 /**
3556  * @tc.name: SetSelectRegionVisible001
3557  * @tc.desc: Test SelectOverlayPattern SetSelectRegionVisible.
3558  * @tc.type: FUNC
3559  */
3560 HWTEST_F(SelectOverlayTestNg, SetSelectRegionVisible001, TestSize.Level1)
3561 {
3562     SelectOverlayInfo selectInfo;
3563     selectInfo.menuOptionItems = GetMenuOptionItems();
3564     selectInfo.singleLineHeight = NODE_ID;
3565     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3566     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3567     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3568     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3569     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3570     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3571     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3572     bool isSelectRegionVisible = true;
3573     pattern->SetSelectRegionVisible(isSelectRegionVisible);
3574     EXPECT_EQ(pattern->info_->isSelectRegionVisible, true);
3575 }
3576 
3577 /**
3578  * @tc.name: SetSelectRegionVisible002
3579  * @tc.desc: Test SelectOverlayPattern SetSelectRegionVisible.
3580  * @tc.type: FUNC
3581  */
3582 HWTEST_F(SelectOverlayTestNg, SetSelectRegionVisible002, TestSize.Level1)
3583 {
3584     SelectOverlayInfo selectInfo;
3585     selectInfo.menuOptionItems = GetMenuOptionItems();
3586     selectInfo.singleLineHeight = NODE_ID;
3587     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3588     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3589     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3590     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3591     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3592     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3593     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3594     bool isSelectRegionVisible = false;
3595     pattern->SetSelectRegionVisible(isSelectRegionVisible);
3596     EXPECT_EQ(pattern->info_->isSelectRegionVisible, false);
3597 }
3598 
3599 /**
3600  * @tc.name: UpdateSelectMenuInfo002
3601  * @tc.desc: Test SelectOverlayPattern UpdateSelectMenuInfo.
3602  * @tc.type: FUNC
3603  */
3604 HWTEST_F(SelectOverlayTestNg, UpdateSelectMenuInfo002, TestSize.Level1)
3605 {
3606     SelectOverlayInfo selectInfo;
3607     selectInfo.menuOptionItems = GetMenuOptionItems();
3608     selectInfo.singleLineHeight = NODE_ID;
3609     selectInfo.menuInfo.menuDisable = false;
3610     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3611     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3612     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3613     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3614     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3615     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3616     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3617     ASSERT_NE(pattern, nullptr);
3618     SelectMenuInfo infoMenu;
3619     OffsetF testCase(0, 0);
3620     infoMenu.menuOffset = testCase;
3621     pattern->UpdateSelectMenuInfo(infoMenu);
3622     EXPECT_EQ(pattern->info_->menuInfo.menuOffset, testCase);
3623 }
3624 
3625 /**
3626  * @tc.name: CreateToolBar001
3627  * @tc.desc: Test SelectOverlayNode CreateToolBar001.
3628  * @tc.type: FUNC
3629  */
3630 HWTEST_F(SelectOverlayTestNg, CreateToolBar001, TestSize.Level1)
3631 {
3632     SelectOverlayInfo selectInfo;
3633     selectInfo.menuInfo.menuIsShow = true;
__anon0c486c3f2902() 3634     selectInfo.menuInfo.menuBuilder = []() { return; };
__anon0c486c3f2a02() 3635     selectInfo.menuCallback.onAppear = []() { return; };
__anon0c486c3f2b02() 3636     selectInfo.menuCallback.onDisappear = []() { return; };
3637     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3638     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3639     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3640     selectOverlayNode->CreateToolBar();
3641     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
3642 }
3643 
3644 /**
3645  * @tc.name: CreateToolBar002
3646  * @tc.desc: Test SelectOverlayNode CreateToolBar002.
3647  * @tc.type: FUNC
3648  */
3649 HWTEST_F(SelectOverlayTestNg, CreateToolBar002, TestSize.Level1)
3650 {
3651     SelectOverlayInfo selectInfo;
3652     selectInfo.menuInfo.menuIsShow = false;
__anon0c486c3f2c02() 3653     selectInfo.menuInfo.menuBuilder = []() { return; };
__anon0c486c3f2d02() 3654     selectInfo.menuCallback.onAppear = []() { return; };
__anon0c486c3f2e02() 3655     selectInfo.menuCallback.onDisappear = []() { return; };
3656     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3657     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3658     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3659     selectOverlayNode->CreateToolBar();
3660     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
3661 }
3662 
3663 /**
3664  * @tc.name: AddSystemDefaultOptions001
3665  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
3666  * @tc.type: FUNC
3667  */
3668 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions001, TestSize.Level1)
3669 {
3670     SelectOverlayInfo selectInfo;
3671     selectInfo.menuInfo.showCut = true;
3672     selectInfo.menuInfo.showCopy = true;
3673     selectInfo.menuInfo.showPaste = true;
3674     selectInfo.menuInfo.showCopyAll = true;
3675     selectInfo.menuInfo.showTranslate = true;
3676     selectInfo.menuInfo.showSearch = true;
3677     selectInfo.menuInfo.showShare = true;
3678     selectInfo.menuInfo.showCameraInput = true;
3679     float maxWidth = 2.0f;
3680     float allocatedSize = 3.0f;
3681     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3682     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3683     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3684     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3685     EXPECT_TRUE(result);
3686 }
3687 
3688 /**
3689  * @tc.name: AddSystemDefaultOptions002
3690  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
3691  * @tc.type: FUNC
3692  */
3693 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions002, TestSize.Level1)
3694 {
3695     SelectOverlayInfo selectInfo;
3696     selectInfo.menuInfo.showCut = true;
3697     selectInfo.menuInfo.showCopy = false;
3698     selectInfo.menuInfo.showPaste = true;
3699     selectInfo.menuInfo.showCopyAll = true;
3700     selectInfo.menuInfo.showTranslate = false;
3701     selectInfo.menuInfo.showSearch = false;
3702     selectInfo.menuInfo.showShare = false;
3703     selectInfo.menuInfo.showCameraInput = true;
3704     float maxWidth = 2.0f;
3705     float allocatedSize = 3.0f;
3706     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3707     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3708     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3709     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3710     EXPECT_TRUE(result);
3711 }
3712 
3713 /**
3714  * @tc.name: AddSystemDefaultOptions003
3715  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
3716  * @tc.type: FUNC
3717  */
3718 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions003, TestSize.Level1)
3719 {
3720     SelectOverlayInfo selectInfo;
3721     selectInfo.menuInfo.showCut = true;
3722     selectInfo.menuInfo.showCopy = false;
3723     selectInfo.menuInfo.showPaste = false;
3724     selectInfo.menuInfo.showCopyAll = true;
3725     selectInfo.menuInfo.showTranslate = false;
3726     selectInfo.menuInfo.showSearch = false;
3727     selectInfo.menuInfo.showShare = false;
3728     selectInfo.menuInfo.showCameraInput = true;
3729     float maxWidth = 2.0f;
3730     float allocatedSize = 3.0f;
3731     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3732     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3733     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3734     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3735     EXPECT_TRUE(result);
3736 }
3737 
3738 /**
3739  * @tc.name: AddSystemDefaultOptions004
3740  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
3741  * @tc.type: FUNC
3742  */
3743 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions004, TestSize.Level1)
3744 {
3745     SelectOverlayInfo selectInfo;
3746     selectInfo.menuInfo.showCut = true;
3747     selectInfo.menuInfo.showCopy = false;
3748     selectInfo.menuInfo.showPaste = false;
3749     selectInfo.menuInfo.showCopyAll = false;
3750     selectInfo.menuInfo.showTranslate = false;
3751     selectInfo.menuInfo.showSearch = false;
3752     selectInfo.menuInfo.showShare = false;
3753     selectInfo.menuInfo.showCameraInput = true;
3754     float maxWidth = 2.0f;
3755     float allocatedSize = 3.0f;
3756     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3757     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3758     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3759     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3760     EXPECT_TRUE(result);
3761 }
3762 
3763 /**
3764  * @tc.name: AddSystemDefaultOptions005
3765  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
3766  * @tc.type: FUNC
3767  */
3768 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions005, TestSize.Level1)
3769 {
3770     SelectOverlayInfo selectInfo;
3771     selectInfo.menuInfo.showCut = true;
3772     selectInfo.menuInfo.showCopy = false;
3773     selectInfo.menuInfo.showPaste = false;
3774     selectInfo.menuInfo.showCopyAll = false;
3775     selectInfo.menuInfo.showTranslate = false;
3776     selectInfo.menuInfo.showSearch = false;
3777     selectInfo.menuInfo.showShare = false;
3778     selectInfo.menuInfo.showCameraInput = false;
3779     float maxWidth = 2.0f;
3780     float allocatedSize = 3.0f;
3781     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3782     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3783     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3784     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3785     EXPECT_TRUE(result);
3786 }
3787 
3788 /**
3789  * @tc.name: AddSystemDefaultOptions006
3790  * @tc.desc: Test AddSystemDefaultOptions different parameter .
3791  * @tc.type: FUNC
3792  */
3793 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions006, TestSize.Level1)
3794 {
3795     /**
3796      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
3797     */
3798     SelectOverlayInfo selectInfo;
3799     selectInfo.menuInfo.showCut = true;
3800     selectInfo.menuInfo.showCopy = false;
3801     selectInfo.menuInfo.showPaste = false;
3802     selectInfo.menuInfo.showCopyAll = false;
3803     selectInfo.menuInfo.showTranslate = false;
3804     selectInfo.menuInfo.showSearch = false;
3805     selectInfo.menuInfo.showShare = false;
3806     selectInfo.menuInfo.showCameraInput = false;
3807     float maxWidth = 3.0f;
3808     float allocatedSize = 2.0f;
3809     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3810     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3811     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3812     auto pipeline = PipelineContext::GetCurrentContext();
3813     CHECK_NULL_VOID(pipeline);
3814     /**
3815      * @tc.steps: step2. call AddSystemDefaultOptions.
3816      * @tc.expected: the value was successfully changed.
3817      */
3818     pipeline->SetFontScale(1.85f);
3819     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3820     EXPECT_FALSE(result);
3821 }
3822 
3823 /**
3824  * @tc.name: BuildButton001
3825  * @tc.desc: Test BuildButton different parameter .
3826  * @tc.type: FUNC
3827  */
3828 HWTEST_F(SelectOverlayTestNg, BuildButton001, TestSize.Level1)
3829 {
3830     /**
3831      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
3832     */
3833     SelectOverlayInfo selectInfo;
3834     selectInfo.menuInfo.showCut = true;
3835     selectInfo.menuInfo.showCopy = false;
3836     selectInfo.menuInfo.showPaste = false;
3837     selectInfo.menuInfo.showCopyAll = false;
3838     selectInfo.menuInfo.showCameraInput = false;
3839     float maxWidth = 3.0f;
3840     float allocatedSize = 2.0f;
3841     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
__anon0c486c3f2f02() 3842     infoPtr->menuCallback.onCut = []() {
3843         callBackFlag = 1;
3844         return ;
3845     };
3846     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3847     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3848     EXPECT_NE(selectOverlayNode->selectMenuInner_, nullptr);
3849 
3850     /**
3851      * @tc.steps: step2. call BuildButton.
3852      */
3853     bool result = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
3854     EXPECT_FALSE(result);
3855     auto button = AceType::DynamicCast<FrameNode>(selectOverlayNode->selectMenuInner_->GetLastChild());
3856     EXPECT_NE(button, nullptr);
3857     auto gestureEventHubPtr = button->GetOrCreateGestureEventHub();
3858     EXPECT_NE(gestureEventHubPtr, nullptr);
3859     if (gestureEventHubPtr->clickEventActuator_) {
3860         auto playClickCallback = gestureEventHubPtr->clickEventActuator_->userCallback_->callback_;
3861         GestureEvent gestureEvent = GestureEvent();
3862         playClickCallback(gestureEvent);
3863     }
3864 
3865     if (gestureEventHubPtr->userParallelClickEventActuator_) {
3866         auto playClickCallback = gestureEventHubPtr->userParallelClickEventActuator_->userCallback_->callback_;
3867         GestureEvent gestureEvent = GestureEvent();
3868         playClickCallback(gestureEvent);
3869     }
3870     EXPECT_NE(selectOverlayNode->isShowInDefaultMenu_[0], false);
3871 }
3872 
3873 /**
3874  * @tc.name: CreateSelectOverlayNode001
3875  * @tc.desc: Test CreateSelectOverlayNode.
3876  * @tc.type: FUNC
3877  */
3878 HWTEST_F(SelectOverlayTestNg, CreateSelectOverlayNode001, TestSize.Level1)
3879 {
3880     /**
3881      * @tc.steps: step1. Create selectOverlayNode, pattern, canvas, context
3882      * and initialize properties.
3883     */
3884     SelectOverlayInfo selectInfo;
3885     selectInfo.menuInfo.menuDisable = true;
3886     selectInfo.menuInfo.showCut = false;
3887     selectInfo.menuInfo.showPaste = false;
3888     selectInfo.menuInfo.showTranslate = false;
3889     selectInfo.menuInfo.showSearch = false;
3890     selectInfo.menuInfo.showShare = false;
3891     auto menuOptionItems = GetMenuOptionItems();
3892     selectInfo.menuOptionItems = menuOptionItems;
3893     selectInfo.singleLineHeight = NODE_ID;
3894     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3895     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3896     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3897     ASSERT_NE(selectOverlayNode, nullptr);
3898     selectOverlayNode->CreateToolBar();
3899     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3900     ASSERT_NE(pattern, nullptr);
3901     pattern->CreateNodePaintMethod();
3902     /**
3903      * @tc.steps: step2. set param and call function.
3904      */
3905     selectOverlayNode->DispatchVisibleToGoneState(FrameNodeType::SELECTMENU, FrameNodeTrigger::SHOW);
3906     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
3907     /**
3908      * @tc.steps: step2. set param and call function.
3909      */
3910     selectOverlayNode->DispatchGoneToVisibleState(FrameNodeType::SELECTMENU, FrameNodeTrigger::HIDE);
3911     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
3912 }
3913 
3914 /**
3915  * @tc.name: DispatchVisibleToGoneState001
3916  * @tc.desc: Test DispatchVisibleToGoneState.
3917  * @tc.type: FUNC
3918  */
3919 HWTEST_F(SelectOverlayTestNg, DispatchVisibleToGoneState001, TestSize.Level1)
3920 {
3921     /**
3922      * @tc.steps: step1. Create selectOverlayNode, pattern, canvas, context
3923      * and initialize properties.
3924     */
3925     SelectOverlayInfo selectInfo;
3926     selectInfo.menuInfo.menuDisable = true;
3927     selectInfo.menuInfo.showCut = false;
3928     selectInfo.menuInfo.showPaste = false;
3929     selectInfo.menuInfo.showTranslate = false;
3930     selectInfo.menuInfo.showSearch = false;
3931     selectInfo.menuInfo.showShare = false;
3932     auto menuOptionItems = GetMenuOptionItems();
3933     selectInfo.menuOptionItems = menuOptionItems;
3934     selectInfo.singleLineHeight = NODE_ID;
3935     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3936     infoPtr->isUsingMouse = false;
3937     infoPtr->isUseOverlayNG = true;
3938     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3939     EXPECT_NE(frameNode, nullptr);
3940 }
3941 
3942 /**
3943  * @tc.name: UpdateToolBar003
3944  * @tc.desc: Test SelectOverlayNode UpdateToolBar.
3945  * @tc.type: FUNC
3946  */
3947 HWTEST_F(SelectOverlayTestNg, UpdateToolBar003, TestSize.Level1)
3948 {
3949     SelectOverlayInfo selectInfo;
3950     auto menuOptionItems = GetMenuOptionItems();
3951     selectInfo.menuOptionItems = menuOptionItems;
3952     selectInfo.menuInfo.showCut = true;
3953     selectInfo.menuInfo.showCopy = true;
3954     selectInfo.menuInfo.menuDisable = true;
3955     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3956     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3957     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3958     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 1);
3959     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
3960     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
3961     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
3962     selectOverlayNode->CreateToolBar();
3963     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
3964     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3002() 3965         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
3966     selectOverlayNode->selectMenuStatus_ = FrameNodeStatus::VISIBLETOGONE;
3967     selectOverlayNode->extensionMenuStatus_ = FrameNodeStatus::GONETOVISIBLE;
3968     selectOverlayNode->backButtonStatus_ = FrameNodeStatus::GONETOVISIBLE;
3969     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
3970     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
__anon0c486c3f3102() 3971     infoPtr->menuCallback.onCut = []() { return; };
__anon0c486c3f3202() 3972     infoPtr->menuCallback.onPaste = []() { return; };
__anon0c486c3f3302() 3973     infoPtr->menuInfo.menuBuilder = []() { return; };
3974     selectOverlayNode->backButton_ = nullptr;
3975     selectOverlayNode->UpdateToolBar(false);
3976     selectOverlayNode->UpdateToolBar(true);
3977     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
3978 }
3979 
3980 /**
3981  * @tc.name: AddExtensionMenuOptions
3982  * @tc.desc: Test SelectOverlayNode AddExtensionMenuOptions.
3983  * @tc.type: FUNC
3984  */
3985 HWTEST_F(SelectOverlayTestNg, AddExtensionMenuOptions, TestSize.Level1)
3986 {
3987     SelectOverlayInfo selectInfo;
3988     auto menuOptionItems = GetMenuOptionItems();
3989     selectInfo.menuOptionItems = menuOptionItems;
3990     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
3991     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
3992     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
3993     for (int i = 0; i < 7; i++) {
3994         selectOverlayNode->isShowInDefaultMenu_[i] = false;
3995     }
3996     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
3997     selectOverlayNode->AddExtensionMenuOptions(infoPtr, -1);
3998     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
3999 }
4000 
4001 /**
4002  * @tc.name: UpdateSelectMenuInfo003
4003  * @tc.desc: Test SelectOverlayPattern UpdateSelectMenuInfo.
4004  * @tc.type: FUNC
4005  */
4006 HWTEST_F(SelectOverlayTestNg, UpdateSelectMenuInfo003, TestSize.Level1)
4007 {
4008     SelectOverlayInfo selectInfo;
4009     selectInfo.menuOptionItems = GetMenuOptionItems();
4010     selectInfo.singleLineHeight = NODE_ID;
4011     selectInfo.menuInfo.menuDisable = false;
4012     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4013     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4014     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4015     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4016     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4017     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4018     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
__anon0c486c3f3402(SelectMenuInfo& infoMenu) 4019     auto updateAction = [](SelectMenuInfo& infoMenu) {
4020         return;
4021     };
4022     pattern->UpdateSelectMenuInfo(updateAction);
4023     std::function<void(SelectMenuInfo& infoMenu)> updateAction1 = nullptr;
4024     pattern->UpdateSelectMenuInfo(updateAction1);
4025     EXPECT_FALSE(selectInfo.menuInfo.menuDisable);
4026 }
4027 
4028 /**
4029  * @tc.name: CreateCustomSelectOverlay
4030  * @tc.desc: Test SelectOverlayNode CreateCustomSelectOverlay.
4031  * @tc.type: FUNC
4032  */
4033 HWTEST_F(SelectOverlayTestNg, CreateCustomSelectOverlay, TestSize.Level1)
4034 {
4035     SelectOverlayInfo selectInfo;
4036     selectInfo.menuInfo.menuIsShow = true;
4037     selectInfo.menuOptionItems = GetMenuOptionItems();
4038     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
__anon0c486c3f3502() 4039     infoPtr->menuInfo.menuBuilder = []() {
4040         return ;
4041     };
4042     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4043     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4044     selectOverlayNode->CreateCustomSelectOverlay(infoPtr);
4045     selectInfo.menuInfo.menuIsShow = false;
4046     selectOverlayNode->CreateCustomSelectOverlay(infoPtr);
4047     EXPECT_NE(selectOverlayNode->selectMenuStatus_, FrameNodeStatus::GONE);
4048 }
4049 
4050 /**
4051  * @tc.name: SelectOverlayModifier001
4052  * @tc.desc: Test selectOverlay modifier function.
4053  * @tc.type: FUNC
4054  */
4055 HWTEST_F(SelectOverlayTestNg, SelectOverlayModifier001, TestSize.Level1)
4056 {
4057     /**
4058      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
4059      */
4060     SelectOverlayInfo selectInfo;
4061     selectInfo.menuInfo.menuDisable = true;
4062     selectInfo.menuInfo.showCut = false;
4063     selectInfo.menuInfo.showPaste = false;
4064     auto menuOptionItems = GetMenuOptionItems();
4065     selectInfo.menuOptionItems = menuOptionItems;
4066     selectInfo.singleLineHeight = NODE_ID;
4067     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4068     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4069     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4070     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4071     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4072     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4073     EXPECT_NE(selectOverlayNode, nullptr);
4074     selectOverlayNode->CreateToolBar();
4075     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4076     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3602() 4077         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4078     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4079     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
4080     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
4081     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4082     EXPECT_NE(pattern, nullptr);
4083     RefPtr<NodePaintMethod> paintMethod = pattern->CreateNodePaintMethod();
4084     EXPECT_NE(paintMethod, nullptr);
4085     paintMethod = pattern->CreateNodePaintMethod();
4086     EXPECT_NE(paintMethod, nullptr);
4087     auto selectOverlayPaintMethod = AceType::DynamicCast<SelectOverlayPaintMethod>(paintMethod);
4088     EXPECT_NE(selectOverlayPaintMethod, nullptr);
4089     auto contentModifier = pattern->selectOverlayContentModifier_;
4090     EXPECT_NE(contentModifier, nullptr);
4091     auto selectOverlayModifier = pattern->selectOverlayModifier_;
4092     ASSERT_NE(selectOverlayModifier, nullptr);
4093 
4094     /**
4095      * @tc.steps: step2. Test selectOverlay modifier SelectOverlayModifier function.
4096      */
4097     selectOverlayModifier->SetDefaultCircleAndLineEndOffset();
4098     Dimension radius = 2.0_vp;
4099     selectOverlayModifier->pointRadius_ =
4100         AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
4101     selectOverlayModifier->SetOtherPointRadius(radius);
4102     EXPECT_EQ(radius, 2.0_vp);
4103 }
4104 
4105 /**
4106  * @tc.name: IsInSelectedOrSelectOverlayArea003
4107  * @tc.desc: Test IsInSelectedOrSelectOverlayArea without menuOptions.
4108  * @tc.type: FUNC
4109  */
4110 HWTEST_F(SelectOverlayTestNg, IsInSelectedOrSelectOverlayArea003, TestSize.Level1)
4111 {
4112     /**
4113      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
4114      */
4115     SelectOverlayInfo selectInfo;
4116     selectInfo.singleLineHeight = NODE_ID;
4117     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4118     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4119     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4120     ASSERT_NE(selectOverlayNode, nullptr);
4121     /**
4122      * @tc.steps: step2. Create pattern and initialize HandleRegion
4123      */
4124     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4125     ASSERT_NE(pattern, nullptr);
4126     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
4127     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
4128     /**
4129      * @tc.steps: step3. Construct Point and Call IsInSelectedOrSelectOverlayArea.
4130      * @tc.expected: return false
4131      */
4132     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3702() 4133         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4134     const NG::PointF point { 9.0f, 12.0f };
4135     auto result = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point);
4136     EXPECT_FALSE(result);
4137 }
4138 
4139 /**
4140  * @tc.name: IsInSelectedOrSelectOverlayArea004
4141  * @tc.desc: Test IsInSelectedOrSelectOverlayArea without patternChildren is not empty.
4142  * @tc.type: FUNC
4143  */
4144 HWTEST_F(SelectOverlayTestNg, IsInSelectedOrSelectOverlayArea004, TestSize.Level1)
4145 {
4146     /**
4147      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
4148      */
4149     SelectOverlayInfo selectInfo;
4150     selectInfo.singleLineHeight = NODE_ID;
4151     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4152     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4153     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4154     ASSERT_NE(selectOverlayNode, nullptr);
4155     /**
4156      * @tc.steps: step2. Create pattern and initialize HandleRegion
4157      */
4158     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4159     ASSERT_NE(pattern, nullptr);
4160     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
4161     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
4162 
4163     /**
4164      * @tc.steps: step3. Construct Point and Call IsInSelectedOrSelectOverlayArea.
4165      * @tc.expected: return false
4166      */
4167     const NG::PointF point { 9.0f, 12.0f };
4168     auto result = selectOverlayNode->IsInSelectedOrSelectOverlayArea(point);
4169     EXPECT_FALSE(result);
4170 }
4171 
4172 /**
4173  * @tc.name: UpdateMenuInner002
4174  * @tc.desc: Test UpdateMenuInner paddingWidth
4175  * @tc.type: FUNC
4176  */
4177 HWTEST_F(SelectOverlayTestNg, UpdateMenuInner002, TestSize.Level1)
4178 {
4179     /**
4180      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
4181      */
4182     SelectOverlayInfo selectInfo;
4183     selectInfo.singleLineHeight = NODE_ID;
4184     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4185     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4186     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4187     ASSERT_NE(selectOverlayNode, nullptr);
4188     /**
4189      * @tc.steps: step2. Create pattern and initialize HandleRegion
4190      */
4191     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4192     ASSERT_NE(pattern, nullptr);
4193     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
4194     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
4195     /**
4196      * @tc.steps: step3. Call UpdateMenuInner.
4197      * @tc.expected: return false
4198      */
4199 
4200     auto pipeline = PipelineContext::GetCurrentContext();
4201     CHECK_NULL_VOID(pipeline);
4202 
4203     selectOverlayNode->UpdateMenuInner(infoPtr);
4204     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
4205 }
4206 
4207 /**
4208  * @tc.name: UpdateMenuInner003
4209  * @tc.desc: Test UpdateMenuInner
4210  * @tc.type: FUNC
4211  */
4212 HWTEST_F(SelectOverlayTestNg, UpdateMenuInner003, TestSize.Level1)
4213 {
4214     /**
4215      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
4216      */
4217     SelectOverlayInfo selectInfo;
4218     selectInfo.singleLineHeight = NODE_ID;
4219     auto menuOptionItems = GetMenuOptionItems();
4220     selectInfo.menuOptionItems = menuOptionItems;
4221     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4222     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4223     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4224     ASSERT_NE(selectOverlayNode, nullptr);
4225     /**
4226      * @tc.steps: step2. Create pattern and initialize HandleRegion
4227      */
4228     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4229     ASSERT_NE(pattern, nullptr);
4230     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
4231     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
4232     /**
4233      * @tc.steps: step3. Call UpdateMenuInner.
4234      * @tc.expected: return false
4235      */
4236     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3802() 4237         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4238     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4239     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
4240 
4241     selectOverlayNode->UpdateMenuInner(infoPtr);
4242     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
4243 }
4244 
4245 /**
4246  * @tc.name: UpdateMenuInner004
4247  * @tc.desc: Test UpdateMenuInner
4248  * @tc.type: FUNC
4249  */
4250 HWTEST_F(SelectOverlayTestNg, UpdateMenuInner004, TestSize.Level1)
4251 {
4252     /**
4253      * @tc.steps: step1. Create selectOverlayNode and initialize selectOverlayInfo properties.
4254      */
4255     SelectOverlayInfo selectInfo;
4256     selectInfo.singleLineHeight = NODE_ID;
4257     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4258     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4259     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4260     ASSERT_NE(selectOverlayNode, nullptr);
4261     /**
4262      * @tc.steps: step2. Create pattern and initialize HandleRegion
4263      */
4264     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4265     ASSERT_NE(pattern, nullptr);
4266     pattern->firstHandleRegion_ = FIRST_HANDLE_REGION;
4267     pattern->secondHandleRegion_ = SECOND_HANDLE_REGION;
4268     /**
4269      * @tc.steps: step3. Call UpdateMenuInner.
4270      * @tc.expected: return false
4271      */
4272 
4273     auto pipeline = PipelineContext::GetCurrentContext();
4274     CHECK_NULL_VOID(pipeline);
4275 
4276     selectOverlayNode->UpdateMenuInner(infoPtr);
4277     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
4278 }
4279 
4280 /**
4281  * @tc.name: ExecuteOverlayStatus003
4282  * @tc.desc: Test ExecuteOverlayStatus function.
4283  * @tc.type: FUNC
4284  */
4285 HWTEST_F(SelectOverlayTestNg, ExecuteOverlayStatus003, TestSize.Level1)
4286 {
4287     /**
4288      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
4289      */
4290     SelectOverlayInfo selectInfo;
4291     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4292     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4293     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4294     ASSERT_NE(selectOverlayNode, nullptr);
4295 
4296     /**
4297      * @tc.steps: step2. Create invalid type and call ExecuteOverlayStatus function.
4298      */
4299 
4300     selectOverlayNode->ExecuteOverlayStatus(FrameNodeType::BACKBUTTON, FrameNodeTrigger::HIDDEN);
4301     ASSERT_NE(selectOverlayNode, nullptr);
4302 }
4303 
4304 /**
4305  * @tc.name: ExecuteOverlayStatus002
4306  * @tc.desc: Test ExecuteOverlayStatus function.
4307  * @tc.type: FUNC
4308  */
4309 HWTEST_F(SelectOverlayTestNg, ExecuteOverlayStatus002, TestSize.Level1)
4310 {
4311     /**
4312      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
4313      */
4314     SelectOverlayInfo selectInfo;
4315     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4316     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4317     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4318     ASSERT_NE(selectOverlayNode, nullptr);
4319 
4320     /**
4321      * @tc.steps: step2. Create invalid type and call ExecuteOverlayStatus function.
4322      */
4323 
4324     selectOverlayNode->ExecuteOverlayStatus(FrameNodeType::EXTENSIONMENU, FrameNodeTrigger::HIDDEN);
4325     ASSERT_NE(selectOverlayNode, nullptr);
4326 }
4327 
4328 
4329 /**
4330  * @tc.name: AddSystemDefaultOptions007
4331  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
4332  * @tc.type: FUNC
4333  */
4334 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions007, TestSize.Level1)
4335 {
4336     SelectOverlayInfo selectInfo;
4337     selectInfo.menuInfo.showCopy = true;
4338     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4339     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4340     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4341 
4342     float maxWidth = 8.0f;
4343     float allocatedSize = 11.0f;
4344     auto ret = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
4345     EXPECT_TRUE(ret);
4346 }
4347 
4348 /**
4349  * @tc.name: AddSystemDefaultOptions008
4350  * @tc.desc: Test SelectOverlayNode AddSystemDefaultOptions.
4351  * @tc.type: FUNC
4352  */
4353 HWTEST_F(SelectOverlayTestNg, AddSystemDefaultOptions008, TestSize.Level1)
4354 {
4355     SelectOverlayInfo selectInfo;
4356     selectInfo.menuInfo.showCut = true;
4357     selectInfo.menuInfo.showCopy = true;
4358     selectInfo.menuInfo.showTranslate = true;
4359     selectInfo.menuInfo.showSearch = true;
4360     selectInfo.menuInfo.showShare = true;
4361     selectInfo.menuInfo.menuDisable = true;
4362     selectInfo.menuInfo.showCameraInput = true;
4363     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4364     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4365     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4366     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4367     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4368     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4369     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3902() 4370         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4371     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4372 
4373     float maxWidth = 8.0f;
4374     float allocatedSize = 11.0f;
4375     auto ret = selectOverlayNode->AddSystemDefaultOptions(maxWidth, allocatedSize);
4376     EXPECT_TRUE(ret);
4377 }
4378 
4379 /**
4380  * @tc.name: ShowShare002
4381  * @tc.desc: Test SelectOverlayNode ShowShare.
4382  * @tc.type: FUNC
4383  */
4384 HWTEST_F(SelectOverlayTestNg, ShowShare002, TestSize.Level1)
4385 {
4386     SelectOverlayInfo selectInfo;
4387     selectInfo.menuInfo.showCut = true;
4388     selectInfo.menuInfo.showCopy = true;
4389     selectInfo.menuInfo.showTranslate = true;
4390     selectInfo.menuInfo.showSearch = true;
4391     selectInfo.menuInfo.showShare = true;
4392     selectInfo.menuInfo.menuDisable = true;
4393     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4394     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4395     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4396 
4397     float maxWidth = 8.0f;
4398     float allocatedSize = 14.0f;
4399     selectOverlayNode->ShowShare(maxWidth, allocatedSize, infoPtr);
4400     EXPECT_TRUE(selectOverlayNode->isDefaultBtnOverMaxWidth_);
4401 }
4402 
4403 /**
4404  * @tc.name: ShowShare003
4405  * @tc.desc: Test SelectOverlayNode ShowShare.
4406  * @tc.type: FUNC
4407  */
4408 HWTEST_F(SelectOverlayTestNg, ShowShare003, TestSize.Level1)
4409 {
4410     SelectOverlayInfo selectInfo;
4411     selectInfo.menuInfo.showCut = true;
4412     selectInfo.menuInfo.showCopy = true;
4413     selectInfo.menuInfo.showTranslate = true;
4414     selectInfo.menuInfo.showSearch = true;
4415     selectInfo.menuInfo.showShare = true;
4416     selectInfo.menuInfo.menuDisable = true;
4417     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4418     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4419     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4420 
4421     float maxWidth = 8.0f;
4422     float allocatedSize = 13.0f;
4423     selectOverlayNode->ShowShare(maxWidth, allocatedSize, infoPtr);
4424     EXPECT_TRUE(selectOverlayNode->isDefaultBtnOverMaxWidth_);
4425 }
4426 
4427 /**
4428  * @tc.name: ShowCamera001
4429  * @tc.desc: Test SelectOverlayNode ShowCamera.
4430  * @tc.type: FUNC
4431  */
4432 HWTEST_F(SelectOverlayTestNg, ShowCamera001, TestSize.Level1)
4433 {
4434     SelectOverlayInfo selectInfo;
4435     selectInfo.menuInfo.showCut = true;
4436     selectInfo.menuInfo.showCopy = true;
4437     selectInfo.menuInfo.showTranslate = true;
4438     selectInfo.menuInfo.showSearch = true;
4439     selectInfo.menuInfo.showShare = true;
4440     selectInfo.menuInfo.menuDisable = true;
4441     selectInfo.menuInfo.showCameraInput = true;
4442     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4443     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4444     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4445     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4446     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4447     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4448     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3a02() 4449         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4450     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4451 
4452     float maxWidth = 8.0f;
4453     float allocatedSize = 14.0f;
4454     selectOverlayNode->ShowCamera(maxWidth, allocatedSize, infoPtr);
4455     EXPECT_TRUE(selectOverlayNode->isDefaultBtnOverMaxWidth_);
4456 }
4457 
4458 /**
4459  * @tc.name: ShowCamera002
4460  * @tc.desc: Test SelectOverlayNode ShowCamera.
4461  * @tc.type: FUNC
4462  */
4463 HWTEST_F(SelectOverlayTestNg, ShowCamera002, TestSize.Level1)
4464 {
4465     SelectOverlayInfo selectInfo;
4466     selectInfo.menuInfo.showCut = true;
4467     selectInfo.menuInfo.showCopy = true;
4468     selectInfo.menuInfo.showTranslate = true;
4469     selectInfo.menuInfo.showSearch = true;
4470     selectInfo.menuInfo.showShare = true;
4471     selectInfo.menuInfo.menuDisable = true;
4472     selectInfo.menuInfo.showCameraInput = true;
4473     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4474     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4475     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4476     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4477     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4478     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4479     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3b02() 4480         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4481     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4482 
4483     float maxWidth = 8.0f;
4484     float allocatedSize = 11.0f;
4485     selectOverlayNode->ShowCamera(maxWidth, allocatedSize, infoPtr);
4486     EXPECT_TRUE(selectOverlayNode->isDefaultBtnOverMaxWidth_);
4487 }
4488 
4489 /**
4490  * @tc.name: ShowCamera003
4491  * @tc.desc: Test SelectOverlayNode ShowCamera.
4492  * @tc.type: FUNC
4493  */
4494 HWTEST_F(SelectOverlayTestNg, ShowCamera003, TestSize.Level1)
4495 {
4496     SelectOverlayInfo selectInfo;
4497     selectInfo.menuInfo.showCut = true;
4498     selectInfo.menuInfo.showCopy = true;
4499     selectInfo.menuInfo.showTranslate = true;
4500     selectInfo.menuInfo.showSearch = true;
4501     selectInfo.menuInfo.showShare = true;
4502     selectInfo.menuInfo.menuDisable = true;
4503     selectInfo.menuInfo.showCameraInput = true;
4504     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4505     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4506     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4507     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4508     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4509     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4510     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3c02() 4511         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4512     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4513 
4514     float maxWidth = 8.0f;
4515     float allocatedSize = 80.0f;
4516     selectOverlayNode->ShowCamera(maxWidth, allocatedSize, infoPtr);
4517     EXPECT_TRUE(selectOverlayNode->isDefaultBtnOverMaxWidth_);
4518 }
4519 
4520 /**
4521  * @tc.name: SetSelectMenuHeight001
4522  * @tc.desc: Test SelectOverlayPattern SetSelectMenuHeight.
4523  * @tc.type: FUNC
4524  */
4525 HWTEST_F(SelectOverlayTestNg, SetSelectMenuHeight001, TestSize.Level1)
4526 {
4527     /**
4528      * @tc.steps: step1. Create selectOverlayNode and initialize properties.
4529      */
4530     SelectOverlayInfo selectInfo;
4531     selectInfo.menuInfo.menuDisable = true;
4532     selectInfo.menuInfo.showCut = false;
4533     selectInfo.menuInfo.showPaste = false;
4534     selectInfo.menuInfo.showTranslate = false;
4535     selectInfo.menuInfo.showSearch = false;
4536     selectInfo.menuInfo.showShare = false;
4537     auto menuOptionItems = GetMenuOptionItems();
4538     selectInfo.menuOptionItems = menuOptionItems;
4539     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4540     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4541     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4542     EXPECT_NE(selectOverlayNode, nullptr);
4543 
4544     /**
4545      * @tc.steps: step2. Create pattern and call SetSelectMenuHeight function.
4546      */
4547     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4548     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4549     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4550     selectOverlayNode->CreateToolBar();
4551     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4552     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4553     ASSERT_NE(pattern, nullptr);
4554     pattern->SetSelectMenuHeight();
4555 }
4556 
4557 /**
4558  * @tc.name: OverlayModifierOnDraw002
4559  * @tc.desc: Test SelectOverlayModifier OnDraw.
4560  * @tc.type: FUNC
4561  */
4562 HWTEST_F(SelectOverlayTestNg, OverlayModifierOnDraw002, TestSize.Level1)
4563 {
4564     /**
4565      * @tc.steps: step1. Create selectOverlayNode, pattern, canvas
4566      * and initialize properties.
4567      */
4568     SelectOverlayInfo selectInfo;
4569     selectInfo.menuInfo.menuDisable = true;
4570     selectInfo.menuInfo.showCut = false;
4571     selectInfo.menuInfo.showPaste = false;
4572     selectInfo.menuInfo.showTranslate = false;
4573     selectInfo.menuInfo.showSearch = false;
4574     selectInfo.menuOptionItems = GetMenuOptionItems();
4575     selectInfo.singleLineHeight = NODE_ID;
4576     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4577     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4578     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4579     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4580     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4581     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4582     EXPECT_NE(selectOverlayNode, nullptr);
4583     selectOverlayNode->CreateToolBar();
4584     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
4585     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<TextOverlayTheme>()));
4586     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f3d02() 4587         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
4588     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
4589     selectOverlayNode->AddExtensionMenuOptions(infoPtr, 0);
4590     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
4591     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4592     EXPECT_NE(pattern, nullptr);
4593     pattern->CreateNodePaintMethod();
4594     auto overlayModifier = pattern->selectOverlayModifier_;
4595     EXPECT_NE(overlayModifier, nullptr);
4596     Testing::MockCanvas canvas;
4597     DrawingContext context = GetDrawingContext(canvas);
4598     for (int32_t i = 0; i < 4; i++) {
4599         overlayModifier->circleOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
4600         EXPECT_NE(overlayModifier->circleOffset_[i], nullptr);
4601         if (i < 4 - 1) {
4602             overlayModifier->lineEndOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
4603             EXPECT_NE(overlayModifier->lineEndOffset_[i], nullptr);
4604         }
4605     }
4606     overlayModifier->rotationAngle_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
4607     overlayModifier->SetMenuOptionOffset(offset);
4608     overlayModifier->pointRadius_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
4609     overlayModifier->SetHeadPointRadius(Dimension(1.0));
4610     overlayModifier->isNewAvoid_ = true;
4611     overlayModifier->SetFirstHandleIsShow(true);
4612     overlayModifier->SetSecondHandleIsShow(true);
4613     EXPECT_EQ(overlayModifier->firstHandleIsShow_->Get(), true);
4614     EXPECT_EQ(overlayModifier->secondHandleIsShow_->Get(), true);
4615     /**
4616      * @tc.steps: step2. call onDraw.
4617      * @tc.expected: cover branch isNewAvoid_, firstHandleIsShow_ and secondHandleIsShow_ are true.
4618      */
4619     overlayModifier->onDraw(context);
4620     EXPECT_EQ(overlayModifier->hasExtensionMenu_->Get(), false);
4621 }
4622 
4623 /**
4624  * @tc.name: OverlayModifierSetLineEndOffset001
4625  * @tc.desc: Test SelectOverlayModifier SetLineEndOffset.
4626  * @tc.type: FUNC
4627  */
4628 HWTEST_F(SelectOverlayTestNg, OverlayModifierSetLineEndOffset001, TestSize.Level1)
4629 {
4630     /**
4631      * @tc.steps: step1. Create and initialize selectOverlayNode, pattern.
4632      */
4633     SelectOverlayInfo selectInfo;
4634     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4635     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4636     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4637     ASSERT_NE(selectOverlayNode, nullptr);
4638     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4639     ASSERT_NE(pattern, nullptr);
4640     pattern->CreateNodePaintMethod();
4641     auto overlayModifier = pattern->selectOverlayModifier_;
4642     EXPECT_NE(overlayModifier, nullptr);
4643     for (int32_t i = 0; i < 4; i++) {
4644         overlayModifier->circleOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
4645         EXPECT_NE(overlayModifier->circleOffset_[i], nullptr);
4646         if (i < 4 - 1) {
4647             overlayModifier->lineEndOffset_[i] = AceType::MakeRefPtr<AnimatablePropertyOffsetF>(offset);
4648             EXPECT_NE(overlayModifier->lineEndOffset_[i], nullptr);
4649         }
4650     }
4651     overlayModifier->rotationAngle_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
4652     overlayModifier->SetMenuOptionOffset(offset);
4653     overlayModifier->pointRadius_ = AceType::MakeRefPtr<AnimatablePropertyFloat>(Dimension(1.75_vp).ConvertToPx());
4654     overlayModifier->SetOtherPointRadius(Dimension(1.0));
4655     overlayModifier->SetHeadPointRadius(Dimension(1.0));
4656     /**
4657      * @tc.steps: step2. call SetLineEndOffset, when isMore is true.
4658      * @tc.expected: rotationAngle_ is 0.
4659      */
4660     overlayModifier->SetLineEndOffset(true);
4661     EXPECT_EQ(overlayModifier->rotationAngle_->Get(), 0);
4662     /**
4663      * @tc.steps: step3. call SetLineEndOffset, when isMore is false.
4664      * @tc.expected: rotationAngle_ isn't 0.
4665      */
4666     overlayModifier->SetLineEndOffset(false);
4667     EXPECT_NE(overlayModifier->rotationAngle_->Get(), 0);
4668 }
4669 
4670 /**
4671  * @tc.name: OverlayModifierSetHeadPointRadius001
4672  * @tc.desc: Test SelectOverlayModifier SetHeadPointRadius.
4673  * @tc.type: FUNC
4674  */
4675 HWTEST_F(SelectOverlayTestNg, OverlayModifierSetHeadPointRadius001, TestSize.Level1)
4676 {
4677     /**
4678      * @tc.steps: step1. Create and initialize selectOverlayNode, pattern.
4679      */
4680     SelectOverlayInfo selectInfo;
4681     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4682     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4683     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4684     ASSERT_NE(selectOverlayNode, nullptr);
4685     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4686     ASSERT_NE(pattern, nullptr);
4687     pattern->CreateNodePaintMethod();
4688     auto overlayModifier = pattern->selectOverlayModifier_;
4689     EXPECT_NE(overlayModifier, nullptr);
4690     /**
4691      * @tc.steps: step2. call SetOtherPointRadius and SetHeadPointRadius.
4692      * @tc.expected: pointRadius_ and headPointRadius_ have value.
4693      */
4694     overlayModifier->SetOtherPointRadius(Dimension(1.0));
4695     overlayModifier->SetHeadPointRadius(Dimension(1.0));
4696     EXPECT_EQ(overlayModifier->pointRadius_->Get(), 1.0);
4697     EXPECT_EQ(overlayModifier->headPointRadius_->Get(), 1.0);
4698     /**
4699      * @tc.steps: step3. call SetOtherPointRadius and SetHeadPointRadius.
4700      * @tc.expected: pointRadius_ and headPointRadius_ are nullptr.
4701      */
4702     overlayModifier->pointRadius_ = nullptr;
4703     overlayModifier->headPointRadius_ = nullptr;
4704     overlayModifier->SetOtherPointRadius(Dimension(1.0));
4705     overlayModifier->SetHeadPointRadius(Dimension(1.0));
4706     EXPECT_EQ(overlayModifier->headPointRadius_, nullptr);
4707     EXPECT_EQ(overlayModifier->pointRadius_, nullptr);
4708 }
4709 
4710 /**
4711  * @tc.name: GetCreateMenuOptionsParams001
4712  * @tc.desc: Test select_overlay_test_ng GetCreateMenuOptionsParams.
4713  * @tc.type: FUNC
4714  */
4715 HWTEST_F(SelectOverlayTestNg, GetCreateMenuOptionsParams001, TestSize.Level1)
4716 {
__anon0c486c3f3e02(NG::MenuItemParam menuOptionsParam) 4717     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool {
4718         return false;
4719     };
4720     SelectOverlayInfo selectInfo;
4721     selectInfo.menuInfo.menuIsShow = true;
4722     selectInfo.menuInfo.showCameraInput = true;
4723     selectInfo.menuOptionItems = GetMenuOptionItems();
4724     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
4725     selectInfo.onCreateCallback.onCreateMenuCallback = nullptr;
4726     auto info_ = std::make_shared<SelectOverlayInfo>(selectInfo);
4727 
4728     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(info_);
4729     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4730     ASSERT_NE(selectOverlayNode, nullptr);
4731     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4732     ASSERT_NE(pattern, nullptr);
4733     pattern->CreateNodePaintMethod();
4734     auto overlayModifier = pattern->selectOverlayModifier_;
4735     EXPECT_NE(overlayModifier, nullptr);
4736     std::vector<MenuOptionsParam> menuOptionItems;
4737     for (int32_t i = 0; i < 10; i++) {
4738         MenuOptionsParam item;
4739         item.id = std::to_string(i);
4740         item.content = std::to_string(i);
4741         menuOptionItems.push_back(item);
4742     }
4743     auto themeManagerBase = MockPipelineContext::GetCurrent()->GetThemeManager();
4744     ASSERT_NE(themeManagerBase, nullptr);
4745     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
4746     ASSERT_NE(themeManager, nullptr);
4747     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
4748     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
4749     ASSERT_NE(textOverlayTheme, nullptr);
4750     textOverlayTheme->showShortcut_ = true;
4751     auto selectTheme = AceType::MakeRefPtr<SelectTheme>();
4752     ASSERT_NE(selectTheme, nullptr);
4753     EXPECT_CALL(*themeManager, GetTheme(_))
4754         .WillOnce(Return(textOverlayTheme))
4755         .WillOnce(Return(textOverlayTheme))
4756         .WillRepeatedly(Return(selectTheme));
4757     auto menuWrapper =  selectOverlayNode->CreateMenuNode(info_);
4758     EXPECT_NE(menuWrapper, nullptr);
4759     MockPipelineContext::GetCurrent()->SetThemeManager(themeManagerBase);
4760 }
4761 
4762 /**
4763  * @tc.name: LandscapeMenuAddMenuOptions001
4764  * @tc.desc: Test select_overlay_test_ng LandscapeMenuAddMenuOptions.
4765  * @tc.type: FUNC
4766  */
4767 HWTEST_F(SelectOverlayTestNg, LandscapeMenuAddMenuOptions001, TestSize.Level1)
4768 {
4769     /**
4770      * @tc.steps: step1.  CreateMenuNodeSuccess.
4771      */
4772     SelectOverlayInfo selectInfo;
4773     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4774     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4775     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4776     ASSERT_NE(selectOverlayNode, nullptr);
4777     std::vector<MenuOptionsParam> menuOptionItems;
4778     MenuOptionsParam menuItem1;
4779     menuItem1.content = "item1";
4780     menuItem1.id = "item1";
4781     menuOptionItems.emplace_back(menuItem1);
4782 
4783     MenuOptionsParam menuItem2;
4784     menuItem2.content = "item2";
4785     menuItem2.id = "item2";
4786     menuOptionItems.emplace_back(menuItem2);
4787 
4788     int32_t extensionOptionStartIndex = -1;
4789     selectOverlayNode->LandscapeMenuAddMenuOptions(menuOptionItems, false, 300.0, 200.0, extensionOptionStartIndex);
4790     EXPECT_EQ(extensionOptionStartIndex, -1);
4791 }
4792 
4793 /**
4794  * @tc.name: LandscapeMenuAddMenuOptions002
4795  * @tc.desc: Test select_overlay_test_ng LandscapeMenuAddMenuOptions.
4796  * @tc.type: FUNC
4797  */
4798 HWTEST_F(SelectOverlayTestNg, LandscapeMenuAddMenuOptions002, TestSize.Level1)
4799 {
4800     /**
4801      * @tc.steps: step1.  CreateMenuNodeSuccess.
4802      */
4803     SelectOverlayInfo selectInfo;
4804     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4805     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4806     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4807     ASSERT_NE(selectOverlayNode, nullptr);
4808     std::vector<MenuOptionsParam> menuOptionItems;
4809     MenuOptionsParam menuItem1;
4810     menuItem1.content = "item1";
4811     menuItem1.id = "item1";
4812     menuOptionItems.emplace_back(menuItem1);
4813 
4814     MenuOptionsParam menuItem2;
4815     menuItem2.content = "item2";
4816     menuItem2.id = "item2";
4817     menuOptionItems.emplace_back(menuItem2);
4818 
4819     int32_t extensionOptionStartIndex = -1;
4820     selectOverlayNode->LandscapeMenuAddMenuOptions(menuOptionItems, false, 300.0, 320.0, extensionOptionStartIndex);
4821     EXPECT_EQ(extensionOptionStartIndex, 0);
4822 }
4823 
4824 /**
4825  * @tc.name: GetSystemMenuItemParams001
4826  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4827  * @tc.type: FUNC
4828  */
4829 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams001, TestSize.Level1)
4830 {
4831     /**
4832      * @tc.steps: step1.  CreateMenuNodeSuccess.
4833      */
4834     SelectOverlayInfo info;
4835     info.menuInfo.showCopy = true;
4836     info.menuInfo.showPaste = true;
4837     info.menuInfo.showCut = true;
4838     info.menuInfo.showCopyAll = true;
4839     info.menuInfo.showTranslate = false;
4840     info.menuInfo.showSearch = false;
4841     info.menuInfo.showShare = false;
4842     info.menuInfo.showCameraInput = true;
4843     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4844     EXPECT_EQ(params.size(), 5);
4845 }
4846 
4847 /**
4848  * @tc.name: GetSystemMenuItemParams002
4849  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4850  * @tc.type: FUNC
4851  */
4852 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams002, TestSize.Level1)
4853 {
4854     /**
4855      * @tc.steps: step1.  CreateMenuNodeSuccess.
4856      */
4857     SelectOverlayInfo info;
4858     info.menuInfo.showCopy = false;
4859     info.menuInfo.showPaste = false;
4860     info.menuInfo.showCut = false;
4861     info.menuInfo.showCopyAll = false;
4862     info.menuInfo.showTranslate = false;
4863     info.menuInfo.showSearch = false;
4864     info.menuInfo.showShare = false;
4865     info.menuInfo.showCameraInput = false;
4866     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4867     EXPECT_EQ(params.size(), 0);
4868 }
4869 
4870 /**
4871  * @tc.name: GetSystemMenuItemParams003
4872  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4873  * @tc.type: FUNC
4874  */
4875 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams003, TestSize.Level1)
4876 {
4877     /**
4878      * @tc.steps: step1.  CreateMenuNodeSuccess.
4879      */
4880     SelectOverlayInfo info;
4881     info.menuInfo.showCopy = true;
4882     info.menuInfo.showPaste = false;
4883     info.menuInfo.showCut = true;
4884     info.menuInfo.showCopyAll = false;
4885     info.menuInfo.showTranslate = false;
4886     info.menuInfo.showSearch = false;
4887     info.menuInfo.showShare = false;
4888     info.menuInfo.showCameraInput = true;
4889     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4890     EXPECT_EQ(params.size(), 3);
4891 }
4892 
4893 /**
4894  * @tc.name: GetSystemMenuItemParams004
4895  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4896  * @tc.type: FUNC
4897  */
4898 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams004, TestSize.Level1)
4899 {
4900     /**
4901      * @tc.steps: step1.  CreateMenuNodeSuccess.
4902      */
4903     SelectOverlayInfo info;
4904     info.menuInfo.showCopy = false;
4905     info.menuInfo.showPaste = true;
4906     info.menuInfo.showCut = false;
4907     info.menuInfo.showCopyAll = true;
4908     info.menuInfo.showTranslate = false;
4909     info.menuInfo.showSearch = false;
4910     info.menuInfo.showShare = false;
4911     info.menuInfo.showCameraInput = false;
4912     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4913     EXPECT_EQ(params.size(), 2);
4914 }
4915 
4916 /**
4917  * @tc.name: GetSystemMenuItemParams005
4918  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4919  * @tc.type: FUNC
4920  */
4921 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams005, TestSize.Level1)
4922 {
4923     /**
4924      * @tc.steps: step1.  CreateMenuNodeSuccess.
4925      */
4926     SelectOverlayInfo info;
4927     info.menuInfo.showCopy = false;
4928     info.menuInfo.showPaste = true;
4929     info.menuInfo.showCut = false;
4930     info.menuInfo.showCopyAll = false;
4931     info.menuInfo.showTranslate = false;
4932     info.menuInfo.showSearch = false;
4933     info.menuInfo.showShare = false;
4934     info.menuInfo.showCameraInput = false;
4935     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4936     EXPECT_EQ(params.size(), 1);
4937 }
4938 
4939 /**
4940  * @tc.name: GetSystemMenuItemParams006
4941  * @tc.desc: Test select_overlay_test_ng GetSystemMenuItemParams.
4942  * @tc.type: FUNC
4943  */
4944 HWTEST_F(SelectOverlayTestNg, GetSystemMenuItemParams006, TestSize.Level1)
4945 {
4946     /**
4947      * @tc.steps: step1.  CreateMenuNodeSuccess.
4948      */
4949     SelectOverlayInfo info;
4950     info.menuInfo.showCopy = false;
4951     info.menuInfo.showPaste = true;
4952     info.menuInfo.showCut = true;
4953     info.menuInfo.showCopyAll = true;
4954     info.menuInfo.showTranslate = false;
4955     info.menuInfo.showSearch = false;
4956     info.menuInfo.showShare = false;
4957     info.menuInfo.showCameraInput = true;
4958     auto params = SelectOverlayNode::GetSystemMenuItemParams(std::make_shared<SelectOverlayInfo>(info));
4959     EXPECT_EQ(params.size(), 4);
4960 }
4961 
4962 /**
4963  * @tc.name: AddCreateMenuItems001
4964  * @tc.desc: Test select_overlay_test_ng AddCreateMenuItems.
4965  * @tc.type: FUNC
4966  */
4967 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems001, TestSize.Level1)
4968 {
4969     /**
4970      * @tc.steps: step1.  CreateMenuNodeSuccess.
4971      */
4972     SelectOverlayInfo selectInfo;
4973     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
4974     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
4975     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
4976     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
4977     std::vector<MenuOptionsParam> menuOptionItems;
4978     MenuOptionsParam menuItem1;
4979     menuItem1.content = "item1";
4980     menuItem1.id = "item1";
4981     menuOptionItems.emplace_back(menuItem1);
4982 
4983     MenuOptionsParam menuItem2;
4984     menuItem2.content = "item2";
4985     menuItem2.id = "item2";
4986     menuOptionItems.emplace_back(menuItem2);
4987 
4988     MenuOptionsParam menuItem3;
4989     menuItem3.content = "item3";
4990     menuItem3.id = "item3";
4991     menuOptionItems.emplace_back(menuItem3);
4992 
4993     MenuOptionsParam menuItem4;
4994     menuItem4.content = "OH_DEFAULT_PASTE";
4995     menuItem4.id = "OH_DEFAULT_PASTE";
4996     menuOptionItems.emplace_back(menuItem4);
4997 
4998     auto info = pattern->GetSelectOverlayInfo();
4999 
5000     float maxWidth = 100.0f;
5001     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, info, maxWidth);
5002     EXPECT_EQ(index, 3);
5003 }
5004 
5005 /**
5006  * @tc.name: CreatExtensionMenu001
5007  * @tc.desc: Test select_overlay_test_ng CreatExtensionMenu.
5008  * @tc.type: FUNC
5009  */
5010 HWTEST_F(SelectOverlayTestNg, CreatExtensionMenu001, TestSize.Level1)
5011 {
5012     /**
5013      * @tc.steps: step1.  CreateMenuNodeSuccess.
5014      */
5015     SelectOverlayInfo selectInfo;
5016     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5017     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5018     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5019     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
5020     std::vector<OptionParam> params;
5021     selectOverlayNode->CreatExtensionMenu(std::move(params));
5022     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
5023 }
5024 
5025 /**
5026  * @tc.name: IsFirstHandleMoveStart
5027  * @tc.desc: Test IsFirstHandleMoveStart.
5028  * @tc.type: FUNC
5029  */
5030 HWTEST_F(SelectOverlayTestNg, IsFirstHandleMoveStart, TestSize.Level1)
5031 {
5032     SelectOverlayInfo selectInfo;
5033     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5034     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5035     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5036     ASSERT_NE(selectOverlayNode, nullptr);
5037     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
5038     ASSERT_NE(pattern, nullptr);
5039     GestureEvent info;
5040     info.localLocation_ = Offset(1, 1);
5041     pattern->isFirstHandleTouchDown_ = true;
5042     pattern->isSecondHandleTouchDown_ = true;
5043     EXPECT_FALSE(pattern->IsSingleHandleMenuShow());
5044     EXPECT_FALSE(pattern->IsSingleHandle());
5045     EXPECT_FALSE(pattern->IsFirstHandleMoveStart(info.GetLocalLocation()));
5046 }
5047 
5048 /**
5049  * @tc.name: CreateMenuNode001
5050  * @tc.desc: Test select_overlay_test_ng CreateMenuNode.
5051  * @tc.type: FUNC
5052  */
5053 HWTEST_F(SelectOverlayTestNg, CreateMenuNode001, TestSize.Level1)
5054 {
5055     /**
5056      * @tc.steps: step1. Create and initialize selectOverlayNode, pattern.
5057      */
__anon0c486c3f3f02(NG::MenuItemParam menuOptionsParam) 5058     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool { return false; };
5059     SelectOverlayInfo selectInfo;
5060     selectInfo.menuInfo.menuIsShow = true;
5061     selectInfo.menuInfo.showCameraInput = true;
5062     selectInfo.menuOptionItems = GetMenuOptionItems();
5063     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
5064     selectInfo.onCreateCallback.onCreateMenuCallback = nullptr;
5065     auto info_ = std::make_shared<SelectOverlayInfo>(selectInfo);
5066 
5067     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(info_);
5068     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5069     ASSERT_NE(selectOverlayNode, nullptr);
5070     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
5071     ASSERT_NE(pattern, nullptr);
5072     pattern->CreateNodePaintMethod();
5073     auto overlayModifier = pattern->selectOverlayModifier_;
5074     EXPECT_NE(overlayModifier, nullptr);
5075     std::vector<MenuOptionsParam> menuOptionItems;
5076     for (int32_t i = 0; i < 10; i++) {
5077         MenuOptionsParam item;
5078         item.id = std::to_string(i);
5079         item.content = std::to_string(i);
5080         menuOptionItems.push_back(item);
5081     }
5082 
5083     auto themeManagerBase = MockPipelineContext::GetCurrent()->GetThemeManager();
5084     ASSERT_NE(themeManagerBase, nullptr);
5085     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5086     ASSERT_NE(themeManager, nullptr);
5087     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5088     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5089     ASSERT_NE(textOverlayTheme, nullptr);
5090     textOverlayTheme->showShortcut_ = false;
5091     auto selectTheme = AceType::MakeRefPtr<SelectTheme>();
5092     ASSERT_NE(selectTheme, nullptr);
5093     EXPECT_CALL(*themeManager, GetTheme(_))
5094         .WillOnce(Return(textOverlayTheme))
5095         .WillOnce(Return(textOverlayTheme))
5096         .WillRepeatedly(Return(selectTheme));
5097     auto menuWrapperNoShortCut = selectOverlayNode->CreateMenuNode(info_);
5098     EXPECT_NE(menuWrapperNoShortCut, nullptr);
5099     MockPipelineContext::GetCurrent()->SetThemeManager(themeManagerBase);
5100 }
5101 
5102 /**
5103  * @tc.name: CreateMenuNode002
5104  * @tc.desc: Test select_overlay_test_ng CreateMenuNode.
5105  * @tc.type: FUNC
5106  */
5107 HWTEST_F(SelectOverlayTestNg, CreateMenuNode002, TestSize.Level1)
5108 {
5109     /**
5110      * @tc.steps: step1. Create and initialize selectOverlayNode, pattern.
5111      */
__anon0c486c3f4002(NG::MenuItemParam menuOptionsParam) 5112     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool { return false; };
5113     SelectOverlayInfo selectInfo;
5114     selectInfo.menuInfo.menuIsShow = true;
5115     selectInfo.menuInfo.showCameraInput = true;
5116     selectInfo.menuOptionItems = GetMenuOptionItems();
5117     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
5118     selectInfo.onCreateCallback.onCreateMenuCallback = nullptr;
5119     auto info_ = std::make_shared<SelectOverlayInfo>(selectInfo);
5120 
5121     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(info_);
5122     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5123     ASSERT_NE(selectOverlayNode, nullptr);
5124     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
5125     ASSERT_NE(pattern, nullptr);
5126     pattern->CreateNodePaintMethod();
5127     auto overlayModifier = pattern->selectOverlayModifier_;
5128     EXPECT_NE(overlayModifier, nullptr);
5129     std::vector<MenuOptionsParam> menuOptionItems;
5130     for (int32_t i = 0; i < 10; i++) {
5131         MenuOptionsParam item;
5132         item.id = std::to_string(i);
5133         item.content = std::to_string(i);
5134         menuOptionItems.push_back(item);
5135     }
5136 
5137     auto themeManagerBase = MockPipelineContext::GetCurrent()->GetThemeManager();
5138     ASSERT_NE(themeManagerBase, nullptr);
5139     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5140     ASSERT_NE(themeManager, nullptr);
5141     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5142     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5143     ASSERT_NE(textOverlayTheme, nullptr);
5144     textOverlayTheme->showShortcut_ = true;
5145     auto selectTheme = AceType::MakeRefPtr<SelectTheme>();
5146     ASSERT_NE(selectTheme, nullptr);
5147     EXPECT_CALL(*themeManager, GetTheme(_))
5148         .WillOnce(Return(textOverlayTheme))
5149         .WillOnce(Return(textOverlayTheme))
5150         .WillRepeatedly(Return(selectTheme));
5151     auto menuWrapperNoShortCut = selectOverlayNode->CreateMenuNode(info_);
5152     EXPECT_NE(menuWrapperNoShortCut, nullptr);
5153     MockPipelineContext::GetCurrent()->SetThemeManager(themeManagerBase);
5154 }
5155 
5156 /**
5157  * @tc.name: GetDefaultButtonAndMenuWidth001
5158  * @tc.desc: Test GetDefaultButtonAndMenuWidth with UIExtension Window.
5159  * @tc.type: FUNC
5160  */
5161 HWTEST_F(SelectOverlayTestNg, GetDefaultButtonAndMenuWidth001, TestSize.Level1)
5162 {
5163     /**
5164      * @tc.steps: step1. Set TextOverlayTheme to themeManager and Create selectOverlayNode.
5165      */
5166     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5167     ASSERT_NE(themeManager, nullptr);
5168     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5169     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5170     ASSERT_NE(textOverlayTheme, nullptr);
5171     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
5172     SelectOverlayInfo selectInfo;
5173     selectInfo.menuInfo.menuIsShow = true;
5174     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5175     ASSERT_NE(infoPtr, nullptr);
5176     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5177     ASSERT_NE(frameNode, nullptr);
5178     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5179     ASSERT_NE(selectOverlayNode, nullptr);
5180 
5181     /**
5182      * @tc.steps: step2. Set container UIExtension State and Window Rect.
5183      */
5184     MockContainer::SetUp();
5185     auto container = MockContainer::Current();
5186     ASSERT_NE(container, nullptr);
5187     container->pipelineContext_ = MockPipelineContext::GetCurrentContext();
5188     container->SetIsUIExtensionWindow(true);
5189     MockPipelineContext::SetCurrentWindowRect(WINDOW_RECT);
5190 
5191     /**
5192      * @tc.steps: step3. test GetDefaultButtonAndMenuWidth return value.
5193      * @tc.expected: maxWidth changed is right.
5194      */
5195     float maxWidth = 1040.0f;
5196     const auto& menuPadding = textOverlayTheme->GetMenuPadding();
5197 
5198     auto backButtonWidth = textOverlayTheme->GetMenuToolbarHeight().ConvertToPx() - menuPadding.Top().ConvertToPx() -
5199                            menuPadding.Bottom().ConvertToPx();
5200     selectOverlayNode->GetDefaultButtonAndMenuWidth(maxWidth);
5201     EXPECT_EQ(maxWidth,
5202         WINDOW_RECT.Width() - menuPadding.Left().ConvertToPx() - menuPadding.Right().ConvertToPx() - backButtonWidth);
5203 }
5204 
5205 /**
5206  * @tc.name: GetDefaultButtonAndMenuWidth002
5207  * @tc.desc: Test GetDefaultButtonAndMenuWidth without UIExtension Window.
5208  * @tc.type: FUNC
5209  */
5210 HWTEST_F(SelectOverlayTestNg, GetDefaultButtonAndMenuWidth002, TestSize.Level1)
5211 {
5212     /**
5213      * @tc.steps: step1. Set TextOverlayTheme to themeManager and Create selectOverlayNode.
5214      */
5215     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5216     ASSERT_NE(themeManager, nullptr);
5217     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5218     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5219     ASSERT_NE(textOverlayTheme, nullptr);
5220     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
5221     SelectOverlayInfo selectInfo;
5222     selectInfo.menuInfo.menuIsShow = true;
5223     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5224     ASSERT_NE(infoPtr, nullptr);
5225     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5226     ASSERT_NE(frameNode, nullptr);
5227     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5228     ASSERT_NE(selectOverlayNode, nullptr);
5229 
5230     /**
5231      * @tc.steps: step2. Set container UIExtension State and Window Rect.
5232      */
5233     MockContainer::SetUp();
5234     auto container = MockContainer::Current();
5235     ASSERT_NE(container, nullptr);
5236     container->pipelineContext_ = MockPipelineContext::GetCurrentContext();
5237     container->SetIsUIExtensionWindow(false);
5238     MockPipelineContext::SetCurrentWindowRect(WINDOW_RECT);
5239 
5240     /**
5241      * @tc.steps: step3. test GetDefaultButtonAndMenuWidth return value.
5242      * @tc.expected: maxWidth changed is right.
5243      */
5244     float maxWidth = 1040.0f;
5245     const auto& menuPadding = textOverlayTheme->GetMenuPadding();
5246 
5247     auto backButtonWidth = textOverlayTheme->GetMenuToolbarHeight().ConvertToPx() - menuPadding.Top().ConvertToPx() -
5248                            menuPadding.Bottom().ConvertToPx();
5249     selectOverlayNode->GetDefaultButtonAndMenuWidth(maxWidth);
5250     EXPECT_EQ(maxWidth, OVERLAY_MAX_WIDTH.ConvertToPx() - menuPadding.Left().ConvertToPx() -
5251                             menuPadding.Right().ConvertToPx() - backButtonWidth);
5252 }
5253 
5254 /**
5255  * @tc.name: AddMenuItemByCreateMenuCallback001
5256  * @tc.desc: Test AddMenuItemByCreateMenuCallback with backButton.
5257  * @tc.type: FUNC
5258  */
5259 HWTEST_F(SelectOverlayTestNg, AddMenuItemByCreateMenuCallback001, TestSize.Level1)
5260 {
5261     /**
5262      * @tc.steps: step1. Set ApiTargetVersion.
5263      */
5264     MockPipelineContext::GetCurrent()->SetMinPlatformVersion(static_cast<int32_t>(PlatformVersion::VERSION_ELEVEN));
5265     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
5266 
5267     /**
5268      * @tc.steps: step2. Set TextOverlayTheme to themeManager and Create selectOverlayNode.
5269      */
5270     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5271     ASSERT_NE(themeManager, nullptr);
5272     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5273     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5274     ASSERT_NE(textOverlayTheme, nullptr);
5275     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
5276     SelectOverlayInfo selectInfo;
5277     selectInfo.menuInfo.menuIsShow = true;
5278     selectInfo.menuInfo.showCut = true;
5279     selectInfo.menuInfo.showCopy = true;
5280     selectInfo.menuInfo.showPaste = true;
5281     selectInfo.menuInfo.showCopyAll = true;
5282     selectInfo.menuInfo.showTranslate = false;
5283     selectInfo.menuInfo.showSearch = false;
5284     selectInfo.menuInfo.showShare = false;
5285     selectInfo.menuInfo.showCameraInput = false;
5286     selectInfo.menuInfo.showAIWrite = false;
5287     auto menuOptionItems = GetMenuOptionItems();
5288     selectInfo.menuOptionItems = menuOptionItems;
__anon0c486c3f4102(NG::MenuItemParam menuOptionsParam) 5289     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool { return false; };
5290     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
__anon0c486c3f4202(const std::vector<NG::MenuItemParam>& menuItems) 5291     auto onCreateMenuCallback = [](const std::vector<NG::MenuItemParam>& menuItems) -> std::vector<MenuOptionsParam> {
5292         return {};
5293     };
5294     selectInfo.onCreateCallback.onCreateMenuCallback = onCreateMenuCallback;
5295     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5296     ASSERT_NE(infoPtr, nullptr);
5297     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5298     ASSERT_NE(frameNode, nullptr);
5299     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5300     ASSERT_NE(selectOverlayNode, nullptr);
5301 
5302     /**
5303      * @tc.steps: step3. test AddMenuItemByCreateMenuCallback.
5304      * @tc.expected: The default menu is created successfully and backButton is reset.
5305      */
5306     float maxWidth = 2.0f;
5307     selectOverlayNode->CreateToolBar();
5308     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
5309     selectOverlayNode->backButton_ = FrameNode::GetOrCreateFrameNode("SelectMoreOrBackButton",
__anon0c486c3f4302() 5310         ElementRegister::GetInstance()->MakeUniqueId(), []() { return AceType::MakeRefPtr<ButtonPattern>(); });
5311     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
5312     selectOverlayNode->AddMenuItemByCreateMenuCallback(infoPtr, maxWidth);
5313     EXPECT_FALSE(selectOverlayNode->backButton_);
5314     EXPECT_TRUE(selectOverlayNode->selectMenu_);
5315     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
5316 }
5317 
5318 /**
5319  * @tc.name: AddMenuItemByCreateMenuCallback002
5320  * @tc.desc: Test AddMenuItemByCreateMenuCallback without backButton.
5321  * @tc.type: FUNC
5322  */
5323 HWTEST_F(SelectOverlayTestNg, AddMenuItemByCreateMenuCallback002, TestSize.Level1)
5324 {
5325     /**
5326      * @tc.steps: step1. Set ApiTargetVersion.
5327      */
5328     MockPipelineContext::GetCurrent()->SetMinPlatformVersion(static_cast<int32_t>(PlatformVersion::VERSION_ELEVEN));
5329     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
5330 
5331     /**
5332      * @tc.steps: step2. Set TextOverlayTheme to themeManager and Create selectOverlayNode.
5333      */
5334     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5335     ASSERT_NE(themeManager, nullptr);
5336     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5337     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5338     ASSERT_NE(textOverlayTheme, nullptr);
5339     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
5340     SelectOverlayInfo selectInfo;
5341     selectInfo.menuInfo.menuIsShow = true;
5342     selectInfo.menuInfo.showCut = true;
5343     selectInfo.menuInfo.showCopy = true;
5344     selectInfo.menuInfo.showPaste = true;
5345     selectInfo.menuInfo.showCopyAll = true;
5346     selectInfo.menuInfo.showTranslate = true;
5347     selectInfo.menuInfo.showSearch = true;
5348     selectInfo.menuInfo.showShare = true;
5349     selectInfo.menuInfo.showCameraInput = true;
5350     selectInfo.menuInfo.showAIWrite = true;
5351     auto menuOptionItems = GetMenuOptionItems();
5352     selectInfo.menuOptionItems = menuOptionItems;
__anon0c486c3f4402(NG::MenuItemParam menuOptionsParam) 5353     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool { return false; };
5354     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
5355     auto onCreateMenuCallback = [menuOptionItems](
__anon0c486c3f4502( const std::vector<NG::MenuItemParam>& menuItems) 5356                                     const std::vector<NG::MenuItemParam>& menuItems) -> std::vector<MenuOptionsParam> {
5357         return menuOptionItems;
5358     };
5359     selectInfo.onCreateCallback.onCreateMenuCallback = onCreateMenuCallback;
5360     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5361     ASSERT_NE(infoPtr, nullptr);
5362     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5363     ASSERT_NE(frameNode, nullptr);
5364     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5365     ASSERT_NE(selectOverlayNode, nullptr);
5366 
5367     /**
5368      * @tc.steps: step3. test AddMenuItemByCreateMenuCallback.
5369      * @tc.expected: The backButton and moreButton are created successfully.
5370      */
5371     float maxWidth = 1040.0f;
5372     selectOverlayNode->CreateToolBar();
5373     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
5374     EXPECT_EQ(selectOverlayNode->backButton_, nullptr);
5375     selectOverlayNode->AddMenuItemByCreateMenuCallback(infoPtr, maxWidth);
5376     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
5377     EXPECT_NE(selectOverlayNode->moreButton_, nullptr);
5378     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
5379     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
5380 }
5381 
5382 /**
5383  * @tc.name: AddMenuItemByCreateMenuCallback003
5384  * @tc.desc: Test AddMenuItemByCreateMenuCallback with Lower version.
5385  * @tc.type: FUNC
5386  */
5387 HWTEST_F(SelectOverlayTestNg, AddMenuItemByCreateMenuCallback003, TestSize.Level1)
5388 {
5389     /**
5390      * @tc.steps: step1. Set ApiTargetVersion.
5391      */
5392     MockPipelineContext::GetCurrent()->SetMinPlatformVersion(static_cast<int32_t>(PlatformVersion::VERSION_ELEVEN));
5393     AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_ELEVEN));
5394 
5395     /**
5396      * @tc.steps: step2. Set TextOverlayTheme to themeManager and Create selectOverlayNode.
5397      */
5398     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5399     ASSERT_NE(themeManager, nullptr);
5400     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5401     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5402     ASSERT_NE(textOverlayTheme, nullptr);
5403     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(textOverlayTheme));
5404     SelectOverlayInfo selectInfo;
5405     selectInfo.menuInfo.menuIsShow = true;
5406     selectInfo.menuInfo.showCut = true;
5407     selectInfo.menuInfo.showCopy = true;
5408     selectInfo.menuInfo.showPaste = true;
5409     selectInfo.menuInfo.showCopyAll = true;
5410     selectInfo.menuInfo.showTranslate = false;
5411     selectInfo.menuInfo.showSearch = false;
5412     selectInfo.menuInfo.showShare = false;
5413     selectInfo.menuInfo.showCameraInput = false;
5414     selectInfo.menuInfo.showAIWrite = false;
5415     auto menuOptionItems = GetMenuOptionItems();
5416     selectInfo.menuOptionItems = menuOptionItems;
__anon0c486c3f4602(NG::MenuItemParam menuOptionsParam) 5417     auto onMenuItemClick = [](NG::MenuItemParam menuOptionsParam) -> bool { return false; };
5418     selectInfo.onCreateCallback.onMenuItemClick = onMenuItemClick;
5419     auto onCreateMenuCallback = [menuOptionItems](
__anon0c486c3f4702( const std::vector<NG::MenuItemParam>& menuItems) 5420                                     const std::vector<NG::MenuItemParam>& menuItems) -> std::vector<MenuOptionsParam> {
5421         return menuOptionItems;
5422     };
5423     selectInfo.onCreateCallback.onCreateMenuCallback = onCreateMenuCallback;
5424     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5425     ASSERT_NE(infoPtr, nullptr);
5426     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5427     ASSERT_NE(frameNode, nullptr);
5428     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5429     ASSERT_NE(selectOverlayNode, nullptr);
5430 
5431     /**
5432      * @tc.steps: step3. test AddMenuItemByCreateMenuCallback.
5433      * @tc.expected: The backButton and moreButton are created successfully.
5434      */
5435     float maxWidth = 1040.0f;
5436     selectOverlayNode->CreateToolBar();
5437     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
5438     EXPECT_EQ(selectOverlayNode->backButton_, nullptr);
5439     selectOverlayNode->AddMenuItemByCreateMenuCallback(infoPtr, maxWidth);
5440     EXPECT_NE(selectOverlayNode->backButton_, nullptr);
5441     EXPECT_NE(selectOverlayNode->moreButton_, nullptr);
5442     EXPECT_EQ(selectOverlayNode->moreOrBackSymbol_, nullptr);
5443     EXPECT_NE(selectOverlayNode->selectMenu_, nullptr);
5444     EXPECT_FALSE(selectOverlayNode->isExtensionMenu_);
5445 }
5446 
5447 /**
5448  * @tc.name: AddCreateMenuItems002
5449  * @tc.desc: Test AddCreateMenuItems with multiple menu items.
5450  * @tc.type: FUNC
5451  */
5452 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems002, TestSize.Level1)
5453 {
5454     /**
5455      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5456      */
5457     SelectOverlayInfo selectInfo;
5458     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5459     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5460     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5461     ASSERT_NE(selectOverlayNode, nullptr);
5462     auto pattern = selectOverlayNode->GetPattern<SelectOverlayPattern>();
5463     ASSERT_NE(pattern, nullptr);
5464 
5465     std::vector<MenuOptionsParam> menuOptionItems;
5466     MenuOptionsParam menuItem1;
5467     menuItem1.content = "item1";
5468     menuItem1.id = "item1";
5469     menuOptionItems.emplace_back(menuItem1);
5470 
5471     MenuOptionsParam menuItem2;
5472     menuItem2.content = "item2";
5473     menuItem2.id = "item2";
5474     menuOptionItems.emplace_back(menuItem2);
5475 
5476     MenuOptionsParam menuItem3;
5477     menuItem3.content = "item3";
5478     menuItem3.id = "item3";
5479     menuOptionItems.emplace_back(menuItem3);
5480 
5481     auto info = pattern->GetSelectOverlayInfo();
5482     float maxWidth = 1040.0f;
5483 
5484     /**
5485      * @tc.steps: step2. Call AddCreateMenuItems with the prepared data.
5486      * @tc.expected: The function returns the correct index.
5487      */
5488     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, info, maxWidth);
5489     EXPECT_EQ(index, -1);
5490 
5491     /**
5492      * @tc.expected: The menu items are correctly added to selectMenuInner_.
5493      */
5494     auto selectMenuInner = selectOverlayNode->selectMenuInner_;
5495     ASSERT_NE(selectMenuInner, nullptr);
5496     EXPECT_EQ(selectMenuInner->GetChildren().size(), 4);
5497 }
5498 
5499 /**
5500  * @tc.name: AddCreateMenuItems003
5501  * @tc.desc: Test AddCreateMenuItems when menu items exceed maxWidth.
5502  * @tc.type: FUNC
5503  */
5504 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems003, TestSize.Level1)
5505 {
5506     /**
5507      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5508      */
5509     SelectOverlayInfo selectInfo;
5510     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5511     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5512     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5513     ASSERT_NE(selectOverlayNode, nullptr);
5514 
5515     std::vector<MenuOptionsParam> menuOptionItems;
5516     MenuOptionsParam menuItem1;
5517     menuItem1.content = "item1";
5518     menuItem1.id = "item1";
5519     menuOptionItems.emplace_back(menuItem1);
5520 
5521     MenuOptionsParam menuItem2;
5522     menuItem2.content = "item2";
5523     menuItem2.id = "item2";
5524     menuOptionItems.emplace_back(menuItem2);
5525 
5526     MenuOptionsParam menuItem3;
5527     menuItem3.content = "item3";
5528     menuItem3.id = "item3";
5529     menuOptionItems.emplace_back(menuItem3);
5530 
5531     float maxWidth = 100.0f; // 设置较小的 maxWidth
5532 
5533     /**
5534      * @tc.steps: step2. Call AddCreateMenuItems and verify the return value.
5535      * @tc.expected: The function returns an index less than the total number of menu items.
5536      */
5537     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, infoPtr, maxWidth);
5538     EXPECT_LT(index, static_cast<int32_t>(menuOptionItems.size()));
5539 
5540     /**
5541      * @tc.expected: The number of menu items actually added is correct.
5542      */
5543     auto selectMenuInner = selectOverlayNode->selectMenuInner_;
5544     ASSERT_NE(selectMenuInner, nullptr);
5545     EXPECT_EQ(selectMenuInner->GetChildren().size(), 4);
5546 }
5547 
5548 /**
5549  * @tc.name: AddCreateMenuItems004
5550  * @tc.desc: Test AddCreateMenuItems with empty menu items.
5551  * @tc.type: FUNC
5552  */
5553 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems004, TestSize.Level1)
5554 {
5555     /**
5556      * @tc.steps: step1. Create SelectOverlayNode and prepare empty menu items.
5557      */
5558     SelectOverlayInfo selectInfo;
5559     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5560     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5561     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5562     ASSERT_NE(selectOverlayNode, nullptr);
5563 
5564     std::vector<MenuOptionsParam> menuOptionItems = {};
5565     float maxWidth = 1040.0f;
5566 
5567     /**
5568      * @tc.steps: step2. Call AddCreateMenuItems and verify the return value.
5569      * @tc.expected: The function returns -1.
5570      */
5571     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, infoPtr, maxWidth);
5572     EXPECT_EQ(index, -1);
5573 
5574     /**
5575      * @tc.expected: selectMenuInner_ is not empty.
5576      */
5577     auto selectMenuInner = selectOverlayNode->selectMenuInner_;
5578     ASSERT_NE(selectMenuInner, nullptr);
5579     EXPECT_EQ(selectMenuInner->GetChildren().size(), 4);
5580 }
5581 
5582 /**
5583  * @tc.name: AddCreateMenuItems005
5584  * @tc.desc: Test AddCreateMenuItems with OH_DEFAULT_PASTE menu item.
5585  * @tc.type: FUNC
5586  */
5587 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems005, TestSize.Level1)
5588 {
5589     /**
5590      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5591      */
5592     SelectOverlayInfo selectInfo;
5593     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5594     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5595     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5596     ASSERT_NE(selectOverlayNode, nullptr);
5597 
5598     std::vector<MenuOptionsParam> menuOptionItems;
5599     MenuOptionsParam menuItem1;
5600     menuItem1.content = "OH_DEFAULT_PASTE";
5601     menuItem1.id = "OH_DEFAULT_PASTE";
5602     menuOptionItems.emplace_back(menuItem1);
5603 
5604     float maxWidth = 1040.0f;
5605 
5606     /**
5607      * @tc.steps: step2. Call AddCreateMenuItems and verify the return value.
5608      * @tc.expected: The function returns -1.
5609      */
5610     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, infoPtr, maxWidth);
5611     EXPECT_EQ(index, -1);
5612 
5613     /**
5614      * @tc.expected: OH_DEFAULT_PASTE menu item is handled correctly.
5615      */
5616     auto selectMenuInner = selectOverlayNode->selectMenuInner_;
5617     ASSERT_NE(selectMenuInner, nullptr);
5618     auto child = selectMenuInner->GetChildAtIndex(0);
5619     ASSERT_NE(child, nullptr);
5620     auto button = AceType::DynamicCast<FrameNode>(child);
5621     ASSERT_NE(button, nullptr);
5622     EXPECT_EQ(button->GetTag(), "SelectMenuButton");
5623 }
5624 
5625 /**
5626  * @tc.name: AddCreateMenuItems006
5627  * @tc.desc: Test AddCreateMenuItems with nullptr info.
5628  * @tc.type: FUNC
5629  */
5630 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems006, TestSize.Level1)
5631 {
5632     /**
5633      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5634      */
5635     SelectOverlayInfo selectInfo;
5636     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5637     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5638     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5639     ASSERT_NE(selectOverlayNode, nullptr);
5640 
5641     std::vector<MenuOptionsParam> menuOptionItems;
5642     MenuOptionsParam menuItem1;
5643     menuItem1.content = "item1";
5644     menuItem1.id = "item1";
5645     menuOptionItems.emplace_back(menuItem1);
5646 
5647     std::shared_ptr<SelectOverlayInfo> info = nullptr; // 设置 info 为空指针
5648     float maxWidth = 1040.0f;
5649 
5650     /**
5651      * @tc.steps: step2. Call AddCreateMenuItems and verify the return value.
5652      * @tc.expected: The function returns -1.
5653      */
5654     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, info, maxWidth);
5655     EXPECT_EQ(index, -1);
5656 
5657     /**
5658      * @tc.expected: selectMenuInner_ is not empty.
5659      */
5660     auto selectMenuInner = selectOverlayNode->selectMenuInner_;
5661     ASSERT_NE(selectMenuInner, nullptr);
5662     EXPECT_EQ(selectMenuInner->GetChildren().size(), 4);
5663 }
5664 
5665 /**
5666  * @tc.name: AddCreateMenuItems007
5667  * @tc.desc: Test AddCreateMenuItems with isFirstOption flag.
5668  * @tc.type: FUNC
5669  */
5670 HWTEST_F(SelectOverlayTestNg, AddCreateMenuItems007, TestSize.Level1)
5671 {
5672     /**
5673      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5674      */
5675     SelectOverlayInfo selectInfo;
5676     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5677     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5678     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5679     ASSERT_NE(selectOverlayNode, nullptr);
5680 
5681     std::vector<MenuOptionsParam> menuOptionItems;
5682     MenuOptionsParam menuItem1;
5683     menuItem1.content = "item1";
5684     menuItem1.id = "item1";
5685     menuOptionItems.emplace_back(menuItem1);
5686 
5687     MenuOptionsParam menuItem2;
5688     menuItem2.content = "item2";
5689     menuItem2.id = "item2";
5690     menuOptionItems.emplace_back(menuItem2);
5691 
5692     float maxWidth = 1040.0f;
5693 
5694     /**
5695      * @tc.steps: step2. Call AddCreateMenuItems and verify the return value.
5696      * @tc.expected: The function returns -1.
5697      */
5698     int32_t index = selectOverlayNode->AddCreateMenuItems(menuOptionItems, infoPtr, maxWidth);
5699     EXPECT_EQ(index, -1);
5700 
5701     /**
5702      * @tc.expected: isFirstOption flag is set correctly for the first menu item.
5703      */
5704     EXPECT_FALSE(menuOptionItems[0].isFirstOption);
5705 }
5706 
5707 /**
5708  * @tc.name: AddCreateMenuExtensionMenuParams001
5709  * @tc.desc: Test AddCreateMenuExtensionMenuParams with multiple menu items.
5710  * @tc.type: FUNC
5711  */
5712 HWTEST_F(SelectOverlayTestNg, AddCreateMenuExtensionMenuParams001, TestSize.Level1)
5713 {
5714     /**
5715      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5716      */
5717     SelectOverlayInfo selectInfo;
__anon0c486c3f4802() 5718     selectInfo.menuCallback.onCut = []() {};
__anon0c486c3f4902() 5719     selectInfo.menuCallback.onCopy = []() {};
__anon0c486c3f4a02() 5720     selectInfo.menuCallback.onSelectAll = []() {};
__anon0c486c3f4b02() 5721     selectInfo.menuCallback.onPaste = []() {};
__anon0c486c3f4c02() 5722     selectInfo.menuCallback.onTranslate = []() {};
__anon0c486c3f4d02() 5723     selectInfo.menuCallback.onSearch = []() {};
__anon0c486c3f4e02() 5724     selectInfo.menuCallback.onShare = []() {};
__anon0c486c3f4f02() 5725     selectInfo.menuCallback.onCameraInput = []() {};
__anon0c486c3f5002() 5726     selectInfo.menuCallback.onAIWrite = []() {};
5727 
5728     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5729     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5730     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5731 
5732     std::vector<MenuOptionsParam> menuOptionItems;
5733     std::vector<std::pair<std::string, std::string>> menuItems = { { "Cut", "OH_DEFAULT_CUT" },
5734         { "Copy", "OH_DEFAULT_COPY" }, { "Select All", "OH_DEFAULT_SELECT_ALL" },
5735         { "Translate", "OH_DEFAULT_TRANSLATE" }, { "Search", "OH_DEFAULT_SEARCH" }, { "Share", "OH_DEFAULT_SHARE" },
5736         { "Camera Input", "OH_DEFAULT_CAMERA_INPUT" }, { "Ai Write", "OH_DEFAULT_AI_WRITE" } };
5737 
5738     for (const auto& item : menuItems) {
5739         MenuOptionsParam menuItem;
5740         menuItem.content = item.first;
5741         menuItem.id = item.second;
5742         menuOptionItems.emplace_back(menuItem);
5743     }
5744 
5745     std::vector<OptionParam> params;
5746     int32_t startIndex = 0;
5747 
5748     /**
5749      * @tc.steps: step2. Mock ThemeManager and IconTheme.
5750      */
5751     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5752     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5753 
5754     auto iconTheme = AceType::MakeRefPtr<IconTheme>();
5755     ASSERT_NE(iconTheme, nullptr);
5756     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5757     ASSERT_NE(textOverlayTheme, nullptr);
5758     EXPECT_CALL(*themeManager, GetTheme(_))
5759         .WillOnce(Return(textOverlayTheme)) // 第一次调用返回 TextOverlayTheme
5760         .WillRepeatedly(Return(iconTheme)); // 后续调用返回 IconTheme
5761 
5762     /**
5763      * @tc.steps: step3. Call AddCreateMenuExtensionMenuParams.
5764      * @tc.expected: The function correctly adds menu items and triggers GetSystemIconPath.
5765      */
5766     selectOverlayNode->AddCreateMenuExtensionMenuParams(menuOptionItems, infoPtr, startIndex, params);
5767 
5768     /**
5769      * @tc.expected: The params vector contains the correct number of items.
5770      */
5771     EXPECT_EQ(params.size(), menuOptionItems.size());
5772 
5773     /**
5774      * @tc.expected: The icon path for each menu item is correctly set.
5775      */
5776     EXPECT_EQ(params[0].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_CUT_SVG));
5777     EXPECT_EQ(params[1].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_COPY_SVG));
5778     EXPECT_EQ(params[2].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_SELECT_ALL_SVG));
5779     EXPECT_EQ(params[3].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_TRANSLATE_SVG));
5780     EXPECT_EQ(params[4].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_SEARCH_SVG));
5781     EXPECT_EQ(params[5].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_SHARE_SVG));
5782     EXPECT_EQ(params[6].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_TAKEPHOTO_SVG));
5783     EXPECT_EQ(params[7].icon, iconTheme->GetIconPath(InternalResource::ResourceId::IC_AI_WRITE_SVG));
5784 }
5785 
5786 /**
5787  * @tc.name: AddCreateMenuExtensionMenuParams002
5788  * @tc.desc: Test AddCreateMenuExtensionMenuParams with startIndex greater than menu items size.
5789  * @tc.type: FUNC
5790  */
5791 HWTEST_F(SelectOverlayTestNg, AddCreateMenuExtensionMenuParams002, TestSize.Level1)
5792 {
5793     /**
5794      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5795      */
5796     SelectOverlayInfo selectInfo;
__anon0c486c3f5102() 5797     selectInfo.menuCallback.onCut = []() {};
__anon0c486c3f5202() 5798     selectInfo.menuCallback.onCopy = []() {};
__anon0c486c3f5302() 5799     selectInfo.menuCallback.onPaste = []() {};
5800 
5801     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5802     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5803     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5804 
5805     std::vector<MenuOptionsParam> menuOptionItems;
5806     MenuOptionsParam menuItem1;
5807     menuItem1.content = "Cut";
5808     menuItem1.id = "OH_DEFAULT_CUT";
5809     menuOptionItems.emplace_back(menuItem1);
5810 
5811     MenuOptionsParam menuItem2;
5812     menuItem2.content = "Copy";
5813     menuItem2.id = "OH_DEFAULT_COPY";
5814     menuOptionItems.emplace_back(menuItem2);
5815 
5816     std::vector<OptionParam> params;
5817     int32_t startIndex = 3; // startIndex 大于菜单项数量
5818 
5819     /**
5820      * @tc.steps: step2. Mock ThemeManager and IconTheme.
5821      */
5822     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5823     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5824 
5825     auto iconTheme = AceType::MakeRefPtr<IconTheme>();
5826     ASSERT_NE(iconTheme, nullptr);
5827     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5828     ASSERT_NE(textOverlayTheme, nullptr);
5829     EXPECT_CALL(*themeManager, GetTheme(_))
5830         .WillOnce(Return(textOverlayTheme))
5831         .WillRepeatedly(Return(iconTheme));
5832 
5833     /**
5834      * @tc.steps: step3. Call AddCreateMenuExtensionMenuParams.
5835      * @tc.expected: The function does not add any items to params.
5836      */
5837     selectOverlayNode->AddCreateMenuExtensionMenuParams(menuOptionItems, infoPtr, startIndex, params);
5838 
5839     /**
5840      * @tc.expected: The params vector is empty.
5841      */
5842     EXPECT_TRUE(params.empty());
5843 }
5844 
5845 /**
5846  * @tc.name: AddCreateMenuExtensionMenuParams003
5847  * @tc.desc: Test AddCreateMenuExtensionMenuParams with OH_DEFAULT_PASTE menu item.
5848  * @tc.type: FUNC
5849  */
5850 HWTEST_F(SelectOverlayTestNg, AddCreateMenuExtensionMenuParams003, TestSize.Level1)
5851 {
5852     /**
5853      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5854      */
5855     SelectOverlayInfo selectInfo;
__anon0c486c3f5402() 5856     selectInfo.menuCallback.onPaste = []() {};
5857 
5858     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5859     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5860     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5861 
5862     std::vector<MenuOptionsParam> menuOptionItems;
5863     MenuOptionsParam menuItem1;
5864     menuItem1.content = "Paste";
5865     menuItem1.id = "OH_DEFAULT_PASTE";
5866     menuOptionItems.emplace_back(menuItem1);
5867 
5868     std::vector<OptionParam> params;
5869     int32_t startIndex = 0;
5870 
5871     /**
5872      * @tc.steps: step2. Mock ThemeManager and IconTheme.
5873      */
5874     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5875     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5876 
5877     auto iconTheme = AceType::MakeRefPtr<IconTheme>();
5878     ASSERT_NE(iconTheme, nullptr);
5879     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5880     ASSERT_NE(textOverlayTheme, nullptr);
5881     EXPECT_CALL(*themeManager, GetTheme(_))
5882         .WillOnce(Return(textOverlayTheme))
5883         .WillRepeatedly(Return(iconTheme));
5884 
5885     /**
5886      * @tc.steps: step3. Call AddCreateMenuExtensionMenuParams.
5887      * @tc.expected: The function correctly adds the OH_DEFAULT_PASTE menu item.
5888      */
5889     selectOverlayNode->AddCreateMenuExtensionMenuParams(menuOptionItems, infoPtr, startIndex, params);
5890 
5891     /**
5892      * @tc.expected: The params vector contains one item.
5893      */
5894     EXPECT_EQ(params.size(), 1);
5895 
5896     /**
5897      * @tc.expected: The OH_DEFAULT_PASTE menu item has the correct properties.
5898      */
5899     EXPECT_EQ(params[0].value, "Paste");
5900     EXPECT_EQ(params[0].icon, " "); // OH_DEFAULT_PASTE 的 icon 应为空
5901     EXPECT_TRUE(params[0].isPasteOption);
5902 }
5903 
5904 /**
5905  * @tc.name: AddCreateMenuExtensionMenuParams004
5906  * @tc.desc: Test AddCreateMenuExtensionMenuParams with symbol callback.
5907  * @tc.type: FUNC
5908  */
5909 HWTEST_F(SelectOverlayTestNg, AddCreateMenuExtensionMenuParams005, TestSize.Level1)
5910 {
5911     /**
5912      * @tc.steps: step1. Create SelectOverlayNode and prepare menu items.
5913      */
5914     SelectOverlayInfo selectInfo;
__anon0c486c3f5502() 5915     selectInfo.menuCallback.onCut = []() {};
5916 
5917     auto infoPtr = std::make_shared<SelectOverlayInfo>(selectInfo);
5918     auto frameNode = SelectOverlayNode::CreateSelectOverlayNode(infoPtr);
5919     auto selectOverlayNode = AceType::DynamicCast<SelectOverlayNode>(frameNode);
5920 
5921     std::vector<MenuOptionsParam> menuOptionItems;
5922     MenuOptionsParam menuItem1;
5923     menuItem1.content = "Cut";
5924     menuItem1.id = "OH_DEFAULT_CUT";
5925     menuOptionItems.emplace_back(menuItem1);
5926 
5927     std::vector<OptionParam> params;
5928     int32_t startIndex = 0;
5929 
5930     /**
5931      * @tc.steps: step2. Mock ThemeManager and IconTheme.
5932      */
5933     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
5934     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
5935 
5936     auto iconTheme = AceType::MakeRefPtr<IconTheme>();
5937     ASSERT_NE(iconTheme, nullptr);
5938     auto textOverlayTheme = AceType::MakeRefPtr<TextOverlayTheme>();
5939     ASSERT_NE(textOverlayTheme, nullptr);
5940     EXPECT_CALL(*themeManager, GetTheme(_)).WillOnce(Return(textOverlayTheme)).WillRepeatedly(Return(iconTheme));
5941 
5942     /**
5943      * @tc.steps: step3. Call AddCreateMenuExtensionMenuParams.
5944      * @tc.expected: The function correctly adds the menu item with symbol callback.
5945      */
5946     selectOverlayNode->AddCreateMenuExtensionMenuParams(menuOptionItems, infoPtr, startIndex, params);
5947 
5948     /**
5949      * @tc.expected: The params vector contains one item.
5950      */
5951     EXPECT_EQ(params.size(), 1);
5952 
5953     /**
5954      * @tc.expected: The symbol callback is correctly set.
5955      */
5956     EXPECT_NE(params[0].symbol, nullptr);
5957 }
5958 } // namespace OHOS::Ace::NG
5959