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 "gtest/gtest.h"
17 #include "drawing_error_code.h"
18 #include "drawing_path.h"
19 #include "drawing_path_effect.h"
20 #include "drawing_pen.h"
21
22 using namespace testing;
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Rosen {
27 namespace Drawing {
28 class NativeDrawingPathEffectTest : public testing::Test {
29 public:
30 static void SetUpTestCase();
31 static void TearDownTestCase();
32 void SetUp() override;
33 void TearDown() override;
34 };
35
SetUpTestCase()36 void NativeDrawingPathEffectTest::SetUpTestCase() {}
TearDownTestCase()37 void NativeDrawingPathEffectTest::TearDownTestCase() {}
SetUp()38 void NativeDrawingPathEffectTest::SetUp() {}
TearDown()39 void NativeDrawingPathEffectTest::TearDown() {}
40
41 /*
42 * @tc.name: NativeDrawingPathEffectTest_PathEffect001
43 * @tc.desc: test for PathEffect.
44 * @tc.type: FUNC
45 * @tc.require: AR000GTO5R
46 */
47 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_PathEffect001, TestSize.Level1)
48 {
49 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
50 EXPECT_NE(pen, nullptr);
51 float intervals[] = {1, 1, 1};
52 OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
53 OH_Drawing_PenSetPathEffect(nullptr, pathEffect);
54 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
55 OH_Drawing_PenSetPathEffect(pen, pathEffect);
56 OH_Drawing_PathEffectDestroy(pathEffect);
57 // 3 is the number of elements of the intervals array
58 pathEffect = OH_Drawing_CreateDashPathEffect(nullptr, 3, 0.0);
59 EXPECT_EQ(pathEffect, nullptr);
60 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
61 pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 0, 0.0);
62 EXPECT_EQ(pathEffect, nullptr);
63 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
64 pathEffect = OH_Drawing_CreateDashPathEffect(intervals, -1, 0.0);
65 EXPECT_EQ(pathEffect, nullptr);
66 }
67
68 /*
69 * @tc.name: NativeDrawingPathEffectTest_CreatePathDashEffect002
70 * @tc.desc: test for CreatePathDashEffect.
71 * @tc.type: FUNC
72 * @tc.require: IBHEL5
73 */
74 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreatePathDashEffect002, TestSize.Level1)
75 {
76 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
77 EXPECT_NE(pen, nullptr);
78 OH_Drawing_Path* path = OH_Drawing_PathCreate();
79 EXPECT_NE(path, nullptr);
80 // 10 is the distance between the dashed segments.
81 OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreatePathDashEffect(path, 10.0, 10.0,
82 OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_TRANSLATE);
83 EXPECT_NE(pathEffect, nullptr);
84 OH_Drawing_PenSetPathEffect(nullptr, pathEffect);
85 OH_Drawing_PenSetPathEffect(pen, pathEffect);
86
87 OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreatePathDashEffect(nullptr,
88 10.0, 10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_TRANSLATE);
89 EXPECT_EQ(pathEffect2, nullptr);
90
91 pathEffect2 = OH_Drawing_CreatePathDashEffect(path,
92 -10.0, 10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_ROTATE);
93 EXPECT_EQ(pathEffect2, nullptr);
94
95 pathEffect2 = OH_Drawing_CreatePathDashEffect(path,
96 10.0, -10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_MORPH);
97 EXPECT_NE(pathEffect2, nullptr);
98 OH_Drawing_PenDestroy(pen);
99 OH_Drawing_PathDestroy(path);
100 OH_Drawing_PathEffectDestroy(pathEffect);
101 OH_Drawing_PathEffectDestroy(pathEffect2);
102 }
103
104 /*
105 * @tc.name: NativeDrawingPathEffectTest_CreateSumPathEffect003
106 * @tc.desc: test for CreatePathDashEffect.
107 * @tc.type: FUNC
108 * @tc.require: IBHEL5
109 */
110 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateSumPathEffect003, TestSize.Level1)
111 {
112 float intervals[] = {1, 1, 1};
113 // 3 is the number of elements of the intervals array
114 OH_Drawing_PathEffect* pathEffectOne = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
115 EXPECT_NE(pathEffectOne, nullptr);
116 OH_Drawing_PathEffect* pathEffectTwo = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
117 EXPECT_NE(pathEffectTwo, nullptr);
118 OH_Drawing_PathEffect* pathEffectSum = OH_Drawing_CreateSumPathEffect(nullptr, pathEffectTwo);
119 EXPECT_EQ(pathEffectSum, nullptr);
120 pathEffectSum = OH_Drawing_CreateSumPathEffect(pathEffectOne, nullptr);
121 EXPECT_EQ(pathEffectSum, nullptr);
122 pathEffectSum = OH_Drawing_CreateSumPathEffect(pathEffectOne, pathEffectTwo);
123 EXPECT_NE(pathEffectSum, nullptr);
124 OH_Drawing_PathEffectDestroy(pathEffectOne);
125 OH_Drawing_PathEffectDestroy(pathEffectTwo);
126 OH_Drawing_PathEffectDestroy(pathEffectSum);
127 }
128
129 /*
130 * @tc.name: NativeDrawingPathEffectTest_PathEffect004
131 * @tc.desc: test for PathEffect.
132 * @tc.type: FUNC
133 * @tc.require: IBHEL5
134 */
135 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateDiscretePathEffect004, TestSize.Level1)
136 {
137 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
138 EXPECT_NE(pen, nullptr);
139 float segLength = 1.0;
140 float dev = 1.0;
141 OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateDiscretePathEffect(segLength, dev);
142 EXPECT_NE(pathEffect, nullptr);
143 OH_Drawing_PenSetPathEffect(pen, pathEffect);
144 OH_Drawing_PathEffect* pathEffect1 = OH_Drawing_CreateDiscretePathEffect(0.0, dev);
145 EXPECT_NE(pathEffect1, nullptr);
146 OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreateDiscretePathEffect(segLength, 0.0);
147 EXPECT_NE(pathEffect2, nullptr);
148 OH_Drawing_PathEffect* pathEffect3 = OH_Drawing_CreateDiscretePathEffect(-2.0, dev); // -2.0 means segLength
149 EXPECT_NE(pathEffect3, nullptr);
150 OH_Drawing_PathEffect* pathEffect4 = OH_Drawing_CreateDiscretePathEffect(-2.0, -2.0); // -2.0 means segLength
151 EXPECT_NE(pathEffect4, nullptr);
152
153 OH_Drawing_PathEffectDestroy(pathEffect);
154 OH_Drawing_PathEffectDestroy(pathEffect1);
155 OH_Drawing_PathEffectDestroy(pathEffect2);
156 OH_Drawing_PathEffectDestroy(pathEffect3);
157 OH_Drawing_PathEffectDestroy(pathEffect4);
158 OH_Drawing_PenDestroy(pen);
159 }
160
161 /*
162 * @tc.name: NativeDrawingPathEffectTest_PathEffect005
163 * @tc.desc: test for PathEffect.
164 * @tc.type: FUNC
165 * @tc.require: IBHEL5
166 */
167 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateCornerPathEffect005, TestSize.Level1)
168 {
169 OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateCornerPathEffect(0);
170 EXPECT_EQ(pathEffect, nullptr);
171 pathEffect = OH_Drawing_CreateCornerPathEffect(-2.0); // -2.0 means radius
172 EXPECT_EQ(pathEffect, nullptr);
173 uint32_t radius = 1;
174 pathEffect = OH_Drawing_CreateCornerPathEffect(radius);
175 EXPECT_NE(pathEffect, nullptr);
176 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
177 EXPECT_NE(pen, nullptr);
178 OH_Drawing_PenSetPathEffect(pen, pathEffect);
179 OH_Drawing_PathEffectDestroy(pathEffect);
180 OH_Drawing_PenDestroy(pen);
181 }
182
183 /*
184 * @tc.name: NativeDrawingPathEffectTest_PathEffect006
185 * @tc.desc: test for PathEffect.
186 * @tc.type: FUNC
187 * @tc.require: IBHEL5
188 */
189 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateComposePathEffect006, TestSize.Level1)
190 {
191 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
192 EXPECT_NE(pen, nullptr);
193 uint32_t radius = 1;
194 OH_Drawing_PathEffect* pathEffect1 = OH_Drawing_CreateCornerPathEffect(radius);
195 EXPECT_NE(pathEffect1, nullptr);
196 radius = 2; // 2 means radius
197 OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreateCornerPathEffect(radius);
198 EXPECT_NE(pathEffect2, nullptr);
199 OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateComposePathEffect(nullptr, pathEffect2);
200 EXPECT_EQ(pathEffect, nullptr);
201 pathEffect = OH_Drawing_CreateComposePathEffect(pathEffect1, nullptr);
202 EXPECT_EQ(pathEffect, nullptr);
203 pathEffect = OH_Drawing_CreateComposePathEffect(pathEffect1, pathEffect2);
204 EXPECT_NE(pathEffect, nullptr);
205 OH_Drawing_PenSetPathEffect(pen, pathEffect);
206
207 OH_Drawing_PathEffectDestroy(pathEffect1);
208 OH_Drawing_PathEffectDestroy(pathEffect2);
209 OH_Drawing_PathEffectDestroy(pathEffect);
210 OH_Drawing_PenDestroy(pen);
211 }
212 } // namespace Drawing
213 } // namespace Rosen
214 } // namespace OHOS