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