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
16 #include "gtest/gtest.h"
17 #define private public
18 #define protected public
19 #include "core/components_ng/base/view_stack_processor.h"
20 #include "core/components_ng/pattern/divider/divider_layout_property.h"
21 #include "core/components_ng/pattern/divider/divider_pattern.h"
22 #include "core/components_ng/pattern/flex/flex_layout_algorithm.h"
23 #include "core/components_ng/pattern/flex/flex_layout_pattern.h"
24 #include "core/components_ng/pattern/image/image_pattern.h"
25 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
26 #include "core/components_ng/pattern/side_bar/side_bar_container_layout_algorithm.h"
27 #include "core/components_ng/pattern/side_bar/side_bar_container_layout_property.h"
28 #include "core/components_ng/pattern/side_bar/side_bar_container_model_ng.h"
29 #include "core/components_ng/pattern/side_bar/side_bar_container_pattern.h"
30 #include "core/components_ng/pattern/text/text_pattern.h"
31 #include "core/components_v2/inspector/inspector_constants.h"
32 #include "test/mock/core/pipeline/mock_pipeline_context.h"
33
34 using namespace testing;
35 using namespace testing::ext;
36 namespace OHOS::Ace::NG {
37 namespace {
38 const InspectorFilter filter;
39 constexpr Dimension STROKE_WIDTH = 10.0_vp;
40 constexpr Dimension START_MARGIN = 5.0_vp;
41 constexpr Dimension END_MARGIN = 5.0_vp;
42 constexpr Dimension NONE_WIDTH = 0.0_vp;
43 const SizeF FIRST_ITEM_SIZE(5.0f, 5.0f);
44 const SizeF SELF_SIZE(50.0f, 50.0f);
45 const float REAL_WIDTH = 10.0f;
46 } // namespace
47
48 class SideBarViewTestNg : public testing::Test {
49 public:
50 static void SetUpTestCase();
51 static void TearDownTestCase();
52 };
53
SetUpTestCase()54 void SideBarViewTestNg::SetUpTestCase()
55 {
56 MockPipelineContext::SetUp();
57 }
58
TearDownTestCase()59 void SideBarViewTestNg::TearDownTestCase()
60 {
61 MockPipelineContext::TearDown();
62 }
63
64 /**
65 * @tc.name: SideBarViewTestNg001
66 * @tc.desc: Test SideBar devider
67 * @tc.type: FUNC
68 */
69 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg001, TestSize.Level1)
70 {
71 SideBarContainerModelNG SideBarContainerModelInstance;
72 Dimension width = 10.0_vp;
73 Dimension abnormalWidth = -10.0_vp;
74 SideBarContainerModelInstance.Create();
75 SideBarContainerModelInstance.SetDividerStrokeWidth(STROKE_WIDTH);
76 SideBarContainerModelInstance.SetDividerColor(Color::BLUE);
77 SideBarContainerModelInstance.SetDividerStartMargin(START_MARGIN);
78 SideBarContainerModelInstance.SetDividerEndMargin(END_MARGIN);
79 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::SIDEBAR_WIDTH, width);
80 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::MIN_SIDEBAR_WIDTH, width);
81 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::MAX_SIDEBAR_WIDTH, width);
82 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::SIDEBAR_WIDTH, abnormalWidth);
83 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::MIN_SIDEBAR_WIDTH, abnormalWidth);
84 SideBarContainerModelInstance.ParseAndSetWidth(WidthType::MAX_SIDEBAR_WIDTH, abnormalWidth);
85 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
86 EXPECT_NE(frameNode, nullptr);
87
88 auto sideBarLayoutProperty = frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>();
89 EXPECT_NE(sideBarLayoutProperty, nullptr);
90 EXPECT_EQ(sideBarLayoutProperty->GetDividerStrokeWidth(), STROKE_WIDTH);
91 EXPECT_EQ(sideBarLayoutProperty->GetDividerColor(), Color::BLUE);
92 EXPECT_EQ(sideBarLayoutProperty->GetDividerStartMargin(), START_MARGIN);
93 EXPECT_EQ(sideBarLayoutProperty->GetDividerEndMargin(), END_MARGIN);
94 }
95
96 /**
97 * @tc.name: SideBarViewTestNg002
98 * @tc.desc: Test SideBar OnUpdateShowDivider
99 * @tc.type: FUNC
100 */
101 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg002, TestSize.Level1)
102 {
103 SideBarContainerModelNG SideBarContainerModelInstance;
104 SideBarContainerModelInstance.Create();
105 SideBarContainerModelInstance.SetDividerStrokeWidth(STROKE_WIDTH);
106 SideBarContainerModelInstance.SetDividerColor(Color::BLUE);
107 SideBarContainerModelInstance.SetDividerStartMargin(START_MARGIN);
108 SideBarContainerModelInstance.SetDividerEndMargin(END_MARGIN);
109 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
110 EXPECT_NE(frameNode, nullptr);
111
112 auto row = FrameNode::CreateFrameNode(
113 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
114 AceType::MakeRefPtr<LinearLayoutPattern>(false));
115 EXPECT_NE(row, nullptr);
116 auto row2 = FrameNode::CreateFrameNode(
117 V2::SIDE_BAR_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
118 AceType::MakeRefPtr<SideBarContainerPattern>());
119 EXPECT_NE(row2, nullptr);
120 row->MountToParent(frameNode);
121 row2->MountToParent(frameNode);
122 ViewStackProcessor::GetInstance()->Push(frameNode);
123 frameNode->MarkModifyDone();
124 }
125
126 /**
127 * @tc.name: SideBarViewTestNg003
128 * @tc.desc: Test SideBar OnUpdateShowDivider
129 * @tc.type: FUNC
130 */
131 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg003, TestSize.Level1)
132 {
133 SideBarContainerModelNG SideBarContainerModelInstance;
134 SideBarContainerModelInstance.Create();
135 SideBarContainerModelInstance.SetDividerStrokeWidth(STROKE_WIDTH);
136 SideBarContainerModelInstance.SetDividerColor(Color::BLUE);
137 SideBarContainerModelInstance.SetDividerStartMargin(START_MARGIN);
138 SideBarContainerModelInstance.SetDividerEndMargin(END_MARGIN);
139 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
140 EXPECT_NE(frameNode, nullptr);
141
142 auto row = FrameNode::CreateFrameNode(
143 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
144 AceType::MakeRefPtr<LinearLayoutPattern>(false));
145 EXPECT_NE(row, nullptr);
146 auto row2 = FrameNode::CreateFrameNode(
147 V2::SIDE_BAR_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
148 AceType::MakeRefPtr<SideBarContainerPattern>());
149 EXPECT_NE(row2, nullptr);
150 row->MountToParent(frameNode);
151 row2->MountToParent(frameNode);
152 auto dividerNode = FrameNode::GetOrCreateFrameNode(
153 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
__anonfeb3efc10202() 154 []() { return AceType::MakeRefPtr<DividerPattern>(); });
155 EXPECT_NE(dividerNode, nullptr);
156 dividerNode->MountToParent(frameNode);
157
158 int32_t imgNodeId = ElementRegister::GetInstance()->MakeUniqueId();
159 auto imgNode = FrameNode::GetOrCreateFrameNode(
__anonfeb3efc10302() 160 V2::ROW_ETS_TAG, imgNodeId, []() { return AceType::MakeRefPtr<ImagePattern>(); });
161 EXPECT_NE(imgNode, nullptr);
162 imgNode->MountToParent(frameNode);
163 frameNode->MarkModifyDone();
164 }
165
166 /**
167 * @tc.name: SideBarViewTestNg004
168 * @tc.desc: Test SideBar Measure and layout
169 * @tc.type: SideBar Measure
170 */
171 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg004, TestSize.Level1)
172 {
173 SideBarContainerModelNG SideBarContainerModelInstance;
174 SideBarContainerModelInstance.Create();
175 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
176 EXPECT_NE(frameNode, nullptr);
177
178 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
179 EXPECT_NE(geometryNode, nullptr);
180 RefPtr<LayoutWrapperNode> layoutWrapper =
181 AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
182
183 auto row = FrameNode::CreateFrameNode(
184 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
185 AceType::MakeRefPtr<LinearLayoutPattern>(false));
186 EXPECT_NE(row, nullptr);
187
188 RefPtr<GeometryNode> rowGeometryNode = AceType::MakeRefPtr<GeometryNode>();
189 rowGeometryNode->Reset();
190 RefPtr<LayoutWrapperNode> rowLayoutWrapper =
191 AceType::MakeRefPtr<LayoutWrapperNode>(row, rowGeometryNode, row->GetLayoutProperty());
192 EXPECT_NE(rowLayoutWrapper, nullptr);
193 auto rowPattern = row->GetPattern<LinearLayoutPattern>();
194 EXPECT_NE(rowPattern, nullptr);
195
196 auto childLayoutConstraint = layoutWrapper->GetLayoutProperty()->CreateChildConstraint();
197 childLayoutConstraint.selfIdealSize = OptionalSizeF(FIRST_ITEM_SIZE);
198
199 rowLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
200 auto rowLayoutAlgorithm = rowPattern->CreateLayoutAlgorithm();
201 EXPECT_NE(rowLayoutAlgorithm, nullptr);
202
203 rowLayoutWrapper->SetLayoutAlgorithm(
204 AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(rowLayoutAlgorithm));
205 rowLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
206 CalcSize(CalcLength(5.0f), CalcLength(5.0f)));
207
208 row->MountToParent(frameNode);
209 layoutWrapper->AppendChild(rowLayoutWrapper);
210
211 auto siderBar = FrameNode::CreateFrameNode(
212 V2::SIDE_BAR_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
213 AceType::MakeRefPtr<SideBarContainerPattern>());
214 EXPECT_NE(siderBar, nullptr);
215
216 RefPtr<GeometryNode> siderBarGeometryNode = AceType::MakeRefPtr<GeometryNode>();
217 siderBarGeometryNode->Reset();
218 RefPtr<LayoutWrapperNode> sideBarLayoutWrapper =
219 AceType::MakeRefPtr<LayoutWrapperNode>(siderBar, siderBarGeometryNode, siderBar->GetLayoutProperty());
220 EXPECT_NE(sideBarLayoutWrapper, nullptr);
221 auto siderBarPattern = siderBar->GetPattern<SideBarContainerPattern>();
222 EXPECT_NE(siderBarPattern, nullptr);
223
224 sideBarLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
225 auto sideBarLayoutAlgorithm = siderBarPattern->CreateLayoutAlgorithm();
226 EXPECT_NE(sideBarLayoutAlgorithm, nullptr);
227
228 sideBarLayoutWrapper->SetLayoutAlgorithm(
229 AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(sideBarLayoutAlgorithm));
230 sideBarLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
231 CalcSize(CalcLength(5.0f), CalcLength(5.0f)));
232
233 siderBar->MountToParent(frameNode);
234 layoutWrapper->AppendChild(sideBarLayoutWrapper);
235
236 auto dividerNode = FrameNode::GetOrCreateFrameNode(
237 V2::DIVIDER_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
__anonfeb3efc10402() 238 []() { return AceType::MakeRefPtr<DividerPattern>(); });
239 EXPECT_NE(dividerNode, nullptr);
240
241 RefPtr<GeometryNode> dividerNodeGeometryNode = AceType::MakeRefPtr<GeometryNode>();
242 dividerNodeGeometryNode->Reset();
243 RefPtr<LayoutWrapperNode> dividerNodeLayoutWrapper =
244 AceType::MakeRefPtr<LayoutWrapperNode>(dividerNode, dividerNodeGeometryNode, dividerNode->GetLayoutProperty());
245 EXPECT_NE(dividerNodeLayoutWrapper, nullptr);
246 auto dividerNodePattern = dividerNode->GetPattern<DividerPattern>();
247 EXPECT_NE(dividerNodePattern, nullptr);
248
249 dividerNodeLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
250 auto dividerNodeLayoutAlgorithm = dividerNodePattern->CreateLayoutAlgorithm();
251 EXPECT_NE(dividerNodeLayoutAlgorithm, nullptr);
252
253 dividerNodeLayoutWrapper->SetLayoutAlgorithm(
254 AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(dividerNodeLayoutAlgorithm));
255 dividerNodeLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
256 CalcSize(CalcLength(5.0f), CalcLength(5.0f)));
257
258 dividerNode->MountToParent(frameNode);
259 layoutWrapper->AppendChild(dividerNodeLayoutWrapper);
260
261 int32_t imgNodeId = ElementRegister::GetInstance()->MakeUniqueId();
262 auto imgNode = FrameNode::GetOrCreateFrameNode(
__anonfeb3efc10502() 263 V2::IMAGE_ETS_TAG, imgNodeId, []() { return AceType::MakeRefPtr<ImagePattern>(); });
264 EXPECT_NE(imgNode, nullptr);
265
266 RefPtr<GeometryNode> imgNodeGeometryNode = AceType::MakeRefPtr<GeometryNode>();
267 imgNodeGeometryNode->Reset();
268 RefPtr<LayoutWrapperNode> imgNodeLayoutWrapper =
269 AceType::MakeRefPtr<LayoutWrapperNode>(imgNode, imgNodeGeometryNode, imgNode->GetLayoutProperty());
270 EXPECT_NE(imgNodeLayoutWrapper, nullptr);
271 auto imgNodePattern = imgNode->GetPattern<ImagePattern>();
272 EXPECT_NE(imgNodePattern, nullptr);
273
274 imgNodeLayoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(childLayoutConstraint);
275 auto imgNodeLayoutAlgorithm = imgNodePattern->CreateLayoutAlgorithm();
276 EXPECT_NE(imgNodeLayoutAlgorithm, nullptr);
277
278 imgNodeLayoutWrapper->SetLayoutAlgorithm(
279 AccessibilityManager::MakeRefPtr<LayoutAlgorithmWrapper>(imgNodeLayoutAlgorithm));
280 imgNodeLayoutWrapper->GetLayoutProperty()->UpdateUserDefinedIdealSize(
281 CalcSize(CalcLength(5.0f), CalcLength(5.0f)));
282
283 imgNode->MountToParent(frameNode);
284 layoutWrapper->AppendChild(imgNodeLayoutWrapper);
285
286 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
287 EXPECT_NE(sideBarContainerPattern, nullptr);
288 auto sideLayoutAlgorithm = sideBarContainerPattern->CreateLayoutAlgorithm();
289 EXPECT_NE(sideLayoutAlgorithm, nullptr);
290 layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(sideLayoutAlgorithm));
291
292 LayoutConstraintF LayoutConstraintVaildSize;
293 LayoutConstraintVaildSize.selfIdealSize.SetSize(SizeF(1000000, 1000000));
294 layoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(LayoutConstraintVaildSize);
295 layoutWrapper->GetLayoutProperty()->UpdateContentConstraint();
296 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
297 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
298
299 auto layoutAlgorithmWrapper = AceType::DynamicCast<LayoutAlgorithmWrapper>(layoutWrapper->GetLayoutAlgorithm());
300 EXPECT_NE(layoutAlgorithmWrapper, nullptr);
301 auto sideBarContainerLayoutAlgorithm = AceType::DynamicCast<SideBarContainerLayoutAlgorithm>
302 (layoutAlgorithmWrapper->GetLayoutAlgorithm());
303 EXPECT_NE(sideBarContainerLayoutAlgorithm, nullptr);
304 sideBarContainerLayoutAlgorithm->SetRealDividerWidth(REAL_WIDTH);
305 sideBarContainerLayoutAlgorithm->GetRealDividerWidth();
306 sideBarContainerLayoutAlgorithm->SetSideBarStatus(SideBarStatus::SHOW);
307 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>()->UpdateSideBarPosition(SideBarPosition::END);
308 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
309 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
310
311 sideBarContainerLayoutAlgorithm->SetSideBarStatus(SideBarStatus::HIDDEN);
312 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>()->UpdateSideBarPosition(SideBarPosition::START);
313 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
314 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
315
316 sideBarContainerLayoutAlgorithm->SetSideBarStatus(SideBarStatus::CHANGING);
317 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>()->UpdateSideBarPosition(SideBarPosition::START);
318 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
319 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
320
321 sideBarContainerLayoutAlgorithm->SetSideBarStatus(SideBarStatus::HIDDEN);
322 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>()->UpdateSideBarPosition(SideBarPosition::END);
323 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
324 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
325
326 sideBarContainerLayoutAlgorithm->SetSideBarStatus(SideBarStatus::CHANGING);
327 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>()->UpdateSideBarPosition(SideBarPosition::END);
328 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
329 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
330
331 frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>
332 ()->UpdateSideBarContainerType(SideBarContainerType::AUTO);
333 sideLayoutAlgorithm->Measure(AccessibilityManager::RawPtr(layoutWrapper));
334 sideLayoutAlgorithm->Layout(AccessibilityManager::RawPtr(layoutWrapper));
335 }
336
337 /**
338 * @tc.name: SideBarViewTestNg005
339 * @tc.desc: Test SideBar AddDividerHotZoneRect
340 * @tc.type: FUNC
341 */
342 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg005, TestSize.Level1)
343 {
344 SideBarContainerModelNG SideBarContainerModelInstance;
345 SideBarContainerModelInstance.Create();
346 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
347 EXPECT_NE(frameNode, nullptr);
348
349 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
350 EXPECT_NE(geometryNode, nullptr);
351 RefPtr<LayoutWrapperNode> layoutWrapper =
352 AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
353
354 auto row = FrameNode::CreateFrameNode(
355 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
356 AceType::MakeRefPtr<LinearLayoutPattern>(false));
357 EXPECT_NE(row, nullptr);
358 row->MountToParent(frameNode);
359
360 auto siderBar = FrameNode::CreateFrameNode(
361 V2::SIDE_BAR_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
362 AceType::MakeRefPtr<SideBarContainerPattern>());
363 EXPECT_NE(siderBar, nullptr);
364 siderBar->MountToParent(frameNode);
365
366 auto dividerNode = FrameNode::GetOrCreateFrameNode(
367 V2::DIVIDER_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
__anonfeb3efc10602() 368 []() { return AceType::MakeRefPtr<DividerPattern>(); });
369 EXPECT_NE(dividerNode, nullptr);
370 dividerNode->MountToParent(frameNode);
371
372 int32_t imgNodeId = ElementRegister::GetInstance()->MakeUniqueId();
373 auto imgNode = FrameNode::GetOrCreateFrameNode(
__anonfeb3efc10702() 374 V2::IMAGE_ETS_TAG, imgNodeId, []() { return AceType::MakeRefPtr<ImagePattern>(); });
375 EXPECT_NE(imgNode, nullptr);
376 imgNode->MountToParent(frameNode);
377
378 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
379 EXPECT_NE(sideBarContainerPattern, nullptr);
380 auto sideLayoutAlgorithm = sideBarContainerPattern->CreateLayoutAlgorithm();
381 EXPECT_NE(sideLayoutAlgorithm, nullptr);
382 layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(sideLayoutAlgorithm));
383
384 LayoutConstraintF LayoutConstraintVaildSize;
385 LayoutConstraintVaildSize.selfIdealSize.SetSize(SizeF(1000000, 1000000));
386 layoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(LayoutConstraintVaildSize);
387 layoutWrapper->GetLayoutProperty()->UpdateContentConstraint();
388
389 auto layoutAlgorithmWrapper = AceType::DynamicCast<LayoutAlgorithmWrapper>(layoutWrapper->GetLayoutAlgorithm());
390 EXPECT_NE(layoutAlgorithmWrapper, nullptr);
391 auto sideBarContainerLayoutAlgorithm = AceType::DynamicCast<SideBarContainerLayoutAlgorithm>
392 (layoutAlgorithmWrapper->GetLayoutAlgorithm());
393 EXPECT_NE(sideBarContainerLayoutAlgorithm, nullptr);
394 sideBarContainerLayoutAlgorithm->SetRealDividerWidth(REAL_WIDTH);
395 sideBarContainerLayoutAlgorithm->GetRealDividerWidth();
396 sideBarContainerPattern->AddDividerHotZoneRect(sideBarContainerLayoutAlgorithm);
397 }
398
399 /**
400 * @tc.name: SideBarViewTestNg006
401 * @tc.desc: Test SideBar AddDividerHotZoneRect
402 * @tc.type: FUNC
403 */
404 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg006, TestSize.Level1)
405 {
406 SideBarContainerModelNG SideBarContainerModelInstance;
407 SideBarContainerModelInstance.Create();
408 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
409 EXPECT_NE(frameNode, nullptr);
410
411 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
412 EXPECT_NE(geometryNode, nullptr);
413 RefPtr<LayoutWrapperNode> layoutWrapper =
414 AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
415
416 auto row = FrameNode::CreateFrameNode(
417 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
418 AceType::MakeRefPtr<LinearLayoutPattern>(false));
419 EXPECT_NE(row, nullptr);
420 row->MountToParent(frameNode);
421
422 auto siderBar = FrameNode::CreateFrameNode(
423 V2::SIDE_BAR_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
424 AceType::MakeRefPtr<SideBarContainerPattern>());
425 EXPECT_NE(siderBar, nullptr);
426 siderBar->MountToParent(frameNode);
427
428 auto dividerNode = FrameNode::GetOrCreateFrameNode(
429 V2::ROW_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
__anonfeb3efc10802() 430 []() { return AceType::MakeRefPtr<DividerPattern>(); });
431 EXPECT_NE(dividerNode, nullptr);
432 dividerNode->MountToParent(frameNode);
433
434 int32_t imgNodeId = ElementRegister::GetInstance()->MakeUniqueId();
435 auto imgNode = FrameNode::GetOrCreateFrameNode(
__anonfeb3efc10902() 436 V2::IMAGE_ETS_TAG, imgNodeId, []() { return AceType::MakeRefPtr<ImagePattern>(); });
437 EXPECT_NE(imgNode, nullptr);
438 imgNode->MountToParent(frameNode);
439
440 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
441 EXPECT_NE(sideBarContainerPattern, nullptr);
442 auto sideLayoutAlgorithm = sideBarContainerPattern->CreateLayoutAlgorithm();
443 EXPECT_NE(sideLayoutAlgorithm, nullptr);
444 layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(sideLayoutAlgorithm));
445
446 LayoutConstraintF LayoutConstraintVaildSize;
447 LayoutConstraintVaildSize.selfIdealSize.SetSize(SizeF(1000000, 1000000));
448 layoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(LayoutConstraintVaildSize);
449 layoutWrapper->GetLayoutProperty()->UpdateContentConstraint();
450
451 auto layoutAlgorithmWrapper = AceType::DynamicCast<LayoutAlgorithmWrapper>(layoutWrapper->GetLayoutAlgorithm());
452 EXPECT_NE(layoutAlgorithmWrapper, nullptr);
453 auto sideBarContainerLayoutAlgorithm = AceType::DynamicCast<SideBarContainerLayoutAlgorithm>
454 (layoutAlgorithmWrapper->GetLayoutAlgorithm());
455 EXPECT_NE(sideBarContainerLayoutAlgorithm, nullptr);
456 sideBarContainerLayoutAlgorithm->SetRealDividerWidth(REAL_WIDTH);
457 sideBarContainerLayoutAlgorithm->GetRealDividerWidth();
458 sideBarContainerPattern->AddDividerHotZoneRect(sideBarContainerLayoutAlgorithm);
459 }
460
461 /**
462 * @tc.name: SideBarViewTestNg007
463 * @tc.desc: Test SideBar AddDividerHotZoneRect
464 * @tc.type: FUNC
465 */
466 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg007, TestSize.Level1)
467 {
468 SideBarContainerModelNG SideBarContainerModelInstance;
469 SideBarContainerModelInstance.Create();
470 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
471 EXPECT_NE(frameNode, nullptr);
472
473 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
474 EXPECT_NE(geometryNode, nullptr);
475 RefPtr<LayoutWrapperNode> layoutWrapper =
476 AceType::MakeRefPtr<LayoutWrapperNode>(frameNode, geometryNode, frameNode->GetLayoutProperty());
477
478 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
479 EXPECT_NE(sideBarContainerPattern, nullptr);
480 auto sideLayoutAlgorithm = sideBarContainerPattern->CreateLayoutAlgorithm();
481 EXPECT_NE(sideLayoutAlgorithm, nullptr);
482 layoutWrapper->SetLayoutAlgorithm(AceType::MakeRefPtr<LayoutAlgorithmWrapper>(sideLayoutAlgorithm));
483
484 LayoutConstraintF LayoutConstraintVaildSize;
485 LayoutConstraintVaildSize.selfIdealSize.SetSize(SizeF(1000000, 1000000));
486 layoutWrapper->GetLayoutProperty()->UpdateLayoutConstraint(LayoutConstraintVaildSize);
487 layoutWrapper->GetLayoutProperty()->UpdateContentConstraint();
488
489 auto layoutAlgorithmWrapper = AceType::DynamicCast<LayoutAlgorithmWrapper>(layoutWrapper->GetLayoutAlgorithm());
490 EXPECT_NE(layoutAlgorithmWrapper, nullptr);
491 auto sideBarContainerLayoutAlgorithm = AceType::DynamicCast<SideBarContainerLayoutAlgorithm>
492 (layoutAlgorithmWrapper->GetLayoutAlgorithm());
493 EXPECT_NE(sideBarContainerLayoutAlgorithm, nullptr);
494 sideBarContainerLayoutAlgorithm->SetRealDividerWidth(REAL_WIDTH);
495 sideBarContainerLayoutAlgorithm->GetRealDividerWidth();
496 sideBarContainerPattern->AddDividerHotZoneRect(sideBarContainerLayoutAlgorithm);
497 }
498
499 /**
500 * @tc.name: SideBarViewTestNg008
501 * @tc.desc: Test SideBar OnHover
502 * @tc.type: FUNC
503 */
504 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg008, TestSize.Level1)
505 {
506 SideBarContainerModelNG SideBarContainerModelInstance;
507 SideBarContainerModelInstance.Create();
508 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
509 EXPECT_NE(frameNode, nullptr);
510 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
511 EXPECT_NE(sideBarContainerPattern, nullptr);
512 sideBarContainerPattern->OnHover(true);
513 sideBarContainerPattern->OnHover(false);
514 }
515
516 /**
517 * @tc.name: SideBarViewTestNg009
518 * @tc.desc: Test SideBar OnHover
519 * @tc.type: FUNC
520 */
521 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg009, TestSize.Level1)
522 {
523 SideBarContainerModelNG SideBarContainerModelInstance;
524 SideBarContainerModelInstance.Create();
525 SideBarContainerModelInstance.SetDividerStrokeWidth(NONE_WIDTH);
526 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
527 EXPECT_NE(frameNode, nullptr);
528 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
529 EXPECT_NE(sideBarContainerPattern, nullptr);
530 sideBarContainerPattern->OnHover(true);
531 sideBarContainerPattern->OnHover(false);
532 }
533
534 /**
535 * @tc.name: SideBarViewTestNg010
536 * @tc.desc: Test SideBar HandlePanEventEnd
537 * @tc.type: FUNC
538 */
539 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg010, TestSize.Level1)
540 {
541 SideBarContainerModelNG SideBarContainerModelInstance;
542 SideBarContainerModelInstance.Create();
543 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
544 EXPECT_NE(frameNode, nullptr);
545 auto sideBarContainerPattern = AceType::DynamicCast<SideBarContainerPattern>(frameNode->GetPattern());
546 EXPECT_NE(sideBarContainerPattern, nullptr);
547 sideBarContainerPattern->SetSideBarStatus(SideBarStatus::HIDDEN);
548 sideBarContainerPattern->HandlePanEventEnd();
549 sideBarContainerPattern->SetSideBarStatus(SideBarStatus::AUTO);
550 sideBarContainerPattern->HandlePanEventEnd();
551 }
552
553 /**
554 * @tc.name: SideBarViewTestNg011
555 * @tc.desc: Test SideBar json
556 * @tc.type: FUNC
557 */
558 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg011, TestSize.Level1)
559 {
560 SideBarContainerModelNG SideBarContainerModelInstance;
561 SideBarContainerModelInstance.Create();
562 SideBarContainerModelInstance.SetControlButtonWidth(STROKE_WIDTH);
563 SideBarContainerModelInstance.SetDividerStrokeWidth(STROKE_WIDTH);
564 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
565 EXPECT_NE(frameNode, nullptr);
566
567 auto layoutProperty = frameNode->GetLayoutProperty<SideBarContainerLayoutProperty>();
568 EXPECT_NE(layoutProperty, nullptr);
569
570 auto clone = layoutProperty->Clone();
571 clone.Reset();
572 auto json = JsonUtil::Create(true);
573 layoutProperty->ToJsonValue(json, filter);
574 }
575
576 /**
577 * @tc.name: SideBarViewTestNg014
578 * @tc.desc: Test SideBar Create
579 * @tc.type: FUNC
580 */
581 HWTEST_F(SideBarViewTestNg, SideBarViewTestNg014, TestSize.Level1)
582 {
583 SideBarContainerModelNG SideBarContainerModelInstance;
584 auto pipeline = PipelineContext::GetCurrentContext();
585 CHECK_NULL_VOID(pipeline);
586 pipeline->minPlatformVersion_ = 12;
587 SideBarContainerModelInstance.Create();
588 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
589 EXPECT_NE(frameNode, nullptr);
590 }
591 } // namespace OHOS::Ace::NG
592