1 /*
2 * Copyright (c) 2022 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, 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
16 #include <cstddef>
17 #include "gtest/gtest.h"
18 #include "skia_adapter/skia_shader_effect.h"
19 #include "draw/color.h"
20 #include "effect/shader_effect.h"
21 #include "image/image.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 namespace Drawing {
29 class SkiaShaderEffectTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp() override;
34 void TearDown() override;
35 };
36
SetUpTestCase()37 void SkiaShaderEffectTest::SetUpTestCase() {}
TearDownTestCase()38 void SkiaShaderEffectTest::TearDownTestCase() {}
SetUp()39 void SkiaShaderEffectTest::SetUp() {}
TearDown()40 void SkiaShaderEffectTest::TearDown() {}
41
42 /**
43 * @tc.name: InitWithColor001
44 * @tc.desc: Test InitWithColor
45 * @tc.type: FUNC
46 * @tc.require: I91EH1
47 */
48 HWTEST_F(SkiaShaderEffectTest, InitWithColor001, TestSize.Level1)
49 {
50 ColorQuad colorQuad = 0xFF000000;
51 SkiaShaderEffect skiaShaderEffect;
52 skiaShaderEffect.InitWithColor(colorQuad);
53 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
54 }
55
56 /**
57 * @tc.name: InitWithBlend001
58 * @tc.desc: Test InitWithBlend
59 * @tc.type: FUNC
60 * @tc.require: I91EH1
61 */
62 HWTEST_F(SkiaShaderEffectTest, InitWithBlend001, TestSize.Level1)
63 {
64 ShaderEffect shaderEffect1{ShaderEffect::ShaderEffectType::BLEND, 0xFF000000};
65 ShaderEffect shaderEffect2{ShaderEffect::ShaderEffectType::LINEAR_GRADIENT, 0xFF000000};
66 SkiaShaderEffect skiaShaderEffect;
67 skiaShaderEffect.InitWithBlend(shaderEffect1, shaderEffect2, BlendMode::CLEAR);
68 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
69 }
70
71 /**
72 * @tc.name: InitWithImage001
73 * @tc.desc:
74 * @tc.type: FUNC
75 * @tc.author:
76 */
77 HWTEST_F(SkiaShaderEffectTest, InitWithImage001, TestSize.Level1)
78 {
79 Image image;
80 Matrix matrix;
81 SamplingOptions samplingOptions;
82 SkiaShaderEffect skiaShaderEffect;
83 skiaShaderEffect.InitWithImage(image, TileMode::MIRROR, TileMode::REPEAT, samplingOptions, matrix);
84 EXPECT_TRUE(skiaShaderEffect.GetShader() == nullptr);
85 }
86
87 /**
88 * @tc.name: InitWithPicture001
89 * @tc.desc:
90 * @tc.type: FUNC
91 * @tc.author:
92 */
93 HWTEST_F(SkiaShaderEffectTest, InitWithPicture001, TestSize.Level1)
94 {
95 Picture picture;
96 Matrix matrix;
97 Rect rect;
98 SkiaShaderEffect skiaShaderEffect;
99 skiaShaderEffect.InitWithPicture(picture, TileMode::MIRROR, TileMode::CLAMP, FilterMode::LINEAR, matrix, rect);
100 EXPECT_TRUE(skiaShaderEffect.GetShader() == nullptr);
101 }
102
103 /**
104 * @tc.name: InitWithLinearGradient001
105 * @tc.desc:
106 * @tc.type: FUNC
107 * @tc.author:
108 */
109 HWTEST_F(SkiaShaderEffectTest, InitWithLinearGradient001, TestSize.Level1)
110 {
111 Point startPt;
112 Point endPt;
113 ColorQuad colorQuad = 20;
114 std::vector<ColorQuad> color { colorQuad };
115 std::vector<scalar> pos { 30.0f };
116 SkiaShaderEffect skiaShaderEffect;
117 skiaShaderEffect.InitWithLinearGradient(startPt, endPt, color, pos, TileMode::MIRROR, nullptr);
118 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
119 }
120
121 /**
122 * @tc.name: InitWithLinearGradient002
123 * @tc.desc:
124 * @tc.type: FUNC
125 * @tc.author:
126 */
127 HWTEST_F(SkiaShaderEffectTest, InitWithLinearGradient002, TestSize.Level1)
128 {
129 Point startPt;
130 Point endPt;
131 std::vector<Color4f> color;
132 color.push_back({0.1, 0.1, 0.1, 1.0f});
133 std::vector<scalar> pos { 30.0f };
134 std::shared_ptr<ColorSpace> colorSpace = std::make_shared<ColorSpace>();
135 SkiaShaderEffect skiaShaderEffect;
136 skiaShaderEffect.InitWithLinearGradient(startPt, endPt, color, colorSpace, pos, TileMode::MIRROR, nullptr);
137 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
138 SkiaShaderEffect skiaShaderEffect2;
139 skiaShaderEffect2.InitWithLinearGradient(startPt, endPt, color, nullptr, pos, TileMode::MIRROR, nullptr);
140 EXPECT_TRUE(skiaShaderEffect2.GetShader() != nullptr);
141 color.clear();
142 SkiaShaderEffect skiaShaderEffect3;
143 skiaShaderEffect3.InitWithLinearGradient(startPt, endPt, color, nullptr, pos, TileMode::MIRROR, nullptr);
144 EXPECT_TRUE(skiaShaderEffect3.GetShader() == nullptr);
145 }
146
147 /**
148 * @tc.name: InitWithRadialGradient001
149 * @tc.desc:
150 * @tc.type: FUNC
151 * @tc.author:
152 */
153 HWTEST_F(SkiaShaderEffectTest, InitWithRadialGradient001, TestSize.Level1)
154 {
155 Point centerPt;
156 scalar radius = 15.0f;
157 ColorQuad colorQuad = 30;
158 std::vector<ColorQuad> color { colorQuad };
159 std::vector<scalar> pos { 16.0f };
160 SkiaShaderEffect skiaShaderEffect;
161 skiaShaderEffect.InitWithRadialGradient(centerPt, radius, color, pos, TileMode::REPEAT, nullptr);
162 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
163 }
164
165 /**
166 * @tc.name: InitWithRadialGradient002
167 * @tc.desc:
168 * @tc.type: FUNC
169 * @tc.author:
170 */
171 HWTEST_F(SkiaShaderEffectTest, InitWithRadialGradient002, TestSize.Level1)
172 {
173 Point centerPt;
174 scalar radius = 15.0f;
175 std::vector<Color4f> color;
176 color.push_back({0.1, 0.1, 0.1, 1.0f});
177 std::vector<scalar> pos { 16.0f };
178 std::shared_ptr<ColorSpace> colorSpace = std::make_shared<ColorSpace>();
179 SkiaShaderEffect skiaShaderEffect;
180 skiaShaderEffect.InitWithRadialGradient(centerPt, radius, color, colorSpace, pos, TileMode::REPEAT, nullptr);
181 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
182 SkiaShaderEffect skiaShaderEffect2;
183 skiaShaderEffect2.InitWithRadialGradient(centerPt, radius, color, nullptr, pos, TileMode::REPEAT, nullptr);
184 EXPECT_TRUE(skiaShaderEffect2.GetShader() != nullptr);
185 color.clear();
186 SkiaShaderEffect skiaShaderEffect3;
187 skiaShaderEffect3.InitWithRadialGradient(centerPt, radius, color, nullptr, pos, TileMode::REPEAT, nullptr);
188 EXPECT_TRUE(skiaShaderEffect3.GetShader() == nullptr);
189 }
190
191 /**
192 * @tc.name: InitWithTwoPointConical001
193 * @tc.desc:
194 * @tc.type: FUNC
195 * @tc.author:
196 */
197 HWTEST_F(SkiaShaderEffectTest, InitWithTwoPointConical001, TestSize.Level1)
198 {
199 Point startPt;
200 scalar startRadius = 10.0f;
201 Point endPt;
202 scalar endRadius = 25.0f;
203 ColorQuad colorQuad = 15;
204 std::vector<ColorQuad> color { colorQuad };
205 std::vector<scalar> pos { 30.0f };
206 SkiaShaderEffect skiaShaderEffect;
207 Matrix matrix;
208 skiaShaderEffect.InitWithTwoPointConical(startPt, startRadius, endPt, endRadius, color, pos, TileMode::CLAMP,
209 &matrix);
210 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
211 }
212
213 /**
214 * @tc.name: InitWithTwoPointConical002
215 * @tc.desc:
216 * @tc.type: FUNC
217 * @tc.author:
218 */
219 HWTEST_F(SkiaShaderEffectTest, InitWithTwoPointConical002, TestSize.Level1)
220 {
221 Point startPt;
222 scalar startRadius = 10.0f;
223 Point endPt;
224 scalar endRadius = 25.0f;
225 std::vector<Color4f> color;
226 color.push_back({0.1, 0.1, 0.1, 1.0f});
227 std::vector<scalar> pos { 30.0f };
228 SkiaShaderEffect skiaShaderEffect;
229 std::shared_ptr<ColorSpace> colorSpace = std::make_shared<ColorSpace>();
230 Matrix matrix;
231 skiaShaderEffect.InitWithTwoPointConical(startPt, startRadius, endPt, endRadius, color, colorSpace, pos,
232 TileMode::CLAMP, &matrix);
233 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
234 SkiaShaderEffect skiaShaderEffect2;
235 skiaShaderEffect2.InitWithTwoPointConical(startPt, startRadius, endPt, endRadius, color, nullptr, pos,
236 TileMode::CLAMP, &matrix);
237 EXPECT_TRUE(skiaShaderEffect2.GetShader() != nullptr);
238 color.clear();
239 SkiaShaderEffect skiaShaderEffect3;
240 skiaShaderEffect3.InitWithTwoPointConical(startPt, startRadius, endPt, endRadius, color, nullptr, pos,
241 TileMode::CLAMP, &matrix);
242 EXPECT_TRUE(skiaShaderEffect3.GetShader() == nullptr);
243 }
244
245 /**
246 * @tc.name: InitWithSweepGradient001
247 * @tc.desc:
248 * @tc.type: FUNC
249 * @tc.author:
250 */
251 HWTEST_F(SkiaShaderEffectTest, InitWithSweepGradient001, TestSize.Level1)
252 {
253 Point centerPt;
254 ColorQuad colorQuad = 10;
255 std::vector<ColorQuad> color { colorQuad };
256 std::vector<scalar> pos { 30.0f };
257 scalar startAngle = 45.0f;
258 scalar endAngle = 60.0f;
259 SkiaShaderEffect skiaShaderEffect;
260 skiaShaderEffect.InitWithSweepGradient(centerPt, color, pos, TileMode::MIRROR, startAngle, endAngle, nullptr);
261 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
262 }
263
264 /**
265 * @tc.name: InitWithSweepGradient002
266 * @tc.desc:
267 * @tc.type: FUNC
268 * @tc.author:
269 */
270 HWTEST_F(SkiaShaderEffectTest, InitWithSweepGradient002, TestSize.Level1)
271 {
272 Point centerPt;
273 std::vector<Color4f> color;
274 color.push_back({0.1, 0.1, 0.1, 1.0f});
275 std::vector<scalar> pos { 30.0f };
276 scalar startAngle = 45.0f;
277 scalar endAngle = 60.0f;
278 SkiaShaderEffect skiaShaderEffect;
279 std::shared_ptr<ColorSpace> colorSpace = std::make_shared<ColorSpace>();
280 skiaShaderEffect.InitWithSweepGradient(centerPt, color, colorSpace, pos, TileMode::MIRROR, startAngle, endAngle,
281 nullptr);
282 EXPECT_TRUE(skiaShaderEffect.GetShader() != nullptr);
283 SkiaShaderEffect skiaShaderEffect2;
284 skiaShaderEffect2.InitWithSweepGradient(centerPt, color, nullptr, pos, TileMode::MIRROR, startAngle, endAngle,
285 nullptr);
286 EXPECT_TRUE(skiaShaderEffect2.GetShader() != nullptr);
287 color.clear();
288 SkiaShaderEffect skiaShaderEffect3;
289 skiaShaderEffect3.InitWithSweepGradient(centerPt, color, nullptr, pos, TileMode::MIRROR, startAngle, endAngle,
290 nullptr);
291 EXPECT_TRUE(skiaShaderEffect3.GetShader() == nullptr);
292 }
293
294 /**
295 * @tc.name: Serialize001
296 * @tc.desc: Test Serialize
297 * @tc.type: FUNC
298 * @tc.require: I91EH1
299 */
300 HWTEST_F(SkiaShaderEffectTest, Serialize001, TestSize.Level1)
301 {
302 SkiaShaderEffect skiaShaderEffect;
303 auto shader1 = skiaShaderEffect.GetShader();
304 EXPECT_TRUE(shader1 == nullptr);
305 skiaShaderEffect.Serialize();
306 auto shader2 = skiaShaderEffect.GetShader();
307 EXPECT_TRUE(shader2 == nullptr);
308 }
309
310 } // namespace Drawing
311 } // namespace Rosen
312 } // namespace OHOS