1 /*
2 * Copyright (c) 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, 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 <gtest/gtest.h>
17
18 #include "ge_shader_filter_params.h"
19 #include "ge_visual_effect.h"
20 #include "ge_visual_effect_impl.h"
21
22 using namespace testing;
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Rosen {
27 namespace Drawing {
28
29 class GEVisualEffectTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp() override;
34 void TearDown() override;
35 };
36
SetUpTestCase(void)37 void GEVisualEffectTest::SetUpTestCase(void) {}
38
TearDownTestCase(void)39 void GEVisualEffectTest::TearDownTestCase(void) {}
40
SetUp()41 void GEVisualEffectTest::SetUp() {}
42
TearDown()43 void GEVisualEffectTest::TearDown() {}
44
45 /**
46 * @tc.name: SetParam_001
47 * @tc.desc: Verify the SetParam
48 * @tc.type: FUNC
49 */
50 HWTEST_F(GEVisualEffectTest, SetParam_001, TestSize.Level1)
51 {
52 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_001 start";
53
54 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR);
55 visualEffect->visualEffectImpl_->kawaseParams_ = std::make_shared<GEKawaseBlurShaderFilterParams>();
56 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::KAWASE_BLUR;
57 visualEffect->SetParam(GE_FILTER_KAWASE_BLUR_RADIUS, 1);
58 EXPECT_EQ(visualEffect->visualEffectImpl_->kawaseParams_->radius, 1);
59
60 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_001 end";
61 }
62
63 /**
64 * @tc.name: SetParam_002
65 * @tc.desc: Verify the SetParam
66 * @tc.type: FUNC
67 */
68 HWTEST_F(GEVisualEffectTest, SetParam_002, TestSize.Level1)
69 {
70 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_002 start";
71
72 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR);
73 visualEffect->visualEffectImpl_->kawaseParams_ = std::make_shared<GEKawaseBlurShaderFilterParams>();
74 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::KAWASE_BLUR;
75 visualEffect->SetParam(GE_FILTER_KAWASE_BLUR_RADIUS, static_cast<double>(1));
76 EXPECT_NE(visualEffect->visualEffectImpl_->kawaseParams_->radius, 1);
77
78 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_002 end";
79 }
80
81 /**
82 * @tc.name: SetParam_003
83 * @tc.desc: Verify the SetParam
84 * @tc.type: FUNC
85 */
86 HWTEST_F(GEVisualEffectTest, SetParam_003, TestSize.Level1)
87 {
88 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_003 start";
89
90 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR);
91 visualEffect->visualEffectImpl_->kawaseParams_ = std::make_shared<GEKawaseBlurShaderFilterParams>();
92 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::KAWASE_BLUR;
93 visualEffect->SetParam(GE_FILTER_KAWASE_BLUR_RADIUS, static_cast< const char* const>("1"));
94 EXPECT_NE(visualEffect->visualEffectImpl_->kawaseParams_->radius, 1);
95
96 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_003 end";
97 }
98
99 /**
100 * @tc.name: SetParam_004
101 * @tc.desc: Verify the SetParam
102 * @tc.type: FUNC
103 */
104 HWTEST_F(GEVisualEffectTest, SetParam_004, TestSize.Level1)
105 {
106 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_004 start";
107
108 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR);
109 visualEffect->visualEffectImpl_->kawaseParams_ = std::make_shared<GEKawaseBlurShaderFilterParams>();
110 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::KAWASE_BLUR;
111 visualEffect->SetParam(GE_FILTER_KAWASE_BLUR_RADIUS, static_cast<int64_t>(1));
112 EXPECT_NE(visualEffect->visualEffectImpl_->kawaseParams_->radius, 1);
113
114 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_004 end";
115 }
116
117 /**
118 * @tc.name: SetParam_005
119 * @tc.desc: Verify the SetParam
120 * @tc.type: FUNC
121 */
122 HWTEST_F(GEVisualEffectTest, SetParam_005, TestSize.Level1)
123 {
124 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_005 start";
125
126 std::pair<float, float> factor = {0.5f, 0.5f};
127 auto visualEffect = std::make_shared<GEVisualEffect>(GE_MASK_RIPPLE);
128 visualEffect->visualEffectImpl_->rippleMaskParams_ = std::make_shared<GERippleShaderMaskParams>();
129 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::RIPPLE_MASK;
130 visualEffect->SetParam(GE_MASK_RIPPLE_CENTER, factor);
131 EXPECT_EQ(visualEffect->visualEffectImpl_->rippleMaskParams_->center_, factor);
132
133 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_005 end";
134 }
135
136 /**
137 * @tc.name: SetParam_006
138 * @tc.desc: Verify the SetParam
139 * @tc.type: FUNC
140 */
141 HWTEST_F(GEVisualEffectTest, SetParam_006, TestSize.Level1)
142 {
143 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_006 start";
144 constexpr size_t BEZIER_WARP_POINT_NUM = 12; // 12 anchor points of a patch
145 std::array<Drawing::Point, BEZIER_WARP_POINT_NUM> points = {{
146 {1.0f, 2.0f},
147 {3.0f, 4.0f},
148 {5.0f, 6.0f},
149 {7.0f, 8.0f},
150 {9.0f, 10.0f},
151 {11.0f, 12.0f},
152 {13.0f, 14.0f},
153 {15.0f, 16.0f},
154 {17.0f, 18.0f},
155 {19.0f, 20.0f},
156 {21.0f, 22.0f},
157 {23.0f, 24.0f}
158 }};
159 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_BEZIER_WARP);
160 visualEffect->visualEffectImpl_->bezierWarpParams_ = std::make_shared<GEBezierWarpShaderFilterParams>();
161 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::BEZIER_WARP;
162 visualEffect->SetParam(GE_FILTER_BEZIER_WARP_DESTINATION_PATCH, points);
163 EXPECT_EQ(visualEffect->visualEffectImpl_->bezierWarpParams_->destinationPatch, points);
164
165 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_006 end";
166 }
167
168 /**
169 * @tc.name: SetParam_007
170 * @tc.desc: Verify the SetParam Vector3f Vector4f
171 * @tc.type: FUNC
172 */
173 HWTEST_F(GEVisualEffectTest, SetParam_007, TestSize.Level1)
174 {
175 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_007 start";
176
177 auto visualEffect = std::make_shared<GEVisualEffect>(GE_FILTER_CONTENT_LIGHT);
178 visualEffect->visualEffectImpl_->MakeContentLightParams();
179 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::CONTENT_LIGHT;
180
181 Vector3f lightPosition = Vector3f(0.0f, 0.f, 0.0f);
182 visualEffect->SetParam(GE_FILTER_CONTENT_LIGHT_POSITION, lightPosition);
183 bool ret = visualEffect->visualEffectImpl_->contentLightParams_->position == lightPosition;
184 EXPECT_TRUE(ret);
185
186 Vector4f lightColor = Vector4f(0.2f, 0.4f, 0.6f, 0.5f);
187 visualEffect->SetParam(GE_FILTER_CONTENT_LIGHT_COLOR, lightColor);
188 ret = visualEffect->visualEffectImpl_->contentLightParams_->color == lightColor;
189 EXPECT_TRUE(ret);
190
191 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_007 end";
192 }
193
194 /**
195 * @tc.name: GetCanvasInfo_001
196 * @tc.desc: Verify the GetCanvasInfo
197 * @tc.type: FUNC
198 */
199 HWTEST_F(GEVisualEffectTest, GetCanvasInfo_001, TestSize.Level1)
200 {
201 GTEST_LOG_(INFO) << "GEVisualEffectTest GetCanvasInfo_001 start";
202
203 auto visualEffect1 = std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR);
204 Drawing::CanvasInfo canvasInfo1 = visualEffect1->GetCanvasInfo();
205 EXPECT_FLOAT_EQ(canvasInfo1.geoWidth, 0.0f);
206 EXPECT_FLOAT_EQ(canvasInfo1.geoHeight, 0.0f);
207 EXPECT_FLOAT_EQ(canvasInfo1.tranX, 0.0f);
208 EXPECT_FLOAT_EQ(canvasInfo1.tranY, 0.0f);
209
210 Drawing::Matrix matrix = Drawing::Matrix();
211 matrix.SetMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9);
212 Drawing::CanvasInfo canvasInfo2 = {100.0f, 100.0f, 1.0f, -1.0f, matrix};
213 auto visualEffect2 =
214 std::make_shared<GEVisualEffect>(GE_FILTER_KAWASE_BLUR, Drawing::DrawingPaintType::BRUSH, canvasInfo2);
215 Drawing::CanvasInfo canvasInfo3 = visualEffect2->GetCanvasInfo();
216 EXPECT_FLOAT_EQ(canvasInfo3.geoWidth, canvasInfo2.geoWidth);
217 EXPECT_FLOAT_EQ(canvasInfo3.geoHeight, canvasInfo2.geoHeight);
218 EXPECT_FLOAT_EQ(canvasInfo3.tranX, canvasInfo2.tranX);
219 EXPECT_FLOAT_EQ(canvasInfo3.tranY, canvasInfo2.tranY);
220
221 GTEST_LOG_(INFO) << "GEVisualEffectTest GetCanvasInfo_001 end";
222 }
223
224 /**
225 * @tc.name: SetParam_008
226 * @tc.desc: Verify the SetParam
227 * @tc.type: FUNC
228 */
229 HWTEST_F(GEVisualEffectTest, SetParam_008, TestSize.Level1)
230 {
231 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_008 start";
232
233 std::pair<float, float> factor = {0.5f, 0.5f};
234 auto visualEffect = std::make_shared<GEVisualEffect>(GE_MASK_WAVE_GRADIENT);
235 visualEffect->visualEffectImpl_->waveGradientMaskParams_ = std::make_shared<GEWaveGradientShaderMaskParams>();
236 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::WAVE_GRADIENT_MASK;
237 visualEffect->SetParam(GE_MASK_WAVE_GRADIENT_CENTER, factor);
238 EXPECT_EQ(visualEffect->visualEffectImpl_->waveGradientMaskParams_->center_, factor);
239
240 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_008 end";
241 }
242
243 /**
244 * @tc.name: SetParam_009
245 * @tc.desc: Verify the SetParam Vector2f
246 * @tc.type: FUNC
247 */
248 HWTEST_F(GEVisualEffectTest, SetParam_009, TestSize.Level1)
249 {
250 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_009 start";
251
252 std::pair<float, float> factor = {0.5f, 0.5f};
253 auto visualEffect = std::make_shared<GEVisualEffect>(GE_MASK_DOUBLE_RIPPLE);
254 visualEffect->visualEffectImpl_->doubleRippleMaskParams_ = std::make_shared<GEDoubleRippleShaderMaskParams>();
255 visualEffect->visualEffectImpl_->filterType_ = GEVisualEffectImpl::FilterType::DOUBLE_RIPPLE_MASK;
256 visualEffect->SetParam(GE_MASK_DOUBLE_RIPPLE_CENTER1, factor);
257 EXPECT_EQ(visualEffect->visualEffectImpl_->doubleRippleMaskParams_->center1_, factor);
258 visualEffect->SetParam(GE_MASK_DOUBLE_RIPPLE_CENTER2, factor);
259 EXPECT_EQ(visualEffect->visualEffectImpl_->doubleRippleMaskParams_->center2_, factor);
260
261 GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_009 end";
262 }
263 } // namespace Drawing
264 } // namespace Rosen
265 } // namespace OHOS
266