1 /*
2 * Copyright (c) 2023 iSoftStone Information Technology (Group) 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 #include "gmock/gmock.h"
16 #include "gtest/gtest.h"
17
18 #include "base/utils/utils.h"
19 #define protected public
20 #define private public
21 #include "test/mock/core/rosen/mock_canvas.h"
22
23 #include "core/components_ng/render/border_image_painter.h"
24
25 #undef private
26 #undef protected
27
28 using namespace testing;
29 using namespace testing::ext;
30
31 namespace OHOS::Ace {
32 namespace {
33 const NG::BorderWidthProperty BORDER_WIDTH_TEST = { 1.0_vp, 1.0_vp, 1.0_vp, 1.0_vp };
34 const NG::SizeF PAINTSIZE = { 5.0, 10.0 };
35 const NG::SizeF TEST_SIZE = { 100.0, 200.0 };
36 const NG::OffsetF OFFSET_F = { 1.0, 2.0 };
37
38 const NG::DisplayScaleInfo DIPSCALE = { .vpScale = 10.0 };
39 const double FIVE = 5.0;
40 const double TWO = 2.0;
41 const double ONE = 1.0;
42 const double ZERO_TEST = 0.0;
43 const std::string SRC_IMAGES = "images/mmm.jpg";
44
45 const Dimension DIMENSION_SLICE = 10.0_vp;
46 const Dimension DIMENSION_WIDTH = 30.0_vp;
47 const Dimension DIMENSION_OUTSET = 100.0_vp;
48
49 const BorderImageDirection DIRECTION_LEFT = BorderImageDirection::LEFT;
50 const BorderImageDirection DIRECTION_RIGHT = BorderImageDirection::RIGHT;
51 const BorderImageDirection DIRECTION_TOP = BorderImageDirection::TOP;
52 const BorderImageDirection DIRECTION_BOTTOM = BorderImageDirection::BOTTOM;
53
MakeBorderImage()54 BorderImage* MakeBorderImage()
55 {
56 BorderImage* testImage = new BorderImage(SRC_IMAGES);
57 testImage->SetEdgeSlice(DIRECTION_LEFT, DIMENSION_SLICE);
58 testImage->SetEdgeSlice(DIRECTION_RIGHT, DIMENSION_SLICE);
59 testImage->SetEdgeSlice(DIRECTION_TOP, DIMENSION_SLICE);
60 testImage->SetEdgeSlice(DIRECTION_BOTTOM, DIMENSION_SLICE);
61
62 testImage->SetEdgeWidth(DIRECTION_LEFT, DIMENSION_WIDTH);
63 testImage->SetEdgeWidth(DIRECTION_RIGHT, DIMENSION_WIDTH);
64 testImage->SetEdgeWidth(DIRECTION_TOP, DIMENSION_WIDTH);
65 testImage->SetEdgeWidth(DIRECTION_BOTTOM, DIMENSION_WIDTH);
66
67 testImage->SetEdgeOutset(DIRECTION_LEFT, DIMENSION_OUTSET);
68 testImage->SetEdgeOutset(DIRECTION_RIGHT, DIMENSION_OUTSET);
69 testImage->SetEdgeOutset(DIRECTION_TOP, DIMENSION_OUTSET);
70 testImage->SetEdgeOutset(DIRECTION_BOTTOM, DIMENSION_OUTSET);
71 return testImage;
72 };
73 } // namespace
74
75 class BorderImagePainterTestNg : public testing::Test {
76 public:
77 void CallBack(Testing::MockCanvas& rSCanvas);
78 };
79
CallBack(Testing::MockCanvas & rSCanvas)80 void BorderImagePainterTestNg::CallBack(Testing::MockCanvas& rSCanvas)
81 {
82 EXPECT_CALL(rSCanvas, AttachBrush(_)).WillRepeatedly(ReturnRef(rSCanvas));
83 EXPECT_CALL(rSCanvas, DetachBrush()).WillRepeatedly(ReturnRef(rSCanvas));
84 EXPECT_CALL(rSCanvas, AttachPen(_)).WillRepeatedly(ReturnRef(rSCanvas));
85 EXPECT_CALL(rSCanvas, DetachPen()).WillRepeatedly(ReturnRef(rSCanvas));
86 }
87
88 /**
89 * @tc.name: BorderImagePainter001
90 * @tc.desc: Test cast to BorderImagePainterTestNg
91 * @tc.type: FUNC
92 */
93 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter001, TestSize.Level1)
94 {
95 /**
96 * @tc.steps: step1. push widthProp != nullptr.
97 * @tc.steps: step1. Build a object borderImagePainter.
98 */
99 NG::BorderImageProperty borderImageProperty;
100 RSImage image;
101 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
102 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
103
104 /**
105 * @tc.steps: step2. push borderImagePainter.borderImageProperty_ is not null.
106 * @tc.steps: step2. call InitPainter.
107 */
108 borderImageProperty.propBorderImage = AceType::MakeRefPtr<BorderImage>();
109
110 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
111 borderImagePainter.hasWidthProp_ = true;
112 borderImagePainter.imageWidth_ = 720.0;
113 borderImagePainter.imageHeight_ = 1080.0;
114 borderImagePainter.paintSize_ = TEST_SIZE;
115 borderImagePainter.InitPainter();
116
117 /**
118 * @tc.expected: the borderImagePainter.borderCenterWidth_ is expected results.
119 * @tc.expected: the borderImagePainter.imageCenterWidth_ is expected results.
120 */
121 EXPECT_EQ(borderImagePainter.borderCenterWidth_, 100);
122 EXPECT_EQ(borderImagePainter.borderCenterHeight_, 200);
123 EXPECT_EQ(borderImagePainter.imageCenterWidth_, -720);
124 EXPECT_EQ(borderImagePainter.imageCenterHeight_, -1080);
125 }
126
127 /**
128 * @tc.name: BorderImagePainter002
129 * @tc.desc: Test cast to BorderImagePainterTestNg
130 * @tc.type: FUNC
131 */
132 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter002, TestSize.Level1)
133 {
134 /**
135 * @tc.steps: step1. push widthProp = nullptr.
136 * @tc.steps: step1. Build a object borderImagePainter.
137 */
138 NG::BorderImageProperty borderImageProperty;
139 RSImage image;
140 std::unique_ptr<NG::BorderWidthProperty> widthProp;
141 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
142
143 /**
144 * @tc.steps: step2. push borderImageProperty.propBorderImage is null.
145 * @tc.steps: step2. push borderImagePainter.leftSlice_ < imageWidth_.
146 * @tc.steps: step2. call InitPainter.
147 */
148 borderImageProperty.propBorderImage = AceType::MakeRefPtr<BorderImage>();
149 borderImageProperty.propHasBorderImageSlice = true;
150
151 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
152 borderImagePainter.leftSlice_ = 10.0;
153 borderImagePainter.rightSlice_ = 20.0;
154 borderImagePainter.topSlice_ = 40.0;
155 borderImagePainter.bottomSlice_ = 80.0;
156 borderImagePainter.InitBorderImageSlice();
157 borderImagePainter.InitBorderImageWidth();
158 borderImagePainter.InitBorderImageOutset();
159
160 /**
161 * @tc.expected: the borderImagePainter.leftSlice_ is expected results.
162 * @tc.expected: the borderImagePainter.rightSlice_ is expected results.
163 */
164 EXPECT_EQ(borderImagePainter.leftSlice_, 10);
165 EXPECT_EQ(borderImagePainter.rightSlice_, 20);
166 EXPECT_EQ(borderImagePainter.topSlice_, 40);
167 EXPECT_EQ(borderImagePainter.bottomSlice_, 80);
168 }
169
170 /**
171 * @tc.name: BorderImagePainter003
172 * @tc.desc: Test cast to BorderImagePainterTestNg
173 * @tc.type: FUNC
174 */
175 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter003, TestSize.Level1)
176 {
177 /**
178 * @tc.steps: step1. push widthProp != nullptr.
179 * @tc.steps: step1. Build a object borderImagePainter.
180 */
181 NG::BorderImageProperty borderImageProperty;
182 RSImage image;
183 Testing::MockCanvas canvas;
184 CallBack(canvas);
185 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
186 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
187
188 /**
189 * @tc.steps: step2. push borderImageProperty.propBorderImage is not null.
190 * @tc.steps: step2. push borderImagePainter.leftSlice_ > imageWidth_.
191 * @tc.steps: step2. call InitBorderImageSlice.
192 */
193 auto testBorderImage = MakeBorderImage();
194 testBorderImage->needFillCenter_ = true;
195
196 borderImageProperty.propBorderImage = std::move(testBorderImage);
197 borderImageProperty.propBorderImageSource = ImageSourceInfo(SRC_IMAGES);
198 borderImageProperty.propHasBorderImageSlice = true;
199
200 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
201 borderImagePainter.leftSlice_ = 120.0;
202 borderImagePainter.rightSlice_ = 240.0;
203 borderImagePainter.topSlice_ = 120.0;
204 borderImagePainter.bottomSlice_ = 240.0;
205 borderImagePainter.InitBorderImageSlice();
206 borderImagePainter.PaintBorderImage(OFFSET_F, canvas);
207
208 /**
209 * @tc.expected: the borderImagePainter.leftSlice_ is expected results.
210 * @tc.expected: the borderImagePainter.rightSlice_ is expected results.
211 */
212 EXPECT_EQ(borderImagePainter.leftSlice_, 100);
213 EXPECT_EQ(borderImagePainter.rightSlice_, 100);
214 EXPECT_EQ(borderImagePainter.topSlice_, 100);
215 EXPECT_EQ(borderImagePainter.bottomSlice_, 100);
216 }
217
218 /**
219 * @tc.name: BorderImagePainter004
220 * @tc.desc: Test cast to BorderImagePainterTestNg
221 * @tc.type: FUNC
222 */
223 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter004, TestSize.Level1)
224 {
225 /**
226 * @tc.steps: step1. push widthProp != nullptr.
227 * @tc.steps: step1. Build a object borderImagePainter.
228 */
229 NG::BorderImageProperty borderImageProperty;
230 RSImage image;
231 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
232 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
233
234 /**
235 * @tc.steps: step2. push borderImageProperty.propBorderImage is not null.
236 * @tc.steps: step2. call InitBorderImageWidth.
237 */
238 auto testBorderImage = MakeBorderImage();
239
240 borderImageProperty.propBorderImage = std::move(testBorderImage);
241 borderImageProperty.propBorderImageSource = ImageSourceInfo(SRC_IMAGES);
242 borderImageProperty.propHasBorderImageWidth = true;
243
244 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
245 borderImagePainter.InitBorderImageWidth();
246
247 auto borderImage = borderImagePainter.borderImageProperty_.GetBorderImageValue();
248 BorderImageEdge imageLeft = borderImage->GetBorderImageEdge(DIRECTION_LEFT);
249 BorderImageEdge imageTop = borderImage->GetBorderImageEdge(DIRECTION_RIGHT);
250 BorderImageEdge imageRight = borderImage->GetBorderImageEdge(DIRECTION_TOP);
251 BorderImageEdge imageBottom = borderImage->GetBorderImageEdge(DIRECTION_BOTTOM);
252
253 /**
254 * @tc.expected: the imageLeft.GetBorderImageWidth() is expected results.
255 * @tc.expected: the imageTop.GetBorderImageWidth() is expected results.
256 */
257 EXPECT_EQ(imageLeft.GetBorderImageWidth(), DIMENSION_WIDTH);
258 EXPECT_EQ(imageTop.GetBorderImageWidth(), DIMENSION_WIDTH);
259 EXPECT_EQ(imageRight.GetBorderImageWidth(), DIMENSION_WIDTH);
260 EXPECT_EQ(imageBottom.GetBorderImageWidth(), DIMENSION_WIDTH);
261 }
262
263 /**
264 * @tc.name: BorderImagePainter005
265 * @tc.desc: Test cast to BorderImagePainterTestNg
266 * @tc.type: FUNC
267 */
268 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter005, TestSize.Level1)
269 {
270 /**
271 * @tc.steps: step1. push widthProp != nullptr.
272 * @tc.steps: step1. Build a object borderImagePainter.
273 */
274 NG::BorderImageProperty borderImageProperty;
275 RSImage image;
276 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
277 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
278
279 /**
280 * @tc.steps: step2. push borderImageProperty.propBorderImage is not null.
281 * @tc.steps: step2. call InitBorderImageOutset.
282 */
283 auto testBorderImage = MakeBorderImage();
284
285 borderImageProperty.propBorderImage = std::move(testBorderImage);
286 borderImageProperty.propBorderImageSource = ImageSourceInfo(SRC_IMAGES);
287 borderImageProperty.propHasBorderImageOutset = true;
288
289 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
290 borderImagePainter.InitBorderImageOutset();
291
292 auto borderImage = borderImagePainter.borderImageProperty_.GetBorderImageValue();
293 BorderImageEdge imageLeft = borderImage->GetBorderImageEdge(DIRECTION_LEFT);
294 BorderImageEdge imageTop = borderImage->GetBorderImageEdge(DIRECTION_RIGHT);
295 BorderImageEdge imageRight = borderImage->GetBorderImageEdge(DIRECTION_TOP);
296 BorderImageEdge imageBottom = borderImage->GetBorderImageEdge(DIRECTION_BOTTOM);
297
298 /**
299 * @tc.expected: the imageLeft.GetBorderImageOutset() is expected results.
300 * @tc.expected: the imageTop.GetBorderImageOutset() is expected results.
301 */
302 EXPECT_EQ(imageLeft.GetBorderImageOutset(), DIMENSION_OUTSET);
303 EXPECT_EQ(imageTop.GetBorderImageOutset(), DIMENSION_OUTSET);
304 EXPECT_EQ(imageRight.GetBorderImageOutset(), DIMENSION_OUTSET);
305 EXPECT_EQ(imageBottom.GetBorderImageOutset(), DIMENSION_OUTSET);
306 }
307
308 /**
309 * @tc.name: BorderImagePainter006
310 * @tc.desc: Test cast to BorderImagePainterTestNg
311 * @tc.type: FUNC
312 */
313 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter006, TestSize.Level1)
314 {
315 /**
316 * @tc.steps: step1. push widthProp = nullptr.
317 * @tc.steps: step1. Build a object borderImagePainter.
318 */
319 NG::BorderImageProperty borderImageProperty;
320 RSImage image;
321 std::unique_ptr<NG::BorderWidthProperty> widthProp;
322 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
323
324 /**
325 * @tc.steps: step2. push borderImageProperty.propBorderImage is null.
326 * @tc.steps: step2. push propHasBorderImageWidth and propHasBorderImageOutset is true.
327 * @tc.steps: step2. call InitBorderImageWidth and InitBorderImageOutset.
328 */
329 borderImageProperty.propBorderImage = AceType::MakeRefPtr<BorderImage>();
330 borderImageProperty.propBorderImageSource = ImageSourceInfo(SRC_IMAGES);
331 borderImageProperty.propHasBorderImageWidth = true;
332 borderImageProperty.propHasBorderImageOutset = true;
333
334 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
335 borderImagePainter.InitBorderImageWidth();
336 borderImagePainter.InitBorderImageOutset();
337
338 /**
339 * @tc.expected: the borderImagePainter.borderCenterWidth_ is expected results.
340 * @tc.expected: the borderImagePainter.imageCenterWidth_ is expected results.
341 */
342 auto result = borderImagePainter.widthProp_;
343 EXPECT_EQ(result.leftDimen, std::nullopt);
344 EXPECT_EQ(result.topDimen, std::nullopt);
345 EXPECT_EQ(result.rightDimen, std::nullopt);
346 EXPECT_EQ(result.bottomDimen, std::nullopt);
347 }
348
349 /**
350 * @tc.name: BorderImagePainter007
351 * @tc.desc: Test cast to BorderImagePainterTestNg
352 * @tc.type: FUNC
353 */
354 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter007, TestSize.Level1)
355 {
356 /**
357 * @tc.steps: step1. push widthProp = nullptr.
358 * @tc.steps: step1. Build a object borderImagePainter.
359 */
360 NG::BorderImageProperty borderImageProperty;
361 RSImage image;
362 Testing::MockCanvas canvas;
363 CallBack(canvas);
364 std::unique_ptr<NG::BorderWidthProperty> widthProp;
365 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
366
367 /**
368 * @tc.steps: step2. call PaintBorderImage .
369 * @tc.expected: the borderImagePainter.imageWidth_ is 100.
370 */
371 borderImagePainter.PaintBorderImage(OFFSET_F, canvas);
372 EXPECT_EQ(borderImagePainter.imageWidth_, 100);
373 EXPECT_EQ(borderImagePainter.imageHeight_, 100);
374
375 /**
376 * @tc.steps: step3. push borderImageProperty.propBorderImage is default value.
377 * @tc.steps: step3. push paintCornersOnly_ is true, call PaintBorderImage.
378 * @tc.expected: the borderImagePainter.hasWidthProp_ is false.
379 */
380 borderImageProperty.propBorderImage = AceType::MakeRefPtr<BorderImage>();
381 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
382 borderImagePainter.paintCornersOnly_ = true;
383 borderImagePainter.PaintBorderImage(OFFSET_F, canvas);
384 EXPECT_EQ(borderImagePainter.hasWidthProp_, false);
385 }
386
387 /**
388 * @tc.name: BorderImagePainter008
389 * @tc.desc: Test cast to BorderImagePainterTestNg
390 * @tc.type: FUNC
391 */
392 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter008, TestSize.Level1)
393 {
394 /**
395 * @tc.steps: step1. push widthProp != nullptr.
396 * @tc.steps: step1. Build a object borderImagePainter.
397 */
398 NG::BorderImageProperty borderImageProperty;
399 RSImage image;
400 Testing::MockCanvas canvas;
401 CallBack(canvas);
402 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
403 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
404
405 /**
406 * @tc.steps: step3. push borderImagePainter.borderImageProperty_.GetBorderImageValue() is new value.
407 * @tc.steps: step3. push paintCornersOnly_ is true, call PaintBorderImage.
408 * @tc.expected: Return expected results.
409 */
410 auto testBorderImage = MakeBorderImage();
411
412 for (int32_t id = 0; id < 5; id++) {
413 auto state = static_cast<BorderImageRepeat>(id);
414 testBorderImage->repeatMode_ = state;
415 borderImageProperty.propBorderImage = std::move(testBorderImage);
416 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
417 borderImagePainter.PaintBorderImage(OFFSET_F, canvas);
418
419 switch (borderImagePainter.borderImageProperty_.GetBorderImageValue()->GetRepeatMode()) {
420 case BorderImageRepeat::STRETCH:
421 case BorderImageRepeat::SPACE:
422 case BorderImageRepeat::ROUND:
423 case BorderImageRepeat::REPEAT:
424 EXPECT_EQ(borderImagePainter.imageWidth_, 100);
425 EXPECT_EQ(borderImagePainter.imageHeight_, 100);
426 break;
427 default:
428 LOGE("Unsupported Border Image repeat mode");
429 }
430 }
431 }
432
433 /**
434 * @tc.name: BorderImagePainter009
435 * @tc.desc: Test cast to BorderImagePainterTestNg
436 * @tc.type: FUNC
437 */
438 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter009, TestSize.Level1)
439 {
440 /**
441 * @tc.steps: step1. push widthProp != nullptr.
442 * @tc.steps: step1. Build a object borderImagePainter.
443 */
444 NG::BorderImageProperty borderImageProperty;
445 RSImage image;
446 Testing::MockCanvas canvas;
447 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
448 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
449
450 /**
451 * @tc.steps: step2. push borderImagePainter.borderImageProperty_.GetBorderImageValue() is new value.
452 * @tc.steps: step2. push borderCenterWidth_ is FIVE, imageCenterWidth_ is ONE.
453 */
454 auto testBorderImage = MakeBorderImage();
455 borderImageProperty.propBorderImage = std::move(testBorderImage);
456
457 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
458 borderImagePainter.borderCenterWidth_ = FIVE;
459 borderImagePainter.borderCenterHeight_ = FIVE;
460 borderImagePainter.imageCenterWidth_ = ONE;
461 borderImagePainter.imageCenterHeight_ = ONE;
462
463 /**
464 * @tc.steps: step3. call PaintBorderImageRound PaintBorderImageSpace and PaintBorderImageRepeat.
465 * @tc.expected: expected the widthCount and heightCount is 0.
466 */
467 borderImagePainter.PaintBorderImageRound(OFFSET_F, canvas);
468 borderImagePainter.PaintBorderImageSpace(OFFSET_F, canvas);
469 borderImagePainter.PaintBorderImageRepeat(OFFSET_F, canvas);
470 auto widthCount = fmod(borderImagePainter.borderCenterWidth_, borderImagePainter.imageCenterWidth_);
471 auto heightCount = fmod(borderImagePainter.borderCenterHeight_, borderImagePainter.imageCenterHeight_);
472 EXPECT_EQ(widthCount, 0);
473 EXPECT_EQ(heightCount, 0);
474 }
475
476 /**
477 * @tc.name: BorderImagePainter010
478 * @tc.desc: Test cast to BorderImagePainterTestNg
479 * @tc.type: FUNC
480 */
481 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter010, TestSize.Level1)
482 {
483 /**
484 * @tc.steps: step1. push widthProp != nullptr.
485 * @tc.steps: step1. Build a object borderImagePainter.
486 */
487 NG::BorderImageProperty borderImageProperty;
488 RSImage image;
489 Testing::MockCanvas canvas;
490 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
491 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
492
493 /**
494 * @tc.steps: step2. push borderImagePainter.borderImageProperty_.GetBorderImageValue() is new value.
495 * @tc.steps: step2. push borderCenterWidth_ is TWO, imageCenterWidth_ is FIVE.
496 */
497 auto testBorderImage = MakeBorderImage();
498 borderImageProperty.propBorderImage = std::move(testBorderImage);
499
500 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
501 borderImagePainter.borderCenterWidth_ = TWO;
502 borderImagePainter.borderCenterHeight_ = TWO;
503 borderImagePainter.imageCenterWidth_ = FIVE;
504 borderImagePainter.imageCenterHeight_ = FIVE;
505
506 /**
507 * @tc.steps: step3. call PaintBorderImageRound PaintBorderImageSpace and PaintBorderImageRepeat.
508 * @tc.expected: expected the widthCount and heightCount is 2.
509 */
510 borderImagePainter.PaintBorderImageRepeat(OFFSET_F, canvas);
511 auto widthCount = fmod(borderImagePainter.borderCenterWidth_, borderImagePainter.imageCenterWidth_);
512 auto heightCount = fmod(borderImagePainter.borderCenterHeight_, borderImagePainter.imageCenterHeight_);
513 EXPECT_EQ(widthCount, 2);
514 EXPECT_EQ(heightCount, 2);
515 }
516
517 /**
518 * @tc.name: BorderImagePainter011
519 * @tc.desc: Test cast to BorderImagePainterTestNg
520 * @tc.type: FUNC
521 */
522 HWTEST_F(BorderImagePainterTestNg, BorderImagePainter011, TestSize.Level1)
523 {
524 /**
525 * @tc.steps: step1. push widthProp != nullptr.
526 * @tc.steps: step1. Build a object borderImagePainter.
527 */
528 NG::BorderImageProperty borderImageProperty;
529 RSImage image;
530 Testing::MockCanvas canvas;
531 std::unique_ptr<NG::BorderWidthProperty> widthProp { std::make_unique<NG::BorderWidthProperty>(BORDER_WIDTH_TEST) };
532 NG::BorderImagePainter borderImagePainter(borderImageProperty, widthProp, PAINTSIZE, image, DIPSCALE);
533
534 /**
535 * @tc.steps: step2. push borderImagePainter.borderImageProperty_.GetBorderImageValue() is new value.
536 * @tc.steps: step2. push borderCenterWidth_ is minus, imageCenterWidth_ is TWO.
537 */
538 double minus = -1.0;
539 auto testBorderImage = MakeBorderImage();
540 borderImageProperty.propBorderImage = std::move(testBorderImage);
541
542 borderImagePainter.borderImageProperty_ = std::move(borderImageProperty);
543 borderImagePainter.borderCenterWidth_ = minus;
544 borderImagePainter.borderCenterHeight_ = minus;
545 borderImagePainter.imageCenterWidth_ = TWO;
546 borderImagePainter.imageCenterHeight_ = TWO;
547
548 /**
549 * @tc.steps: step3. call PaintBorderImageRepeat.
550 * @tc.expected: expected the widthCount and heightCount is minus.
551 */
552 borderImagePainter.PaintBorderImageRepeat(OFFSET_F, canvas);
553 auto widthCount = fmod(borderImagePainter.borderCenterWidth_, borderImagePainter.imageCenterWidth_);
554 auto heightCount = fmod(borderImagePainter.borderCenterHeight_, borderImagePainter.imageCenterHeight_);
555 EXPECT_EQ(widthCount, minus);
556 EXPECT_EQ(heightCount, minus);
557
558 /**
559 * @tc.steps: step4. push value is minus, call ParseNegativeNumberToZeroOrCeil.
560 * @tc.expected: expected the minus = ZERO_TEST.
561 */
562 borderImagePainter.ParseNegativeNumberToZeroOrCeil(minus);
563 EXPECT_EQ(minus, ZERO_TEST);
564 }
565 } // namespace OHOS::Ace
566