• 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 
18 #define private public
19 #define protected public
20 #include "interfaces/inner_api/ace_kit/src/view/frame_node_impl.h"
21 #include "test/mock/core/common/mock_container.h"
22 #include "test/mock/core/pipeline/mock_pipeline_context.h"
23 #include "test/unittest/interfaces/ace_kit/mock/mock_ace_kit_pattern.h"
24 #include "ui/properties/property.h"
25 #include "ui/view/frame_node.h"
26 #include "ui/view_factory/abstract_view_factory.h"
27 
28 #include "core/components_ng/property/property.h"
29 
30 using namespace testing;
31 using namespace testing::ext;
32 
33 namespace OHOS::Ace::Kit {
34 class PropertyTest : public testing::Test {
35 public:
SetUpTestSuite()36     static void SetUpTestSuite()
37     {
38         NG::MockPipelineContext::SetUp();
39         MockContainer::SetUp();
40         MockContainer::Current()->pipelineContext_ = PipelineBase::GetCurrentContext();
41     }
TearDownTestSuite()42     static void TearDownTestSuite()
43     {
44         MockContainer::Current()->pipelineContext_ = nullptr;
45         NG::MockPipelineContext::TearDown();
46     }
SetUp()47     void SetUp() {};
TearDown()48     void TearDown() {};
49 };
50 
51 /**
52  * @tc.name: PropertyTest001
53  * @tc.desc:
54  * @tc.type: FUNC
55  */
56 HWTEST_F(PropertyTest, PropertyTest001, TestSize.Level1)
57 {
58     const std::string tag = "TEST1";
59     const int32_t id = 1;
60     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
61     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
62     EXPECT_NE(frameNode, nullptr);
63     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
64     ASSERT_TRUE(frameNodeImpl);
65 
66     auto layoutProperty = frameNodeImpl->GetLayoutProperty();
67     ASSERT_TRUE(layoutProperty);
68     auto propertyChangeFlag = layoutProperty->GetPropertyChangeFlag();
69     EXPECT_EQ(propertyChangeFlag, NG::PROPERTY_UPDATE_MEASURE);
70     auto property = frameNode->GetProperty();
71     ASSERT_TRUE(property);
72     property->CleanDirty();
73     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_NORMAL);
74 }
75 
76 /**
77  * @tc.name: PropertyTest002
78  * @tc.desc:
79  * @tc.type: FUNC
80  */
81 HWTEST_F(PropertyTest, PropertyTest002, TestSize.Level1)
82 {
83     const std::string tag = "TEST2";
84     const int32_t id = 1;
85     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
86     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
87     EXPECT_NE(frameNode, nullptr);
88     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
89     ASSERT_TRUE(frameNodeImpl);
90 
91     auto layoutProperty = frameNodeImpl->GetLayoutProperty();
92     ASSERT_TRUE(layoutProperty);
93     auto propertyChangeFlag = layoutProperty->GetPropertyChangeFlag();
94     EXPECT_EQ(propertyChangeFlag, NG::PROPERTY_UPDATE_MEASURE);
95     auto property = frameNode->GetProperty();
96     ASSERT_TRUE(property);
97     property->UpdateRender();
98     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_MEASURE | NG::PROPERTY_UPDATE_RENDER);
99     auto aceNode = frameNodeImpl->GetAceNodePtr();
100     ASSERT_TRUE(aceNode);
101     auto paintProp = aceNode->GetPaintProperty<NG::Property>();
102     ASSERT_TRUE(paintProp);
103     EXPECT_EQ(paintProp->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_RENDER);
104 }
105 
106 /**
107  * @tc.name: PropertyTest003
108  * @tc.desc:
109  * @tc.type: FUNC
110  */
111 HWTEST_F(PropertyTest, PropertyTest003, TestSize.Level1)
112 {
113     const std::string tag = "TEST3";
114     const int32_t id = 1;
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     auto layoutProperty = frameNodeImpl->GetLayoutProperty();
122     ASSERT_TRUE(layoutProperty);
123     auto propertyChangeFlag = layoutProperty->GetPropertyChangeFlag();
124     EXPECT_EQ(propertyChangeFlag, NG::PROPERTY_UPDATE_MEASURE);
125     auto property = frameNode->GetProperty();
126     ASSERT_TRUE(property);
127     property->CleanDirty();
128     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_NORMAL);
129 
130     property->UpdateMeasure(true);
131     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_MEASURE_SELF);
132     property->CleanDirty();
133     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_NORMAL);
134     property->UpdateMeasure(false);
135     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_MEASURE);
136 }
137 
138 /**
139  * @tc.name: PropertyTest004
140  * @tc.desc:
141  * @tc.type: FUNC
142  */
143 HWTEST_F(PropertyTest, PropertyTest004, TestSize.Level1)
144 {
145     const std::string tag = "TEST4";
146     const int32_t id = 1;
147     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
148     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
149     EXPECT_NE(frameNode, nullptr);
150     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
151     ASSERT_TRUE(frameNodeImpl);
152 
153     auto aceNode = frameNodeImpl->GetAceNodePtr();
154     ASSERT_TRUE(aceNode);
155     auto paintProp = aceNode->GetPaintProperty<NG::Property>();
156     ASSERT_TRUE(paintProp);
157     EXPECT_EQ(paintProp->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_NORMAL);
158     auto property = frameNode->GetProperty();
159     ASSERT_TRUE(property);
160     property->UpdatePaintFlag(NG::PROPERTY_UPDATE_RENDER);
161     EXPECT_EQ(paintProp->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_RENDER);
162 }
163 
164 /**
165  * @tc.name: PropertyTest005
166  * @tc.desc:
167  * @tc.type: FUNC
168  */
169 HWTEST_F(PropertyTest, PropertyTest005, TestSize.Level1)
170 {
171     const std::string tag = "TEST5";
172     const int32_t id = 1;
173     auto mockPattern = AceType::MakeRefPtr<MockAceKitPattern>();
174     auto frameNode = AbstractViewFactory::CreateFrameNode(tag, id, mockPattern);
175     EXPECT_NE(frameNode, nullptr);
176     auto frameNodeImpl = AceType::DynamicCast<FrameNodeImpl>(frameNode);
177     ASSERT_TRUE(frameNodeImpl);
178 
179     auto layoutProperty = frameNodeImpl->GetLayoutProperty();
180     ASSERT_TRUE(layoutProperty);
181     auto propertyChangeFlag = layoutProperty->GetPropertyChangeFlag();
182     EXPECT_EQ(propertyChangeFlag, NG::PROPERTY_UPDATE_MEASURE);
183     auto property = frameNode->GetProperty();
184     ASSERT_TRUE(property);
185     property->CleanDirty();
186     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_NORMAL);
187 
188     property->UpdateLayoutFlag(NG::PROPERTY_UPDATE_MEASURE_SELF);
189     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_MEASURE_SELF);
190     property->UpdateLayoutFlag(NG::PROPERTY_UPDATE_LAYOUT);
191     EXPECT_EQ(layoutProperty->GetPropertyChangeFlag(), NG::PROPERTY_UPDATE_MEASURE_SELF | NG::PROPERTY_UPDATE_LAYOUT);
192 }
193 } // namespace OHOS::Ace::Kit
194