• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 #include "interfaces/inner_api/ace_kit/src/view/frame_node_impl.h"
18 #include "test/unittest/interfaces/ace_kit/mock/mock_ace_kit_pattern.h"
19 #include "test/unittest/interfaces/ace_kit/mock/mock_ace_kit_property.h"
20 #include "ui/properties/dirty_flag.h"
21 #include "ui/view/frame_node.h"
22 #include "ui/view_factory/abstract_view_factory.h"
23 
24 #include "core/components_ng/base/frame_node.h"
25 #include "core/components_ng/pattern/pattern.h"
26 
27 using namespace testing;
28 using namespace testing::ext;
29 using namespace OHOS::Ace::Kit;
30 namespace OHOS::Ace {
31 class FrameNodeTest : public testing::Test {};
32 
33 /**
34  * @tc.name: FrameNodeTestTest001
35  * @tc.desc:
36  * @tc.type: FUNC
37  */
38 HWTEST_F(FrameNodeTest, FrameNodeTestTest001, TestSize.Level1)
39 {
40     const std::string tag = "TEST1";
41     const int32_t id = 1;
42     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
43     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
44     EXPECT_NE(frameNode, nullptr);
45 
46     EXPECT_EQ(frameNode->GetId(), id);
47     auto nodeTag = frameNode->GetTag();
48     EXPECT_EQ(tag, nodeTag);
49 }
50 
51 /**
52  * @tc.name: FrameNodeTestTest002
53  * @tc.desc:
54  * @tc.type: FUNC
55  */
56 HWTEST_F(FrameNodeTest, FrameNodeTestTest002, TestSize.Level1)
57 {
58     const std::string tag = "TEST2";
59     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
60     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, 2, mockPattern);
61     EXPECT_NE(frameNode, nullptr);
62 
63     auto property = frameNode->GetProperty();
64     EXPECT_TRUE(property);
65 
66     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
67     ASSERT_TRUE(frameNodeImpl);
68     auto* aceNodePtr = frameNodeImpl->GetAceNodePtr();
69     EXPECT_TRUE(aceNodePtr);
70     auto aceNode = frameNodeImpl->GetAceNode();
71     EXPECT_TRUE(aceNode);
72     auto pattern = frameNodeImpl->GetPattern();
73     EXPECT_TRUE(pattern);
74 
75     frameNode->Reset();
76     EXPECT_FALSE(frameNodeImpl->GetAceNodePtr());
77     EXPECT_FALSE(frameNodeImpl->GetAceNode());
78     EXPECT_FALSE(frameNodeImpl->GetPattern());
79 }
80 
81 /**
82  * @tc.name: FrameNodeTestTest003
83  * @tc.desc:
84  * @tc.type: FUNC
85  */
86 HWTEST_F(FrameNodeTest, FrameNodeTestTest003, TestSize.Level1)
87 {
88     const std::string tag = "TEST3";
89     const int32_t id = 3;
90     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
91     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
92     EXPECT_NE(frameNode, nullptr);
93     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
94     ASSERT_TRUE(frameNodeImpl);
95 
96     auto aceNode =
__anona62b21370102() 97         NG::FrameNode::GetOrCreateFrameNode("TEST_ACE_NODE", 3, []() { return AceType::MakeRefPtr<NG::Pattern>(); });
98     ASSERT_TRUE(aceNode);
99 
100     auto popAceNode = frameNodeImpl->PopAceNode();
101     EXPECT_EQ(popAceNode->GetTag(), tag);
102     EXPECT_EQ(popAceNode->GetId(), id);
103     EXPECT_FALSE(frameNodeImpl->GetAceNode());
104 }
105 
106 /**
107  * @tc.name: FrameNodeTestTest004
108  * @tc.desc:
109  * @tc.type: FUNC
110  */
111 HWTEST_F(FrameNodeTest, FrameNodeTestTest004, TestSize.Level1)
112 {
113     const std::string tag = "TEST4";
114     const int32_t id = 4;
115     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
116     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
117     EXPECT_NE(frameNode, nullptr);
118     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
119     ASSERT_TRUE(frameNodeImpl);
120 
121     frameNode->AddChild(nullptr);
122     EXPECT_EQ(frameNode->GetChildren().size(), 0);
123 
124     const std::string childTag = "TEST4_CHILD";
125     const int32_t childId = 4;
126     auto mockPatternChild = AceType::MakeRefPtr<MockAceKitPattern>();
127     auto frameNodeChild = AbstractViewFactory::CreateFrameNode(childTag, childId, mockPatternChild);
128     EXPECT_NE(frameNode, nullptr);
129     frameNode->AddChild(frameNodeChild);
130     EXPECT_EQ(frameNode->GetChildren().size(), 1);
131 
132     frameNode->RemoveChild(frameNodeChild);
133     EXPECT_EQ(frameNode->GetChildren().size(), 0);
134 }
135 
136 /**
137  * @tc.name: FrameNodeTestTest005
138  * @tc.desc:
139  * @tc.type: FUNC
140  */
141 HWTEST_F(FrameNodeTest, FrameNodeTestTest005, TestSize.Level1)
142 {
143     const std::string tag = "TEST5";
144     const int32_t id = 5;
145     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
146     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
147     EXPECT_NE(frameNode, nullptr);
148     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
149     ASSERT_TRUE(frameNodeImpl);
150 
151     LayoutConstraintInfo constraint { .maxWidth = 100.0f, .maxHeight = 100.0f };
152     frameNode->Measure(constraint);
153     auto* aceNode = frameNodeImpl->GetAceNodePtr();
154     ASSERT_TRUE(aceNode);
155     EXPECT_TRUE(aceNode->IsActive());
156     auto geometryNode = aceNode->GetGeometryNode();
157     auto parentConstraint = geometryNode->GetParentLayoutConstraint();
158     EXPECT_TRUE(NearEqual(parentConstraint.value().maxSize.Width(), constraint.maxWidth));
159     EXPECT_TRUE(NearEqual(parentConstraint.value().maxSize.Height(), constraint.maxHeight));
160 
161     frameNode->Layout();
162     auto layoutProperty = aceNode->GetLayoutProperty();
163     auto layoutConstraint = layoutProperty->GetLayoutConstraint();
164     EXPECT_TRUE(NearEqual(layoutConstraint.value().maxSize.Width(), constraint.maxWidth));
165     EXPECT_TRUE(NearEqual(layoutConstraint.value().maxSize.Height(), constraint.maxHeight));
166 
167     auto propertyChangeFlag = layoutProperty->GetPropertyChangeFlag();
168     EXPECT_EQ(propertyChangeFlag, NG::PROPERTY_UPDATE_MEASURE | NG::PROPERTY_UPDATE_LAYOUT);
169     frameNode->MarkDirtyNode(NG::PROPERTY_UPDATE_MEASURE_SELF);
170     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(),
171         NG::PROPERTY_UPDATE_MEASURE | NG::PROPERTY_UPDATE_LAYOUT | NG::PROPERTY_UPDATE_MEASURE_SELF);
172 }
173 } // namespace OHOS::Ace
174