1/*
2 * Copyright (c) 2022-2024 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, Hardware
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 <cstdio>
17#include "gtest/gtest.h"
18
19#include "drawing_path.h"
20#include "drawing_matrix.h"
21#include "drawing_rect.h"
22#include "drawing_round_rect.h"
23#include "draw/path.h"
24#include "utils/scalar.h"
25
26using namespace testing;
27using namespace testing::ext;
28
29namespace OHOS {
30namespace Rosen {
31namespace Drawing {
32class NativeDrawingPathTest : public testing::Test {
33public:
34    static void SetUpTestCase();
35    static void TearDownTestCase();
36    void SetUp() override;
37    void TearDown() override;
38};
39
40void NativeDrawingPathTest::SetUpTestCase() {}
41void NativeDrawingPathTest::TearDownTestCase() {}
42void NativeDrawingPathTest::SetUp() {}
43void NativeDrawingPathTest::TearDown() {}
44
45/*
46 * @tc.name: NativeDrawingPathTest_pathCreate001
47 * @tc.desc: test for create drawing_path.
48 * @tc.size  : MediumTest
49 * @tc.type  : Function
50 * @tc.level : Level 1
51 */
52HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathCreate001, TestSize.Level1)
53{
54    OH_Drawing_Path* path = OH_Drawing_PathCreate();
55    EXPECT_EQ(path == nullptr, false);
56    OH_Drawing_PathDestroy(path);
57}
58
59/*
60 * @tc.name: NativeDrawingPathTest_pathMoveTo002
61 * @tc.desc: test for PathMoveTo func.
62 * @tc.size  : MediumTest
63 * @tc.type  : Function
64 * @tc.level : Level 1
65 */
66HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathMoveTo002, TestSize.Level1)
67{
68    OH_Drawing_Path* path1 = OH_Drawing_PathCreate();
69    OH_Drawing_PathMoveTo(path1, 20, 20);
70    OH_Drawing_PathMoveTo(path1, -1, 20.6f);
71    OH_Drawing_PathDestroy(path1);
72}
73
74/*
75 * @tc.name: NativeDrawingPathTest_pathLineTo003
76 * @tc.desc: test for PathLineTo func.
77 * @tc.size  : MediumTest
78 * @tc.type  : Function
79 * @tc.level : Level 1
80 */
81HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathLineTo003, TestSize.Level1)
82{
83    OH_Drawing_Path* path2 = OH_Drawing_PathCreate();
84    OH_Drawing_PathLineTo(path2, 50, 40);
85    OH_Drawing_PathLineTo(path2, -50, 10.2f);
86    OH_Drawing_PathDestroy(path2);
87}
88
89/*
90 * @tc.name: NativeDrawingPathTest_pathReset004
91 * @tc.desc: test for PathReset func.
92 * @tc.size  : MediumTest
93 * @tc.type  : Function
94 * @tc.level : Level 1
95 */
96HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathReset004, TestSize.Level1)
97{
98    OH_Drawing_Path* path3 = OH_Drawing_PathCreate();
99    OH_Drawing_PathMoveTo(path3, 20, 20);
100    OH_Drawing_PathReset(path3);
101    OH_Drawing_PathDestroy(path3);
102}
103
104/*
105 * @tc.name: NativeDrawingPathTest_pathArcTo005
106 * @tc.desc: test for PathArcTo func.
107 * @tc.size  : MediumTest
108 * @tc.type  : Function
109 * @tc.level : Level 1
110 */
111HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathArcTo005, TestSize.Level1)
112{
113    OH_Drawing_Path* path4 = OH_Drawing_PathCreate();
114    OH_Drawing_PathArcTo(path4, 10, 10, 20, 0, 0, 90);
115    OH_Drawing_PathArcTo(path4, -10, 10, 10, -10, 0, 90);
116    OH_Drawing_PathDestroy(path4);
117}
118
119/*
120 * @tc.name: NativeDrawingPathTest_pathQuadTo006
121 * @tc.desc: test for PathQuadTo func.
122 * @tc.size  : MediumTest
123 * @tc.type  : Function
124 * @tc.level : Level 1
125 */
126HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathQuadTo006, TestSize.Level1)
127{
128    OH_Drawing_Path* path5 = OH_Drawing_PathCreate();
129    OH_Drawing_PathQuadTo(path5, 0, 0, 30, 30);
130    OH_Drawing_PathQuadTo(path5, -20.5f, -20.5f, 30, 0);
131    OH_Drawing_PathDestroy(path5);
132}
133
134/*
135 * @tc.name: NativeDrawingPathTest_pathCubicTo007
136 * @tc.desc: test for PathCubicTo func.
137 * @tc.size  : MediumTest
138 * @tc.type  : Function
139 * @tc.level : Level 1
140 */
141HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathCubicTo007, TestSize.Level1)
142{
143    OH_Drawing_Path* path6 = OH_Drawing_PathCreate();
144    OH_Drawing_PathCubicTo(path6, 30, 40, 60, 0, 50, 20);
145    OH_Drawing_PathCubicTo(path6, -30, 40, 60, -30.6f, 50, -20);
146    OH_Drawing_PathDestroy(path6);
147}
148
149/*
150 * @tc.name: NativeDrawingPathTest_pathClose008
151 * @tc.desc: test for PathClose func.
152 * @tc.size  : MediumTest
153 * @tc.type  : Function
154 * @tc.level : Level 1
155 */
156HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathClose008, TestSize.Level1)
157{
158    OH_Drawing_Path* path7 = OH_Drawing_PathCreate();
159    OH_Drawing_PathLineTo(path7, 50, 40);
160    OH_Drawing_PathClose(path7);
161    OH_Drawing_PathDestroy(path7);
162}
163
164/*
165 * @tc.name: NativeDrawingPathTest_pathCopy009
166 * @tc.desc: test for PathCopy func.
167 * @tc.size  : MediumTest
168 * @tc.type  : Function
169 * @tc.level : Level 1
170 */
171HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathCopy009, TestSize.Level1)
172{
173    OH_Drawing_Path* path7 = OH_Drawing_PathCreate();
174    OH_Drawing_PathLineTo(path7, 50, 40);
175    OH_Drawing_PathClose(path7);
176    EXPECT_EQ(OH_Drawing_PathCopy(nullptr), nullptr);
177    OH_Drawing_Path* pathCopy = OH_Drawing_PathCopy(path7);
178    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(pathCopy)->GetBounds().GetWidth(), 50.0));
179    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(pathCopy)->GetBounds().GetHeight(), 40.0));
180    OH_Drawing_PathDestroy(path7);
181    OH_Drawing_PathDestroy(pathCopy);
182}
183
184/*
185 * @tc.name: NativeDrawingPathTest_pathAddRect010
186 * @tc.desc: test for PathAddRect func.
187 * @tc.size  : MediumTest
188 * @tc.type  : Function
189 * @tc.level : Level 1
190 */
191HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddRect010, TestSize.Level1)
192{
193    OH_Drawing_Path* path = OH_Drawing_PathCreate();
194    OH_Drawing_PathAddRect(nullptr, 50, 50, 250, 250, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
195    OH_Drawing_PathAddRect(path, 50, 50, 250, 250, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
196    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 200.0));
197    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 200.0));
198    OH_Drawing_PathDestroy(path);
199}
200
201/*
202 * @tc.name: NativeDrawingPathTest_pathAddRoundRect011
203 * @tc.desc: test for PathAddRoundRect  func.
204 * @tc.size  : MediumTest
205 * @tc.type  : Function
206 * @tc.level : Level 1
207 */
208HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddRoundRect011, TestSize.Level1)
209{
210    OH_Drawing_Path* path = OH_Drawing_PathCreate();
211    OH_Drawing_PathAddRect(nullptr, 50, 50, 250, 250, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
212    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(50, 50, 250, 250);
213    OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20);
214    OH_Drawing_PathAddRoundRect(path, roundRect, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
215    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 200.0));
216    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 200.0));
217    OH_Drawing_PathDestroy(path);
218    OH_Drawing_RoundRectDestroy(roundRect);
219    OH_Drawing_RectDestroy(rect);
220}
221
222/*
223 * @tc.name: NativeDrawingPathTest_pathAddArc012
224 * @tc.desc: test for PathAddArc func.
225 * @tc.size  : MediumTest
226 * @tc.type  : Function
227 * @tc.level : Level 1
228 */
229HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddArc012, TestSize.Level1)
230{
231    OH_Drawing_Path* path = OH_Drawing_PathCreate();
232    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(50, 50, 250, 250);
233    OH_Drawing_PathAddArc(nullptr, rect, 0, 180);
234    OH_Drawing_PathAddArc(path, nullptr, 0, 180);
235    OH_Drawing_PathAddArc(path, rect, 0, 180);
236    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 200.0));
237    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 100.0));
238    OH_Drawing_PathDestroy(path);
239    OH_Drawing_RectDestroy(rect);
240}
241
242/*
243 * @tc.name: NativeDrawingPathTest_pathContains013
244 * @tc.desc: test for PathContains func.
245 * @tc.size  : MediumTest
246 * @tc.type  : Function
247 * @tc.level : Level 1
248 */
249HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathContains013, TestSize.Level1)
250{
251    OH_Drawing_Path* path = OH_Drawing_PathCreate();
252    OH_Drawing_PathAddRect(path, 50, 50, 250, 250, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
253    OH_Drawing_PathContains(nullptr, 0, 0);
254    bool ret = OH_Drawing_PathContains(path, 0, 0);
255    EXPECT_EQ(ret, false);
256    ret = OH_Drawing_PathContains(path, 60, 60);
257    EXPECT_EQ(ret, true);
258    OH_Drawing_PathDestroy(path);
259}
260
261/*
262 * @tc.name: NativeDrawingPathTest_pathTransform014
263 * @tc.desc: test for PathTransform func.
264 * @tc.size  : MediumTest
265 * @tc.type  : Function
266 * @tc.level : Level 1
267 */
268HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathTransform014, TestSize.Level1)
269{
270    OH_Drawing_Path* path = OH_Drawing_PathCreate();
271    OH_Drawing_PathAddRect(path, 50, 50, 250, 250, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
272    OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreateTranslation(1, 1);
273    OH_Drawing_PathTransform(nullptr, matrix);
274    OH_Drawing_PathTransform(path, nullptr);
275
276    bool ret = OH_Drawing_PathContains(path, 50, 50);
277    EXPECT_EQ(ret, true);
278    OH_Drawing_PathTransform(path, matrix);
279    ret = OH_Drawing_PathContains(path, 50, 50);
280    EXPECT_EQ(ret, false);
281    OH_Drawing_PathDestroy(path);
282}
283
284/*
285 * @tc.name: NativeDrawingPathTest_pathSetFilltype015
286 * @tc.desc: test for PathSetFillType func.
287 * @tc.size  : MediumTest
288 * @tc.type  : Function
289 * @tc.level : Level 1
290 */
291HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathSetFilltype015, TestSize.Level1)
292{
293    OH_Drawing_Path* path = OH_Drawing_PathCreate();
294    OH_Drawing_PathSetFillType(nullptr, PATH_FILL_TYPE_WINDING);
295    OH_Drawing_PathSetFillType(path, PATH_FILL_TYPE_WINDING);
296
297    OH_Drawing_PathLineTo(path, 50, 40);
298    OH_Drawing_PathClose(path);
299    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 50.0));
300    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 40.0));
301    float ret = OH_Drawing_PathGetLength(path, true);
302    EXPECT_TRUE(IsScalarAlmostEqual(ret, 128.062485)); // 128.062485 is length of path
303    OH_Drawing_PathDestroy(path);
304}
305/*
306 * @tc.name: NativeDrawingPathTest_pathConicTo016
307 * @tc.desc: test for PathConicTo func.
308 * @tc.size  : MediumTest
309 * @tc.type  : Function
310 * @tc.level : Level 1
311 */
312HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathConicTo016, TestSize.Level1)
313{
314    OH_Drawing_Path* path = OH_Drawing_PathCreate();
315    OH_Drawing_PathConicTo(path, 0, 0, 30, 30, 1);
316    OH_Drawing_PathConicTo(path, -20.5f, -20.5f, 30, 0, 1);
317    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 50.5));
318    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 50.5));
319    OH_Drawing_PathDestroy(path);
320}
321
322/*
323 * @tc.name: NativeDrawingPathTest_pathAddRectWithInitialCorner017
324 * @tc.desc: test for PathAddRectWithInitialCorner func.
325 * @tc.size  : MediumTest
326 * @tc.type  : Function
327 * @tc.level : Level 1
328 */
329HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddRectWithInitialCorner017, TestSize.Level1)
330{
331    OH_Drawing_Path* path = OH_Drawing_PathCreate();
332    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 200.0f, 300.0f);
333    OH_Drawing_PathAddRectWithInitialCorner(path, rect, PATH_DIRECTION_CW, 0);
334    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 200.0));
335    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 300.0));
336    OH_Drawing_PathClose(path);
337    OH_Drawing_PathDestroy(path);
338    OH_Drawing_RectDestroy(rect);
339}
340
341/*
342 * @tc.name: NativeDrawingPathTest_pathAddPathWithMode018
343 * @tc.desc: test for PathAddPathWithMode func.
344 * @tc.size  : MediumTest
345 * @tc.type  : Function
346 * @tc.level : Level 1
347 */
348HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddPathWithMode018, TestSize.Level1)
349{
350    OH_Drawing_Path* path = OH_Drawing_PathCreate();
351    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 200.0f, 300.0f);
352    OH_Drawing_PathAddRectWithInitialCorner(path, rect, PATH_DIRECTION_CW, 0);
353    OH_Drawing_Path* path2 = OH_Drawing_PathCreate();
354    OH_Drawing_PathAddPathWithMode(path2, path, PATH_ADD_MODE_APPEND);
355    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetWidth(), 200.0));
356    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetHeight(), 300.0));
357    OH_Drawing_PathDestroy(path);
358    OH_Drawing_RectDestroy(rect);
359    OH_Drawing_PathDestroy(path2);
360}
361
362/*
363 * @tc.name: NativeDrawingPathTest_pathAddPathWithOffsetAndMode019
364 * @tc.desc: test for PathAddPathWithOffsetAndMode func.
365 * @tc.size  : MediumTest
366 * @tc.type  : Function
367 * @tc.level : Level 1
368 */
369HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddPathWithOffsetAndMode019, TestSize.Level1)
370{
371    OH_Drawing_Path* path = OH_Drawing_PathCreate();
372    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 200.0f, 300.0f);
373    OH_Drawing_PathAddRectWithInitialCorner(path, rect, PATH_DIRECTION_CW, 0);
374    OH_Drawing_Path* path2 = OH_Drawing_PathCreate();
375    OH_Drawing_PathAddPathWithOffsetAndMode(path2, path, 0, 0, PATH_ADD_MODE_APPEND);
376    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetWidth(), 200.0));
377    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetHeight(), 300.0));
378    OH_Drawing_PathDestroy(path);
379    OH_Drawing_RectDestroy(rect);
380    OH_Drawing_PathDestroy(path2);
381}
382
383/*
384 * @tc.name: NativeDrawingPathTest_pathAddPathWithMatrixAndMode020
385 * @tc.desc: test for PathAddPathWithMatrixAndMode func.
386 * @tc.size  : MediumTest
387 * @tc.type  : Function
388 * @tc.level : Level 1
389 */
390HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddPathWithMatrixAndMode020, TestSize.Level1)
391{
392    OH_Drawing_Path* path = OH_Drawing_PathCreate();
393    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 200.0f, 300.0f);
394    OH_Drawing_PathAddRectWithInitialCorner(path, rect, PATH_DIRECTION_CW, 0);
395    OH_Drawing_Path* path2 = OH_Drawing_PathCreate();
396    OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
397
398    OH_Drawing_PathAddPathWithMatrixAndMode(path2, path, matrix, PATH_ADD_MODE_APPEND);
399    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetWidth(), 200.0));
400    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path2)->GetBounds().GetHeight(), 300.0));
401
402    OH_Drawing_Path* pathRect = OH_Drawing_PathCreate();
403    OH_Drawing_PathAddRect(pathRect, 0.0f, 0.0f, 200.0f, 300.0f, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
404    OH_Drawing_MatrixSetMatrix(
405        matrix,
406        5, 4, 0,
407        0, -1, 0,
408        0, 0, 1);
409    OH_Drawing_PathAddPath(pathRect, pathRect, nullptr);
410    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(pathRect)->GetBounds().GetWidth(), 200.0));
411    OH_Drawing_PathAddPath(pathRect, pathRect, matrix);
412    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(pathRect)->GetBounds().GetWidth(), 2200.0));
413    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(pathRect)->GetBounds().GetHeight(), 600.0));
414    OH_Drawing_PathAddPath(nullptr, pathRect, matrix);
415    OH_Drawing_PathAddPath(pathRect, nullptr, matrix);
416    OH_Drawing_PathDestroy(path);
417    OH_Drawing_RectDestroy(rect);
418    OH_Drawing_PathDestroy(path2);
419    OH_Drawing_PathDestroy(pathRect);
420    OH_Drawing_MatrixDestroy(matrix);
421}
422
423/*
424 * @tc.name: NativeDrawingPathTest_pathOffset021
425 * @tc.desc: test for PathOffset func.
426 * @tc.size  : MediumTest
427 * @tc.type  : Function
428 * @tc.level : Level 1
429 */
430HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathOffset021, TestSize.Level1)
431{
432    OH_Drawing_Path* path = OH_Drawing_PathCreate();
433    OH_Drawing_Path* path2 = OH_Drawing_PathCreate();
434    OH_Drawing_PathOffset(path, path2, 50, 40);
435    OH_Drawing_PathReset(path);
436    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetWidth(), 0.0));
437    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path)->GetBounds().GetHeight(), 0.0));
438    OH_Drawing_PathDestroy(path);
439    OH_Drawing_PathDestroy(path2);
440}
441
442/*
443 * @tc.name: NativeDrawingPathTest_pathAddOvalWithInitialPoint022
444 * @tc.desc: test for PathAddOvalWithInitialPoint func.
445 * @tc.size  : MediumTest
446 * @tc.type  : Function
447 * @tc.level : Level 1
448 */
449HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddOvalWithInitialPoint022, TestSize.Level1)
450{
451    OH_Drawing_Path* path9 = OH_Drawing_PathCreate();
452    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 100, 500, 400);
453    OH_Drawing_PathAddOvalWithInitialPoint(path9, rect, 10, PATH_DIRECTION_CW);
454    OH_Drawing_PathClose(path9);
455    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path9)->GetBounds().GetWidth(), 500.0));
456    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path9)->GetBounds().GetHeight(), 300.0));
457    OH_Drawing_PathDestroy(path9);
458    OH_Drawing_RectDestroy(rect);
459}
460
461/*
462 * @tc.name: NativeDrawingPathTest_pathRMoveTo023
463 * @tc.desc: test for PathRMoveTo func.
464 * @tc.size  : MediumTest
465 * @tc.type  : Function
466 * @tc.level : Level 1
467 */
468HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathRMoveTo023, TestSize.Level1)
469{
470    OH_Drawing_Path* path10 = OH_Drawing_PathCreate();
471    OH_Drawing_PathRMoveTo(path10, 100, 100);
472    OH_Drawing_PathLineTo(path10, 300, 300);
473    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path10)->GetBounds().GetWidth(), 200.0));
474    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path10)->GetBounds().GetHeight(), 200.0));
475    OH_Drawing_PathDestroy(path10);
476}
477
478/*
479 * @tc.name: NativeDrawingPathTest_pathRLineTo024
480 * @tc.desc: test for PathRLineTo func.
481 * @tc.size  : MediumTest
482 * @tc.type  : Function
483 * @tc.level : Level 1
484 */
485HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathRLineTo024, TestSize.Level1)
486{
487    OH_Drawing_Path* path11 = OH_Drawing_PathCreate();
488    OH_Drawing_PathMoveTo(path11, 100, 100);
489    OH_Drawing_PathRLineTo(path11, 300, 300);
490    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path11)->GetBounds().GetWidth(), 300.0));
491    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path11)->GetBounds().GetHeight(), 300.0));
492    OH_Drawing_PathDestroy(path11);
493}
494
495/*
496 * @tc.name: NativeDrawingPathTest_pathRQuadTo025
497 * @tc.desc: test for PathRQuadTo func.
498 * @tc.size  : MediumTest
499 * @tc.type  : Function
500 * @tc.level : Level 1
501 */
502HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathRQuadTo025, TestSize.Level1)
503{
504    OH_Drawing_Path* path12 = OH_Drawing_PathCreate();
505    OH_Drawing_PathQuadTo(path12, 0, 0, 30, 30);
506    OH_Drawing_PathRQuadTo(path12, 100, 100, 100, 300);
507    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path12)->GetBounds().GetWidth(), 130.0));
508    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path12)->GetBounds().GetHeight(), 330.0));
509    OH_Drawing_PathDestroy(path12);
510}
511
512/*
513 * @tc.name: NativeDrawingPathTest_pathRConicTo026
514 * @tc.desc: test for PathRConicTo func.
515 * @tc.size  : MediumTest
516 * @tc.type  : Function
517 * @tc.level : Level 1
518 */
519HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathRConicTo026, TestSize.Level1)
520{
521    OH_Drawing_Path* path13 = OH_Drawing_PathCreate();
522    OH_Drawing_PathRConicTo(path13, 100, 100, 100, 300, 5);
523    OH_Drawing_PathRConicTo(path13, 100, 100, 100, 300, 5);
524    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path13)->GetBounds().GetWidth(), 200.0));
525    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path13)->GetBounds().GetHeight(), 600.0));
526    OH_Drawing_PathDestroy(path13);
527}
528
529/*
530 * @tc.name: NativeDrawingPathTest_pathRCubicTo027
531 * @tc.desc: test for PathRCubicTo func.
532 * @tc.size  : MediumTest
533 * @tc.type  : Function
534 * @tc.level : Level 1
535 */
536HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathRCubicTo027, TestSize.Level1)
537{
538    OH_Drawing_Path* path14 = OH_Drawing_PathCreate();
539    OH_Drawing_PathCubicTo(path14, 30, 40, 60, 0, 50, 20);
540    OH_Drawing_PathRCubicTo(path14, 30, 40, 60, 0, 50, 20);
541    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path14)->GetBounds().GetWidth(), 110.0));
542    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path14)->GetBounds().GetHeight(), 60.0));
543    OH_Drawing_PathDestroy(path14);
544}
545
546/*
547 * @tc.name: NativeDrawingPathTest_pathTransformWithPerspectiveClip028
548 * @tc.desc: test for PathTransformWithPerspectiveClip func.
549 * @tc.size  : MediumTest
550 * @tc.type  : Function
551 * @tc.level : Level 1
552 */
553HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathTransformWithPerspectiveClip028, TestSize.Level1)
554{
555    OH_Drawing_Path* path15 = OH_Drawing_PathCreate();
556    OH_Drawing_PathAddRect(path15, 100, 500, 500, 100, PATH_DIRECTION_CW);
557    OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(100, 100);
558    OH_Drawing_PathTransformWithPerspectiveClip(path15, matrix, path15, true);
559    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path15)->GetBounds().GetWidth(), 400.0));
560    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path15)->GetBounds().GetHeight(), 400.0));
561    OH_Drawing_PathDestroy(path15);
562    OH_Drawing_MatrixDestroy(matrix);
563}
564/*
565 * @tc.name  : NativeDrawingPathTest_pathAddPath029
566 * @tc.desc  : test for PathAddPath func.
567 * @tc.size  : MediumTest
568 * @tc.type  : Function
569 * @tc.level : Level 1
570 */
571HWTEST_F(NativeDrawingPathTest, NativeDrawingPathTest_pathAddPath029, TestSize.Level1)
572{
573    OH_Drawing_Path* path16 = OH_Drawing_PathCreate();
574    OH_Drawing_PathAddRect(path16, 100, 500, 500, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
575    OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
576    OH_Drawing_MatrixSetMatrix(
577        matrix,
578        1, 0, 0,
579        0, -1, 0,
580        0, 0, 1);
581    OH_Drawing_PathAddPath(path16, path16, matrix);
582    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path16)->GetBounds().GetWidth(), 400.0));
583    EXPECT_TRUE(IsScalarAlmostEqual(reinterpret_cast<Path*>(path16)->GetBounds().GetHeight(), 1000.0));
584    OH_Drawing_PathDestroy(path16);
585    OH_Drawing_MatrixDestroy(matrix);
586}
587} // namespace Drawing
588} // namespace Rosen
589} // namespace OHOS