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
18 #include "drawing_color.h"
19 #include "drawing_color_filter.h"
20 #include "drawing_filter.h"
21 #include "drawing_pen.h"
22 #include "drawing_shadow_layer.h"
23 #include "effect/color_filter.h"
24 #include "effect/filter.h"
25
26 using namespace testing;
27 using namespace testing::ext;
28
29 namespace OHOS {
30 namespace Rosen {
31 namespace Drawing {
32 class NativeDrawingPenTest : 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 NativeDrawingPenTest::SetUpTestCase() {}
TearDownTestCase()41 void NativeDrawingPenTest::TearDownTestCase() {}
SetUp()42 void NativeDrawingPenTest::SetUp() {}
TearDown()43 void NativeDrawingPenTest::TearDown() {}
CastToFilter(OH_Drawing_Filter * cFilter)44 static Filter* CastToFilter(OH_Drawing_Filter* cFilter)
45 {
46 return reinterpret_cast<Filter*>(cFilter);
47 }
48
49 /*
50 * @tc.name: NativeDrawingPenTest_penCreate001
51 * @tc.desc: test for create drawing_pen.
52 * @tc.size : MediumTest
53 * @tc.type : Function
54 * @tc.level : Level 1
55 */
56 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penCreate001, Function | MediumTest | Level1)
57 {
58 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
59 EXPECT_EQ(pen == nullptr, false);
60 OH_Drawing_PenDestroy(pen);
61 }
62
63 /*
64 * @tc.name: NativeDrawingPenTest_penSetAntiAlias002
65 * @tc.desc: test for the get and set methods about AntiAlias for a pen.
66 * @tc.size : MediumTest
67 * @tc.type : Function
68 * @tc.level : Level 1
69 */
70 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetAntiAlias002, Function | MediumTest | Level1)
71 {
72 OH_Drawing_Pen* pen1 = OH_Drawing_PenCreate();
73 OH_Drawing_PenSetAntiAlias(pen1, true);
74 EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), true);
75 OH_Drawing_PenSetAntiAlias(pen1, false);
76 EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), false);
77 OH_Drawing_PenDestroy(pen1);
78 }
79
80 /*
81 * @tc.name: NativeDrawingPenTest_penSetColor003
82 * @tc.desc: test for the get and set methods about the color for a pen.
83 * @tc.size : MediumTest
84 * @tc.type : Function
85 * @tc.level : Level 1
86 */
87 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetColor003, Function | MediumTest | Level1)
88 {
89 OH_Drawing_Pen* pen2 = OH_Drawing_PenCreate();
90 OH_Drawing_PenSetColor(pen2, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
91 EXPECT_EQ(OH_Drawing_PenGetColor(pen2), 0xFFFF0000);
92 OH_Drawing_PenDestroy(pen2);
93 }
94
95 /*
96 * @tc.name: NativeDrawingPenTest_penSetWidth004
97 * @tc.desc: test for the get and set methods about the width for a pen.
98 * @tc.size : MediumTest
99 * @tc.type : Function
100 * @tc.level : Level 1
101 */
102 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetWidth004, Function | MediumTest | Level1)
103 {
104 OH_Drawing_Pen* pen3 = OH_Drawing_PenCreate();
105 OH_Drawing_PenSetWidth(pen3, 10);
106 EXPECT_EQ(OH_Drawing_PenGetWidth(pen3), 10);
107 OH_Drawing_PenDestroy(pen3);
108 }
109
110 /*
111 * @tc.name: NativeDrawingPenTest_penSetMiterLimit005
112 * @tc.desc: test for the get and set methods about the miterLimit for a pen.
113 * @tc.size : MediumTest
114 * @tc.type : Function
115 * @tc.level : Level 1
116 */
117 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetMiterLimit005, Function | MediumTest | Level1)
118 {
119 OH_Drawing_Pen* pen4 = OH_Drawing_PenCreate();
120 OH_Drawing_PenSetMiterLimit(pen4, 5);
121 EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen4), 5);
122 OH_Drawing_PenDestroy(pen4);
123 }
124
125 /*
126 * @tc.name: NativeDrawingPenTest_penSetCap006
127 * @tc.desc: test for the get and set methods about the line cap style for a pen.
128 * @tc.size : MediumTest
129 * @tc.type : Function
130 * @tc.level : Level 1
131 */
132 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetCap006, Function | MediumTest | Level1)
133 {
134 OH_Drawing_Pen* pen5 = OH_Drawing_PenCreate();
135 OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
136 EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
137 OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
138 EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
139 OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
140 EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
141 OH_Drawing_PenDestroy(pen5);
142 }
143
144 /*
145 * @tc.name: NativeDrawingPenTest_penSetJoin007
146 * @tc.desc: test for the get and set methods about the line join style for a pen.
147 * @tc.size : MediumTest
148 * @tc.type : Function
149 * @tc.level : Level 1
150 */
151 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetJoin007, Function | MediumTest | Level1)
152 {
153 OH_Drawing_Pen* pen6 = OH_Drawing_PenCreate();
154 OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
155 EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
156 OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
157 EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
158 OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
159 EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
160 OH_Drawing_PenDestroy(pen6);
161 }
162
163 /*
164 * @tc.name: NativeDrawingPenTest_pen008
165 * @tc.desc: test for the get and set alpha for a pen.
166 * @tc.size : MediumTest
167 * @tc.type : Function
168 * @tc.level : Level 1
169 */
170 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenAlphaTest001, Function | MediumTest | Level1)
171 {
172 OH_Drawing_Pen* pen7 = OH_Drawing_PenCreate();
173 OH_Drawing_PenSetColor(pen7, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
174 OH_Drawing_PenSetAlpha(pen7, 128);
175 EXPECT_EQ(OH_Drawing_PenGetAlpha(pen7), 128);
176 OH_Drawing_PenDestroy(pen7);
177 }
178
179 /*
180 * @tc.name: NativeDrawingPenTest_penSetBlendMode008
181 * @tc.desc: test for the get and set methods about the line join style for a pen.
182 * @tc.size : MediumTest
183 * @tc.type : Function
184 * @tc.level : Level 1
185 */
186 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetBlendMode008, Function | MediumTest | Level1)
187 {
188 OH_Drawing_Pen* pen8 = OH_Drawing_PenCreate();
189 EXPECT_NE(pen8, nullptr);
190 OH_Drawing_PenSetBlendMode(pen8, OH_Drawing_BlendMode::BLEND_MODE_SRC);
191 OH_Drawing_PenSetBlendMode(nullptr, OH_Drawing_BlendMode::BLEND_MODE_SRC);
192 OH_Drawing_PenDestroy(pen8);
193 }
194
195 /*
196 * @tc.name: NativeDrawingPenTest_penReset009
197 * @tc.desc: test for the reset method for a pen.
198 * @tc.size : MediumTest
199 * @tc.type : Function
200 * @tc.level : Level 1
201 */
202 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penReset009, Function | MediumTest | Level1)
203 {
204 OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
205 OH_Drawing_PenSetAntiAlias(pen9, true);
206 OH_Drawing_PenSetColor(pen9, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
207 OH_Drawing_PenSetWidth(pen9, 10);
208 OH_Drawing_PenSetMiterLimit(pen9, 5);
209 OH_Drawing_PenSetCap(pen9, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
210 OH_Drawing_PenSetJoin(pen9, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
211
212 OH_Drawing_PenReset(pen9);
213 EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen9), false);
214 EXPECT_EQ(OH_Drawing_PenGetColor(pen9), 0xFF000000);
215 EXPECT_EQ(OH_Drawing_PenGetWidth(pen9), 0);
216 EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen9), -1);
217 EXPECT_EQ(OH_Drawing_PenGetCap(pen9), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
218 EXPECT_EQ(OH_Drawing_PenGetJoin(pen9), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
219
220 OH_Drawing_PenDestroy(pen9);
221 }
222
223 /*
224 * @tc.name: NativeDrawingPenTest_penGetFilter010
225 * @tc.desc: gets the filter from a pen.
226 * @tc.size : MediumTest
227 * @tc.type : Function
228 * @tc.level : Level 1
229 */
230 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penGetFilter010, Function | MediumTest | Level1)
231 {
232 OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
233 EXPECT_NE(pen9, nullptr);
234 OH_Drawing_Filter* cFilter_ = OH_Drawing_FilterCreate();
235 EXPECT_NE(cFilter_, nullptr);
236
237 OH_Drawing_ColorFilter* colorFilterTmp = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
238 OH_Drawing_FilterSetColorFilter(cFilter_, nullptr);
239 OH_Drawing_FilterGetColorFilter(cFilter_, colorFilterTmp);
240 EXPECT_EQ((reinterpret_cast<ColorFilter*>(colorFilterTmp))->GetType(),
241 ColorFilter::FilterType::NO_TYPE);
242
243 OH_Drawing_Filter* tmpFilter_ = OH_Drawing_FilterCreate();
244 EXPECT_NE(cFilter_, nullptr);
245 EXPECT_NE(tmpFilter_, nullptr);
246 OH_Drawing_ColorFilter* cColorFilter_ = OH_Drawing_ColorFilterCreateBlendMode(0xFF0000FF, BLEND_MODE_COLOR);
247 OH_Drawing_FilterSetColorFilter(cFilter_, cColorFilter_);
248 OH_Drawing_PenSetFilter(pen9, cFilter_);
249 OH_Drawing_PenGetFilter(pen9, tmpFilter_);
250
251 EXPECT_NE(CastToFilter(tmpFilter_)->GetColorFilter(), nullptr);
252 EXPECT_EQ(CastToFilter(tmpFilter_)->GetColorFilter()->GetType(), ColorFilter::FilterType::BLEND_MODE);
253 OH_Drawing_FilterDestroy(cFilter_);
254 OH_Drawing_FilterDestroy(tmpFilter_);
255 OH_Drawing_ColorFilterDestroy(cColorFilter_);
256 OH_Drawing_ColorFilterDestroy(colorFilterTmp);
257 OH_Drawing_PenDestroy(pen9);
258 }
259 /*
260 * @tc.name: NativeDrawingPenTest_PenSetShadowLayer011
261 * @tc.desc: gets the filter from a pen.
262 * @tc.size : MediumTest
263 * @tc.type : Function
264 * @tc.level : Level 1
265 */
266 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer011, Function | MediumTest | Level1)
267 {
268 // blurRadius:3.f, offset:(-3.f, 3.f), shadowColor:green
269 OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00);
270 EXPECT_NE(shadowLayer, nullptr);
271 OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
272 OH_Drawing_PenSetShadowLayer(nullptr, shadowLayer);
273 OH_Drawing_PenSetShadowLayer(pen, nullptr);
274 OH_Drawing_PenSetShadowLayer(pen, shadowLayer);
275 OH_Drawing_ShadowLayerDestroy(shadowLayer);
276 OH_Drawing_PenDestroy(pen);
277 }
278 } // namespace Drawing
279 } // namespace Rosen
280 } // namespace OHOS