• 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 "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