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 "test/mock/core/common/mock_container.h" 21 #include "test/mock/core/pipeline/mock_pipeline_context.h" 22 #include "ui/base/geometry/dimension.h" 23 #include "ui/base/utils/utils.h" 24 25 using namespace testing; 26 using namespace testing::ext; 27 28 namespace OHOS::Ace::Kit { 29 class DimensionTest : public testing::Test { SetUpTestSuite()30 static void SetUpTestSuite() 31 { 32 NG::MockPipelineContext::SetUp(); 33 MockContainer::SetUp(); 34 MockContainer::Current()->pipelineContext_ = PipelineBase::GetCurrentContext(); 35 36 MockContainer::Current()->pipelineContext_->dipScale_ = 3.0f; 37 MockContainer::Current()->pipelineContext_->followSystem_ = true; 38 MockContainer::Current()->pipelineContext_->maxAppFontScale_ = 3.0f; 39 MockContainer::Current()->pipelineContext_->fontScale_ = 3.0f; 40 MockContainer::Current()->pipelineContext_->designWidthScale_ = 4.0f; 41 } TearDownTestSuite()42 static void TearDownTestSuite() 43 { 44 MockContainer::Current()->pipelineContext_ = nullptr; 45 NG::MockPipelineContext::TearDown(); 46 } 47 }; 48 49 /** 50 * @tc.name: DimensionTest001 51 * @tc.desc: 52 * @tc.type: FUNC 53 */ 54 HWTEST_F(DimensionTest, DimensionTest001, TestSize.Level1) 55 { 56 Dimension dimension(1.0, DimensionUnit::VP); 57 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 58 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 59 dimension.Reset(); 60 EXPECT_TRUE(NearEqual(dimension.Value(), 0.0)); 61 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 62 } 63 64 /** 65 * @tc.name: DimensionTest002 66 * @tc.desc: 67 * @tc.type: FUNC 68 */ 69 HWTEST_F(DimensionTest, DimensionTest002, TestSize.Level1) 70 { 71 Dimension dimension(1.0, DimensionUnit::VP); 72 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 73 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 74 dimension.SetValue(100.0); 75 EXPECT_TRUE(NearEqual(dimension.Value(), 100.0)); 76 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 77 } 78 79 /** 80 * @tc.name: DimensionTest003 81 * @tc.desc: 82 * @tc.type: FUNC 83 */ 84 HWTEST_F(DimensionTest, DimensionTest003, TestSize.Level1) 85 { 86 Dimension dimension(1.0, DimensionUnit::VP); 87 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 88 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 89 dimension.SetUnit(DimensionUnit::PX); 90 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 91 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 92 } 93 94 /** 95 * @tc.name: DimensionTest004 96 * @tc.desc: 97 * @tc.type: FUNC 98 */ 99 HWTEST_F(DimensionTest, DimensionTest004, TestSize.Level1) 100 { 101 Dimension dimension(1.0, DimensionUnit::VP); 102 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 103 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 104 EXPECT_TRUE(dimension.IsValid()); 105 106 dimension.SetValue(0); 107 EXPECT_FALSE(dimension.IsValid()); 108 } 109 110 /** 111 * @tc.name: DimensionTest005 112 * @tc.desc: 113 * @tc.type: FUNC 114 */ 115 HWTEST_F(DimensionTest, DimensionTest005, TestSize.Level1) 116 { 117 Dimension dimension(1.0, DimensionUnit::VP); 118 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 119 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 120 EXPECT_TRUE(dimension.IsNonNegative()); 121 122 dimension.SetValue(-1); 123 EXPECT_FALSE(dimension.IsNonNegative()); 124 } 125 126 /** 127 * @tc.name: DimensionTest006 128 * @tc.desc: 129 * @tc.type: FUNC 130 */ 131 HWTEST_F(DimensionTest, DimensionTest006, TestSize.Level1) 132 { 133 Dimension dimension(1.0, DimensionUnit::VP); 134 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 135 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 136 EXPECT_FALSE(dimension.IsNonPositive()); 137 138 dimension.SetValue(-1); 139 EXPECT_TRUE(dimension.IsNonPositive()); 140 } 141 142 /** 143 * @tc.name: DimensionTest007 144 * @tc.desc: 145 * @tc.type: FUNC 146 */ 147 HWTEST_F(DimensionTest, DimensionTest007, TestSize.Level1) 148 { 149 Dimension dimension(1.0, DimensionUnit::VP); 150 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 151 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 152 EXPECT_FALSE(dimension.IsNegative()); 153 154 dimension.SetValue(-1); 155 EXPECT_TRUE(dimension.IsNegative()); 156 } 157 158 /** 159 * @tc.name: DimensionTest008 160 * @tc.desc: 161 * @tc.type: FUNC 162 */ 163 HWTEST_F(DimensionTest, DimensionTest008, TestSize.Level1) 164 { 165 Dimension dimension(1.0, DimensionUnit::VP); 166 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 167 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 168 EXPECT_FALSE(dimension.IsNegative()); 169 EXPECT_EQ(dimension.ToString(), "1.00vp"); 170 } 171 172 /** 173 * @tc.name: DimensionTest009 174 * @tc.desc: 175 * @tc.type: FUNC 176 */ 177 HWTEST_F(DimensionTest, DimensionTest009, TestSize.Level1) 178 { 179 auto dimension = Dimension::FromString("1px"); 180 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 181 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 182 } 183 184 /** 185 * @tc.name: DimensionTest010 186 * @tc.desc: 187 * @tc.type: FUNC 188 */ 189 HWTEST_F(DimensionTest, DimensionTest010, TestSize.Level1) 190 { 191 auto dimension = Dimension::FromString("1vp"); 192 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 193 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 194 auto value = dimension.ConvertToPx(3); 195 EXPECT_TRUE(NearEqual(value, 3)); 196 197 dimension = Dimension::FromString("1fp"); 198 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 199 EXPECT_EQ(dimension.Unit(), DimensionUnit::FP); 200 value = dimension.ConvertToPx(3); 201 EXPECT_TRUE(NearEqual(value, 3)); 202 203 dimension = Dimension::FromString("1px"); 204 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 205 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 206 value = dimension.ConvertToPx(3); 207 EXPECT_TRUE(NearEqual(value, 1)); 208 } 209 210 /** 211 * @tc.name: DimensionTest011 212 * @tc.desc: 213 * @tc.type: FUNC 214 */ 215 HWTEST_F(DimensionTest, DimensionTest011, TestSize.Level1) 216 { 217 auto dimension = Dimension::FromString("1vp"); 218 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 219 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 220 auto value = dimension.ConvertToVp(); 221 EXPECT_TRUE(NearEqual(value, 1)); 222 223 dimension = Dimension::FromString("3px"); 224 EXPECT_TRUE(NearEqual(dimension.Value(), 3.0)); 225 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 226 value = dimension.ConvertToVp(); 227 EXPECT_TRUE(NearEqual(value, 1)); 228 229 dimension = Dimension(3, DimensionUnit::NONE); 230 EXPECT_TRUE(NearEqual(dimension.Value(), 3.0)); 231 EXPECT_EQ(dimension.Unit(), DimensionUnit::NONE); 232 value = dimension.ConvertToVp(); 233 EXPECT_TRUE(NearEqual(value, 1)); 234 235 dimension = Dimension::FromString("3fp"); 236 EXPECT_TRUE(NearEqual(dimension.Value(), 3.0)); 237 EXPECT_EQ(dimension.Unit(), DimensionUnit::FP); 238 value = dimension.ConvertToVp(); 239 EXPECT_TRUE(NearEqual(value, 9)); 240 241 dimension = Dimension::FromString("3lpx"); 242 EXPECT_TRUE(NearEqual(dimension.Value(), 3.0)); 243 EXPECT_EQ(dimension.Unit(), DimensionUnit::LPX); 244 value = dimension.ConvertToVp(); 245 EXPECT_TRUE(NearEqual(value, 4)); 246 247 dimension = Dimension(1.0f, DimensionUnit::CALC); 248 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 249 EXPECT_EQ(dimension.Unit(), DimensionUnit::CALC); 250 value = dimension.ConvertToVp(); 251 EXPECT_TRUE(NearEqual(value, 0.0f)); 252 253 dimension = Dimension(1.0f, DimensionUnit::INVALID); 254 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 255 EXPECT_EQ(dimension.Unit(), DimensionUnit::INVALID); 256 value = dimension.ConvertToVp(); 257 EXPECT_TRUE(NearEqual(value, 0.0f)); 258 259 dimension = Dimension(50, DimensionUnit::PERCENT); 260 EXPECT_TRUE(NearEqual(dimension.Value(), 50)); 261 EXPECT_EQ(dimension.Unit(), DimensionUnit::PERCENT); 262 value = dimension.ConvertToVp(); 263 EXPECT_TRUE(NearEqual(value, 0.0f)); 264 265 dimension = Dimension(1.0f, DimensionUnit::AUTO); 266 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 267 EXPECT_EQ(dimension.Unit(), DimensionUnit::AUTO); 268 value = dimension.ConvertToVp(); 269 EXPECT_TRUE(NearEqual(value, 0.0f)); 270 } 271 272 /** 273 * @tc.name: DimensionTest012 274 * @tc.desc: 275 * @tc.type: FUNC 276 */ 277 HWTEST_F(DimensionTest, DimensionTest012, TestSize.Level1) 278 { 279 auto dimension = Dimension(1.0f, DimensionUnit::PX); 280 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 281 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 282 auto value = dimension.ConvertToPx(); 283 EXPECT_TRUE(NearEqual(value, 1)); 284 285 dimension = Dimension(1.0f, DimensionUnit::NONE); 286 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 287 EXPECT_EQ(dimension.Unit(), DimensionUnit::NONE); 288 value = dimension.ConvertToPx(); 289 EXPECT_TRUE(NearEqual(value, 1)); 290 291 dimension = Dimension(1.0f, DimensionUnit::VP); 292 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 293 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 294 value = dimension.ConvertToPx(); 295 EXPECT_TRUE(NearEqual(value, 3)); 296 297 dimension = Dimension(1.0f, DimensionUnit::FP); 298 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 299 EXPECT_EQ(dimension.Unit(), DimensionUnit::FP); 300 value = dimension.ConvertToPx(); 301 EXPECT_TRUE(NearEqual(value, 9)); 302 303 dimension = Dimension(1.0f, DimensionUnit::LPX); 304 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 305 EXPECT_EQ(dimension.Unit(), DimensionUnit::LPX); 306 value = dimension.ConvertToPx(); 307 EXPECT_TRUE(NearEqual(value, 4)); 308 309 dimension = Dimension(1.0f, DimensionUnit::INVALID); 310 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 311 EXPECT_EQ(dimension.Unit(), DimensionUnit::INVALID); 312 value = dimension.ConvertToPx(); 313 EXPECT_TRUE(NearEqual(value, 0)); 314 315 dimension = Dimension(50, DimensionUnit::PERCENT); 316 EXPECT_TRUE(NearEqual(dimension.Value(), 50)); 317 EXPECT_EQ(dimension.Unit(), DimensionUnit::PERCENT); 318 value = dimension.ConvertToPx(); 319 EXPECT_TRUE(NearEqual(value, 0)); 320 321 dimension = Dimension(50, DimensionUnit::AUTO); 322 EXPECT_TRUE(NearEqual(dimension.Value(), 50)); 323 EXPECT_EQ(dimension.Unit(), DimensionUnit::AUTO); 324 value = dimension.ConvertToPx(); 325 EXPECT_TRUE(NearEqual(value, 0)); 326 327 dimension = Dimension(50, DimensionUnit::CALC); 328 EXPECT_TRUE(NearEqual(dimension.Value(), 50)); 329 EXPECT_EQ(dimension.Unit(), DimensionUnit::CALC); 330 value = dimension.ConvertToPx(); 331 EXPECT_TRUE(NearEqual(value, 0)); 332 } 333 334 /** 335 * @tc.name: DimensionTest013 336 * @tc.desc: 337 * @tc.type: FUNC 338 */ 339 HWTEST_F(DimensionTest, DimensionTest013, TestSize.Level1) 340 { 341 auto dimension = Dimension(1.0f, DimensionUnit::FP); 342 EXPECT_TRUE(NearEqual(dimension.Value(), 1.0)); 343 EXPECT_EQ(dimension.Unit(), DimensionUnit::FP); 344 auto value = dimension.ConvertToFp(); 345 EXPECT_TRUE(NearEqual(value, 1)); 346 347 dimension = Dimension(9.0f, DimensionUnit::NONE); 348 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 349 EXPECT_EQ(dimension.Unit(), DimensionUnit::NONE); 350 value = dimension.ConvertToFp(); 351 EXPECT_TRUE(NearEqual(value, 1)); 352 353 dimension = Dimension(9.0f, DimensionUnit::PX); 354 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 355 EXPECT_EQ(dimension.Unit(), DimensionUnit::PX); 356 value = dimension.ConvertToFp(); 357 EXPECT_TRUE(NearEqual(value, 1)); 358 359 dimension = Dimension(9.0f, DimensionUnit::VP); 360 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 361 EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); 362 value = dimension.ConvertToFp(); 363 EXPECT_TRUE(NearEqual(value, 3)); 364 365 dimension = Dimension(9.0f, DimensionUnit::LPX); 366 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 367 EXPECT_EQ(dimension.Unit(), DimensionUnit::LPX); 368 value = dimension.ConvertToFp(); 369 EXPECT_TRUE(NearEqual(value, 4)); 370 371 dimension = Dimension(9.0f, DimensionUnit::INVALID); 372 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 373 EXPECT_EQ(dimension.Unit(), DimensionUnit::INVALID); 374 value = dimension.ConvertToFp(); 375 EXPECT_TRUE(NearEqual(value, 0)); 376 377 dimension = Dimension(9.0f, DimensionUnit::PERCENT); 378 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 379 EXPECT_EQ(dimension.Unit(), DimensionUnit::PERCENT); 380 value = dimension.ConvertToFp(); 381 EXPECT_TRUE(NearEqual(value, 0)); 382 383 dimension = Dimension(9.0f, DimensionUnit::AUTO); 384 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 385 EXPECT_EQ(dimension.Unit(), DimensionUnit::AUTO); 386 value = dimension.ConvertToFp(); 387 EXPECT_TRUE(NearEqual(value, 0)); 388 389 dimension = Dimension(9.0f, DimensionUnit::CALC); 390 EXPECT_TRUE(NearEqual(dimension.Value(), 9.0)); 391 EXPECT_EQ(dimension.Unit(), DimensionUnit::CALC); 392 value = dimension.ConvertToFp(); 393 EXPECT_TRUE(NearEqual(value, 0)); 394 } 395 } // namespace OHOS::Ace::Kit 396