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