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