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