• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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