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 #include <memory>
16
17 #include "gtest/gtest.h"
18
19 #define private public
20 #define protected public
21
22 #include "test/unittest/core/rosen/rosen_render_context_test.h"
23 #undef private
24 #undef protected
25
26 using namespace testing;
27 using namespace testing::ext;
28
29 namespace OHOS::Ace::NG {
30 namespace {
31 const char* SRC_JPG = "file://data/data/com.example.test/res/exampleAlt.jpg";
32
33 } // namespace
34
SetUp()35 void RosenRenderContextTest::SetUp()
36 {
37 MockPipelineContext::SetUp();
38 MockContainer::SetUp();
39 }
40
TearDown()41 void RosenRenderContextTest::TearDown()
42 {
43 MockPipelineContext::TearDown();
44 MockContainer::TearDown();
45 }
46
InitRosenRenderContext(const RefPtr<FrameNode> & frameNode)47 RefPtr<RosenRenderContext> RosenRenderContextTest::InitRosenRenderContext(const RefPtr<FrameNode>& frameNode)
48 {
49 auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
50 RenderContext::ContextParam contextParam;
51 contextParam.type = RenderContext::ContextType::CANVAS;
52 contextParam.surfaceName.emplace("test");
53 std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
54 rosenRenderContext->InitContext(false, contextParamValue);
55 rosenRenderContext->SetHostNode(frameNode);
56 return rosenRenderContext;
57 }
58
59 /**
60 * @tc.name: RosenRenderContextTest001
61 * @tc.desc: SetPivot().
62 * @tc.type: FUNC
63 */
64 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest001, TestSize.Level1)
65 {
__anon54a3be8d0202() 66 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
67 auto rosenRenderContext = InitRosenRenderContext(frameNode);
68 float xPivot = 10.0;
69 float yPivot = 10.0;
70 float zPivot = 10.0;
71 rosenRenderContext->SetPivot(xPivot, yPivot, zPivot);
72 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 10.0);
73 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 10.0);
74 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 10.0);
75 xPivot = 5.0;
76 rosenRenderContext->SetPivot(xPivot, yPivot, zPivot);
77 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 5.0);
78 }
79
80 /**
81 * @tc.name: RosenRenderContextTest002
82 * @tc.desc: SetTransitionPivot().
83 * @tc.type: FUNC
84 */
85 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest002, TestSize.Level1)
86 {
__anon54a3be8d0302() 87 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
88 auto rosenRenderContext = InitRosenRenderContext(frameNode);
89 rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
90 ScaleOptions scaleOptions;
91 scaleOptions.centerX = CalcDimension(50.0, DimensionUnit::PX);
92 scaleOptions.centerY = CalcDimension(50.0, DimensionUnit::PX);
93 rosenRenderContext->GetOrCreateTransitionAppearing()->UpdateScale(scaleOptions);
94 rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
95 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 0.5);
96 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 0.5);
97 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 0);
98 RotateOptions rotateOptions;
99 rotateOptions.centerX = CalcDimension(50.0, DimensionUnit::PX);
100 rotateOptions.centerY = CalcDimension(50.0, DimensionUnit::PX);
101 rotateOptions.centerZ = CalcDimension(50.0, DimensionUnit::PX);
102 rosenRenderContext->GetOrCreateTransitionAppearing()->UpdateRotate(rotateOptions);
103 rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
104 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 0.5);
105 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 0.5);
106 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 50.0);
107 }
108
109 /**
110 * @tc.name: RosenRenderContextTest003
111 * @tc.desc: SetSandBox().
112 * @tc.type: FUNC
113 */
114 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest003, TestSize.Level1)
115 {
__anon54a3be8d0402() 116 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
117 auto rosenRenderContext = InitRosenRenderContext(frameNode);
118 std::optional<OffsetF> parentPosition = std::make_optional(OffsetF(100.0, 100.0));
119 rosenRenderContext->SetSandBox(parentPosition, false);
120 EXPECT_EQ(rosenRenderContext->sandBoxCount_, 1);
121 rosenRenderContext->SetSandBox(parentPosition, true);
122 EXPECT_EQ(rosenRenderContext->sandBoxCount_, 1);
123 rosenRenderContext->SetSandBox(std::nullopt, true);
124 EXPECT_EQ(rosenRenderContext->sandBoxCount_, 0);
125 rosenRenderContext->sandBoxCount_ = 2;
126 rosenRenderContext->SetSandBox(std::nullopt, true);
127 EXPECT_EQ(rosenRenderContext->sandBoxCount_, 0);
128 }
129
130 /**
131 * @tc.name: RosenRenderContextTest004
132 * @tc.desc: SetFrameWithoutAnimation().
133 * @tc.type: FUNC
134 */
135 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest004, TestSize.Level1)
136 {
__anon54a3be8d0502() 137 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
138 auto rosenRenderContext = InitRosenRenderContext(frameNode);
139 RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
140 rosenRenderContext->SetFrameWithoutAnimation(paintRect);
141 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
142 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
143 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
144 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
145 }
146
147 /**
148 * @tc.name: RosenRenderContextTest005
149 * @tc.desc: SyncGeometryFrame().
150 * @tc.type: FUNC
151 */
152 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest005, TestSize.Level1)
153 {
__anon54a3be8d0602() 154 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
155 auto rosenRenderContext = InitRosenRenderContext(frameNode);
156 RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
157 rosenRenderContext->SyncGeometryFrame(paintRect);
158 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
159 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
160 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
161 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
162 rosenRenderContext->SyncGeometryFrame(paintRect);
163 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[0], paintRect.GetX());
164 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[1], paintRect.GetY());
165 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[2], paintRect.Width());
166 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[3], paintRect.Height());
167 }
168
169 /**
170 * @tc.name: RosenRenderContextTest006
171 * @tc.desc: SetChildBounds().
172 * @tc.type: FUNC
173 */
174 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest006, TestSize.Level1)
175 {
__anon54a3be8d0702() 176 auto hostNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
177 auto rosenRenderContext = InitRosenRenderContext(hostNode);
178 RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
179 rosenRenderContext->SetChildBounds(paintRect);
180 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetChildren().size(), 0);
181 auto rosenRenderContextChild = AceType::MakeRefPtr<RosenRenderContext>();
182 RenderContext::ContextParam contextParam;
183 contextParam.type = RenderContext::ContextType::CANVAS;
184 contextParam.surfaceName.emplace("test1");
185 std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
186 rosenRenderContextChild->InitContext(false, contextParamValue);
__anon54a3be8d0802() 187 auto frameNode = FrameNode::GetOrCreateFrameNode("child", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
188 rosenRenderContextChild->SetHostNode(frameNode);
189 rosenRenderContext->AddChild(rosenRenderContextChild, 10);
190 rosenRenderContext->SetChildBounds(paintRect);
191 EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[0], 0.0);
192 EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[1], 0.0);
193 EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[2], paintRect.Width());
194 EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[3], paintRect.Height());
195 }
196
197 /**
198 * @tc.name: RosenRenderContextTest008
199 * @tc.desc: OnForegroundEffectUpdate().
200 * @tc.type: FUNC
201 */
202 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest008, TestSize.Level1)
203 {
__anon54a3be8d0902() 204 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
205 auto rosenRenderContext = InitRosenRenderContext(frameNode);
206 rosenRenderContext->OnForegroundEffectUpdate(1.0f);
207 EXPECT_TRUE(rosenRenderContext->GetRSNode()->GetStagingProperties().GetForegroundEffectRadius() - 1.0 < 1);
208 }
209
210 /**
211 * @tc.name: RosenRenderContextTest011
212 * @tc.desc: SyncGeometryFrame().
213 * @tc.type: FUNC
214 */
215 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest011, TestSize.Level1)
216 {
__anon54a3be8d0a02() 217 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
218 auto rosenRenderContext = InitRosenRenderContext(frameNode);
219 rosenRenderContext->OnOpacityUpdate(10.0);
220 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetAlpha(), 10.0);
221 }
222
223 /**
224 * @tc.name: RosenRenderContextTest012
225 * @tc.desc: ConvertDimensionToScaleBySize().
226 * @tc.type: FUNC
227 */
228 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest012, TestSize.Level1)
229 {
230 Dimension dimension;
231 dimension.SetUnit(DimensionUnit::FP);
232 float size = 100.0;
233 float ret = RosenRenderContext::ConvertDimensionToScaleBySize(dimension, size);
234 EXPECT_EQ(ret == 0.5f, false);
235 dimension.SetUnit(DimensionUnit::PERCENT);
236 float ret2 = RosenRenderContext::ConvertDimensionToScaleBySize(dimension, size);
237 EXPECT_EQ(ret2 == 0.0f, true);
238 }
239
240 /**
241 * @tc.name: RosenRenderContextTest013
242 * @tc.desc: OnNodeAppear().
243 * @tc.type: FUNC
244 */
245 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest013, TestSize.Level1)
246 {
__anon54a3be8d0b02() 247 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
248 auto rosenRenderContext = InitRosenRenderContext(frameNode);
249 // recursive is false
250 rosenRenderContext->OnNodeAppear(false);
251 EXPECT_TRUE(rosenRenderContext->firstTransitionIn_);
252 // OnNodeAppear() recursive is true
253 rosenRenderContext->OnNodeAppear(true);
254 EXPECT_FALSE(rosenRenderContext->isDisappearing_);
255 }
256
257 /**
258 * @tc.name: RosenRenderContextTest014
259 * @tc.desc: CreateHardwareSurface().
260 * @tc.type: FUNC
261 */
262 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest014, TestSize.Level1)
263 {
__anon54a3be8d0c02() 264 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
265 auto rosenRenderContext = InitRosenRenderContext(frameNode);
266 std::optional<RenderContext::ContextParam> param = std::make_optional(RenderContext::ContextParam());
267 bool isTextureExportNode = true;
268 std::shared_ptr<Rosen::RSNode> ret = rosenRenderContext->CreateHardwareSurface(param, isTextureExportNode);
269 EXPECT_FALSE(ret == nullptr);
270 }
271
272 /**
273 * @tc.name: RosenRenderContextTest015
274 * @tc.desc: SyncGeometryProperties().
275 * @tc.type: FUNC
276 */
277 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest015, TestSize.Level1)
278 {
__anon54a3be8d0d02() 279 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
280 auto rosenRenderContext = InitRosenRenderContext(frameNode);
281 RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
282 rosenRenderContext->SyncGeometryProperties(paintRect);
283 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
284 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
285 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
286 EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
287 }
288
289 /**
290 * @tc.name: RosenRenderContextTest017
291 * @tc.desc: OnBackgroundImageUpdate().
292 * @tc.type: FUNC
293 */
294 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest017, TestSize.Level1)
295 {
__anon54a3be8d0e02() 296 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
297 auto rosenRenderContext = InitRosenRenderContext(frameNode);
298 // Src null,pixmap null
299 ImageSourceInfo src;
300 rosenRenderContext->OnBackgroundImageUpdate(src);
301 EXPECT_EQ(rosenRenderContext->bgImage_, nullptr);
302 EXPECT_EQ(rosenRenderContext->bgLoadingCtx_, nullptr);
303 // Src null,pixmap not null
304 RefPtr<PixelMap> pixmap;
305 std::optional<Color> fillColor = std::make_optional(Color::BLACK);
306 src.SetPixMap(pixmap, fillColor);
307 rosenRenderContext->OnBackgroundImageUpdate(src);
308 EXPECT_TRUE(rosenRenderContext->bgImage_ == nullptr);
309 EXPECT_TRUE(rosenRenderContext->bgLoadingCtx_ == nullptr);
310 // Src not null,pixmap null
311 src.SetSrc("test");
312 rosenRenderContext->OnBackgroundImageUpdate(src);
313 EXPECT_TRUE(rosenRenderContext->bgImage_ == nullptr);
314 EXPECT_TRUE(rosenRenderContext->bgLoadingCtx_ != nullptr);
315 }
316
317 /**
318 * @tc.name: RosenRenderContextTest019
319 * @tc.desc: OnParticleOptionArrayUpdate()
320 * @tc.type: FUNC
321 */
322 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest019, TestSize.Level1)
323 {
324 auto frameNode =
__anon54a3be8d0f02() 325 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
326 auto rosenRenderContext = InitRosenRenderContext(frameNode);
327 std::list<ParticleOption> optionList;
328 rosenRenderContext->OnParticleOptionArrayUpdate(optionList);
329 EXPECT_FALSE(rosenRenderContext->particleAnimationPlaying_);
330 rosenRenderContext->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, 1.0f);
331 rosenRenderContext->OnParticleOptionArrayUpdate(optionList);
332 EXPECT_TRUE(rosenRenderContext->particleAnimationPlaying_);
__anon54a3be8d1002() 333 auto frameNode2 = FrameNode::GetOrCreateFrameNode("parent", -1, []() {
334 auto pattern = AceType::MakeRefPtr<ParticlePattern>(1);
335 pattern->SetHaveUnVisibleParent(true);
336 return pattern;
337 });
338 auto rosenRenderContext2 = InitRosenRenderContext(frameNode2);
339 rosenRenderContext2->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, 1.0f);
340 rosenRenderContext2->OnParticleOptionArrayUpdate(optionList);
341 EXPECT_FALSE(rosenRenderContext2->particleAnimationPlaying_);
342 }
343
344 /**
345 * @tc.name: RosenRenderContextTest020
346 * @tc.desc: OnParticleOptionArrayUpdate()
347 * @tc.type: FUNC
348 */
349 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest020, TestSize.Level1)
350 {
351 auto frameNode =
__anon54a3be8d1102() 352 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
353 auto rosenRenderContext = InitRosenRenderContext(frameNode);
354 // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
355 ParticleOption particleOption;
356 RectF rectF;
357 EmitterOption emitter;
358 Particle particle;
359 particle.SetLifeTime(0.0f);
360 particle.SetLifeTimeRange(1.0f);
361 emitter.SetParticle(particle);
362 particleOption.SetEmitterOption(emitter);
363 OHOS::Rosen::ParticleParams ret = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
364 EXPECT_EQ(ret.velocity_.velocityAngle_.start_, 0.0f);
365 EXPECT_EQ(ret.velocity_.velocityAngle_.end_, 0.0f);
366 // SetLifeTime 0.0f,SetLifeTimeRange 1.0f
367 Particle particle2;
368 particle2.SetLifeTime(-1.0f);
369 particle2.SetLifeTimeRange(1.0f);
370 emitter.SetParticle(particle2);
371 particleOption.SetEmitterOption(emitter);
372 OHOS::Rosen::ParticleParams ret2 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
373 EXPECT_EQ(ret2.velocity_.velocityAngle_.start_, 0.0f);
374 EXPECT_EQ(ret2.velocity_.velocityAngle_.end_, 0.0f);
375 // SetLifeTime 1.0f,SetLifeTimeRange 0.5f
376 Particle particle3;
377 particle3.SetLifeTime(1);
378 particle3.SetLifeTimeRange(0);
379 particle3.SetParticleType(ParticleType::IMAGE);
380 ParticleConfig config;
381 ImageParticleParameter imageParam;
382 ImageFit imageFit = ImageFit::FILL;
383 imageParam.SetImageFit(imageFit);
384 config.SetImageParticleParameter(imageParam);
385 particle3.SetConfig(config);
386 emitter.SetParticle(particle3);
387 particleOption.SetEmitterOption(emitter);
388 OHOS::Rosen::ParticleParams ret3 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
389 EXPECT_EQ(ret3.velocity_.velocityAngle_.start_, 0.0f);
390 EXPECT_EQ(ret3.velocity_.velocityAngle_.end_, 0.0f);
391 }
392
393 /**
394 * @tc.name: RosenRenderContextTest021
395 * @tc.desc: OnParticleOptionArrayUpdate()-2
396 * @tc.type: FUNC
397 */
398 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest021, TestSize.Level1)
399 {
400 auto frameNode =
__anon54a3be8d1202() 401 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
402 auto rosenRenderContext = InitRosenRenderContext(frameNode);
403 // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
404 ParticleOption particleOption;
405 RectF rectF;
406 EmitterOption emitter;
407 Particle particle;
408 particle.SetLifeTime(0.0f);
409 particle.SetLifeTimeRange(1.0f);
410 emitter.SetParticle(particle);
411 particleOption.SetEmitterOption(emitter);
412 // particleColorPropertyOption assign value
413 ParticleColorPropertyOption particleColorPropertyOption;
414 particleOption.SetParticleColorOption(particleColorPropertyOption);
415 OHOS::Rosen::ParticleParams ret4 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
416 EXPECT_EQ(ret4.color_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
417 ParticleColorPropertyUpdater colorUpdater;
418 colorUpdater.SetUpdateType(UpdaterType::RANDOM);
419 particleColorPropertyOption.SetUpdater(colorUpdater);
420 particleOption.SetParticleColorOption(particleColorPropertyOption);
421 OHOS::Rosen::ParticleParams ret5 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
422 EXPECT_EQ(ret5.color_.updator_, OHOS::Rosen::ParticleUpdator::RANDOM);
423 colorUpdater.SetUpdateType(UpdaterType::CURVE);
424 particleColorPropertyOption.SetUpdater(colorUpdater);
425 particleOption.SetParticleColorOption(particleColorPropertyOption);
426 OHOS::Rosen::ParticleParams ret6 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
427 EXPECT_EQ(ret6.color_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
428 // ParticleFloatPropertyOption assign value
429 ParticleFloatPropertyOption particleFloatPropertyOption;
430 particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
431 OHOS::Rosen::ParticleParams ret7 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
432 EXPECT_EQ(ret7.opacity_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
433 ParticleFloatPropertyUpdater particleFloatPropertyUpdater;
434 particleFloatPropertyUpdater.SetUpdaterType(UpdaterType::RANDOM);
435 particleFloatPropertyOption.SetUpdater(particleFloatPropertyUpdater);
436 particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
437 OHOS::Rosen::ParticleParams ret8 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
438 EXPECT_EQ(ret8.opacity_.updator_, OHOS::Rosen::ParticleUpdator::RANDOM);
439 particleFloatPropertyUpdater.SetUpdaterType(UpdaterType::CURVE);
440 particleFloatPropertyOption.SetUpdater(particleFloatPropertyUpdater);
441 particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
442 OHOS::Rosen::ParticleParams ret9 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
443 EXPECT_EQ(ret9.opacity_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
444 // scaleOptionOpt assing value,same as rsOpacityOpt
445 particleOption.SetParticleScaleOption(particleFloatPropertyOption);
446 OHOS::Rosen::ParticleParams ret10 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
447 EXPECT_EQ(ret10.scale_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
448 }
449
450 /**
451 * @tc.name: RosenRenderContextTest022
452 * @tc.desc: OnParticleOptionArrayUpdate()-3
453 * @tc.type: FUNC
454 */
455 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest022, TestSize.Level1)
456 {
457 auto frameNode =
__anon54a3be8d1302() 458 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
459 auto rosenRenderContext = InitRosenRenderContext(frameNode);
460 // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
461 ParticleOption particleOption;
462 RectF rectF;
463 EmitterOption emitter;
464 Particle particle;
465 particle.SetLifeTime(0.0f);
466 particle.SetLifeTimeRange(1.0f);
467 emitter.SetParticle(particle);
468 particleOption.SetEmitterOption(emitter);
469 // velocityOptionOpt assing value
470 VelocityProperty velocityProperty;
471 std::pair<float, float> range = std::make_pair(1.0f, 2.0f);
472 velocityProperty.SetSpeedRange(range);
473 velocityProperty.SetAngleRange(range);
474 particleOption.SetParticleVelocityOption(velocityProperty);
475 OHOS::Rosen::ParticleParams ret11 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
476 EXPECT_EQ(ret11.velocity_.velocityAngle_.end_, 2.0f);
477 // accelerationProperty assing value
478 AccelerationProperty accelerationProperty;
479 particleOption.SetParticleAccelerationOption(accelerationProperty);
480 OHOS::Rosen::ParticleParams ret12 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
481 EXPECT_EQ(ret12.acceleration_.accelerationAngle_.val_.end_, 0.0f);
482 EXPECT_EQ(ret12.acceleration_.accelerationValue_.val_.end_, 0.0f);
483 ParticleFloatPropertyOption particleFloatPropertyOption1;
484 particleFloatPropertyOption1.SetRange(range);
485 accelerationProperty.SetSpeed(particleFloatPropertyOption1);
486 accelerationProperty.SetAngle(particleFloatPropertyOption1);
487 particleOption.SetParticleAccelerationOption(accelerationProperty);
488 OHOS::Rosen::ParticleParams ret13 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
489 EXPECT_EQ(ret13.acceleration_.accelerationAngle_.val_.end_, 2.0f);
490 EXPECT_EQ(ret13.acceleration_.accelerationValue_.val_.end_, 2.0f);
491 // spinOption assing value
492 particleOption.SetParticleSpinOption(particleFloatPropertyOption1);
493 OHOS::Rosen::ParticleParams ret14 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
494 EXPECT_EQ(ret14.spin_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
495 }
496
497 /**
498 * @tc.name: RosenRenderContextTest023
499 * @tc.desc: OnDynamicRangeModeUpdate()
500 * @tc.type: FUNC
501 */
502 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest023, TestSize.Level1)
503 {
504 auto frameNode =
__anon54a3be8d1402() 505 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
506 auto rosenRenderContext = InitRosenRenderContext(frameNode);
507 // constrcuct params
508 DynamicRangeMode dynamicRangeMode = DynamicRangeMode::STANDARD;
509 rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
510 EXPECT_EQ(rosenRenderContext->isHdr_, false);
511 dynamicRangeMode = DynamicRangeMode::HIGH;
512 rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
513 EXPECT_EQ(rosenRenderContext->isHdr_, true);
514 rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
515 EXPECT_EQ(rosenRenderContext->isHdr_, false);
516 }
517
518 /**
519 * @tc.name: RosenRenderContextTest024
520 * @tc.desc: GetThumbnailPixelMap()
521 * @tc.type: FUNC
522 */
523 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest024, TestSize.Level1)
524 {
525 auto frameNode =
__anon54a3be8d1502() 526 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
527 auto rosenRenderContext = InitRosenRenderContext(frameNode);
528 // constrcuct params
529 RefPtr<PixelMap> ret = rosenRenderContext->GetThumbnailPixelMap(false);
530 EXPECT_EQ(Referenced::RawPtr(ret) == nullptr, true);
531 RefPtr<PixelMap> ret2 = rosenRenderContext->GetThumbnailPixelMap(true);
532 EXPECT_EQ(Referenced::RawPtr(ret) == nullptr, true);
533 }
534
535 /**
536 * @tc.name: RosenRenderContextTest025
537 * @tc.desc: MarshallTranslate()
538 * @tc.type: FUNC
539 */
540 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest025, TestSize.Level1)
541 {
542 auto frameNode =
__anon54a3be8d1602() 543 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
544 auto rosenRenderContext = InitRosenRenderContext(frameNode);
545 // constrcuct params
546 TranslateOptions translate;
547 Vector3F ret = rosenRenderContext->MarshallTranslate(translate);
548 EXPECT_EQ(ret.x, 0.0f);
549 EXPECT_EQ(ret.y, 0.0f);
550 EXPECT_EQ(ret.z, 0.0f);
551 CalcDimension x(1.0, DimensionUnit::PX);
552 CalcDimension y(1.0, DimensionUnit::PERCENT);
553 CalcDimension z(1.0, DimensionUnit::PX);
554 TranslateOptions translate1(x, y, z);
555 Vector3F ret2 = rosenRenderContext->MarshallTranslate(translate1);
556 EXPECT_EQ(ret2.x, 0.0f);
557 CalcDimension x2(1.0, DimensionUnit::PERCENT);
558 TranslateOptions translate2(x2, y, z);
559 Vector3F ret3 = rosenRenderContext->MarshallTranslate(translate2);
560 EXPECT_EQ(ret3.x, 0.0f);
561 }
562
563 /**
564 * @tc.name: RosenRenderContextTest026
565 * @tc.desc: GetPaintRectWithTransform()
566 * @tc.type: FUNC
567 */
568 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest026, TestSize.Level1)
569 {
570 auto frameNode =
__anon54a3be8d1702() 571 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
572 auto rosenRenderContext = InitRosenRenderContext(frameNode);
573 // constrcuct params
574 RectF ret = rosenRenderContext->GetPaintRectWithTransform();
575 EXPECT_EQ(ret.x_, 0.0f);
576 rosenRenderContext->GetRSNode()->SetRotation(2.0f);
577 RectF ret2 = rosenRenderContext->GetPaintRectWithTransform();
578 EXPECT_EQ(ret2.x_, 0.0f);
579 rosenRenderContext->GetRSNode()->SetRotation(90.0f);
580 RectF ret3 = rosenRenderContext->GetPaintRectWithTransform();
581 EXPECT_EQ(ret3.x_, 0.0f);
582 rosenRenderContext->GetRSNode()->SetRotation(180.0f);
583 RectF ret4 = rosenRenderContext->GetPaintRectWithTransform();
584 EXPECT_EQ(ret4.x_, 0.0f);
585 rosenRenderContext->GetRSNode()->SetRotation(270.0f);
586 RectF ret5 = rosenRenderContext->GetPaintRectWithTransform();
587 EXPECT_EQ(ret5.x_, 0.0f);
588 }
589
590 /**
591 * @tc.name: RosenRenderContextTest027
592 * @tc.desc: GetPaintRectWithTranslate()
593 * @tc.type: FUNC
594 */
595 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest027, TestSize.Level1)
596 {
597 auto frameNode =
__anon54a3be8d1802() 598 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
599 auto rosenRenderContext = InitRosenRenderContext(frameNode);
600 // constrcuct params
601 std::pair<RectF, bool> ret = rosenRenderContext->GetPaintRectWithTranslate();
602 EXPECT_EQ(ret.first.x_, 0.0f);
603 rosenRenderContext->GetRSNode()->SetRotation(90.0f);
604 std::pair<RectF, bool> ret2 = rosenRenderContext->GetPaintRectWithTranslate();
605 EXPECT_EQ(ret2.first.width_, -1.0f);
606 }
607
608 /**
609 * @tc.name: RosenRenderContextTest028
610 * @tc.desc: GetRevertMatrix()/GetMatrix()/GetMatrixWithTransformRotate()
611 * @tc.type: FUNC
612 */
613 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest028, TestSize.Level1)
614 {
615 auto frameNode =
__anon54a3be8d1902() 616 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
617 auto rosenRenderContext = InitRosenRenderContext(frameNode);
618 // constrcuct params
619 Matrix4 ret = rosenRenderContext->GetRevertMatrix();
620 EXPECT_EQ(ret(0, 0), 1.0f);
621 Matrix4 ret2 = rosenRenderContext->GetMatrix();
622 EXPECT_EQ(ret2(0, 0), 1.0f);
623 Matrix4 ret3 = rosenRenderContext->GetMatrixWithTransformRotate();
624 EXPECT_EQ(ret3(0, 0), 1.0f);
625 }
626
627 /**
628 * @tc.name: RosenRenderContextTest029
629 * @tc.desc: GetPointWithTransform()
630 * @tc.type: FUNC
631 */
632 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest029, TestSize.Level1)
633 {
634 auto frameNode =
__anon54a3be8d1a02() 635 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
636 auto rosenRenderContext = InitRosenRenderContext(frameNode);
637 // constrcuct params
638 PointF pointf;
639 rosenRenderContext->GetPointWithTransform(pointf);
640 EXPECT_EQ(pointf.x_, 0.0f);
641 rosenRenderContext->GetRSNode()->SetRotation(90.0f);
642 rosenRenderContext->GetPointWithTransform(pointf);
643 EXPECT_EQ(pointf.x_, 0.0f);
644 }
645
646 /**
647 * @tc.name: RosenRenderContextTest030
648 * @tc.desc: NeedPreloadImage()
649 * @tc.type: FUNC
650 */
651 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest030, TestSize.Level1)
652 {
653 auto frameNode =
__anon54a3be8d1b02() 654 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
655 auto rosenRenderContext = InitRosenRenderContext(frameNode);
656 // constrcuct params
657 std::list<ParticleOption> optionList;
658 RectF rect;
659 bool ret = rosenRenderContext->NeedPreloadImage(optionList, rect);
660 EXPECT_FALSE(ret);
661 ParticleOption particleOption1;
662 EmitterOption emitter1;
663 Particle particle1;
664 particle1.SetLifeTime(1);
665 particle1.SetLifeTimeRange(0);
666 particle1.SetParticleType(ParticleType::POINT);
667 emitter1.SetParticle(particle1);
668 particleOption1.SetEmitterOption(emitter1);
669 optionList.push_back(particleOption1);
670 bool ret2 = rosenRenderContext->NeedPreloadImage(optionList, rect);
671 EXPECT_FALSE(ret2);
672 ParticleOption particleOption;
673 EmitterOption emitter;
674 Particle particle;
675 particle.SetLifeTime(1);
676 particle.SetLifeTimeRange(0);
677 particle.SetParticleType(ParticleType::IMAGE);
678 emitter.SetParticle(particle);
679 particleOption.SetEmitterOption(emitter);
680 optionList.push_back(particleOption);
681 bool ret3 = rosenRenderContext->NeedPreloadImage(optionList, rect);
682 EXPECT_TRUE(ret3);
683 }
684
685 /**
686 * @tc.name: RosenRenderContextTest031
687 * @tc.desc: OnParticleImageLoaded()/ConvertDimensionToPx
688 * @tc.type: FUNC
689 */
690 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest031, TestSize.Level1)
691 {
692 auto frameNode =
__anon54a3be8d1c02() 693 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
694 auto rosenRenderContext = InitRosenRenderContext(frameNode);
695 // constrcuct params
696 std::string src = "";
697 RefPtr<CanvasImage> canvasImage;
698 int size = rosenRenderContext->particleImageMap_.size();
699 rosenRenderContext->OnParticleImageLoaded(src, canvasImage);
700 EXPECT_EQ(rosenRenderContext->particleImageMap_.size(), size + 1);
701
702 OHOS::Ace::Dimension dimension(1.0, DimensionUnit::PX);
703 float ret = rosenRenderContext->ConvertDimensionToPx(dimension, 5);
704 EXPECT_EQ(ret, 1.0f);
705 OHOS::Ace::Dimension dimension2(1.0, DimensionUnit::PERCENT);
706 float ret2 = rosenRenderContext->ConvertDimensionToPx(dimension2, 5);
707 EXPECT_EQ(ret2, 5.0f);
708 }
709
710 /**
711 * @tc.name: RosenRenderContextTest032
712 * @tc.desc: InitContext()
713 * @tc.type: FUNC
714 */
715 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest032, TestSize.Level1)
716 {
717 auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
718 RenderContext::ContextParam contextParam;
719 contextParam.type = RenderContext::ContextType::CANVAS;
720 contextParam.surfaceName.emplace("test");
721 std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
722 // is root is true
723 rosenRenderContext->InitContext(true, contextParamValue);
724 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
725 rosenRenderContext->rsNode_ = nullptr;
726 // contextParamValue does not has value
727 std::optional<RenderContext::ContextParam> contextParamValue2 = std::make_optional(contextParam);
728 rosenRenderContext->InitContext(false, contextParamValue2);
729 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
730 rosenRenderContext->rsNode_ = nullptr;
731 contextParam.type = RenderContext::ContextType::ROOT;
732 std::optional<RenderContext::ContextParam> contextParamValue3 = std::make_optional(contextParam);
733 rosenRenderContext->InitContext(false, contextParamValue3);
734 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
735 rosenRenderContext->rsNode_ = nullptr;
736 contextParam.type = RenderContext::ContextType::SURFACE;
737 std::optional<RenderContext::ContextParam> contextParamValue4 = std::make_optional(contextParam);
738 rosenRenderContext->InitContext(false, contextParamValue4);
739 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
740 rosenRenderContext->rsNode_ = nullptr;
741 contextParam.type = RenderContext::ContextType::HARDWARE_SURFACE;
742 std::optional<RenderContext::ContextParam> contextParamValue5 = std::make_optional(contextParam);
743 rosenRenderContext->InitContext(false, contextParamValue5);
744 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
745 rosenRenderContext->rsNode_ = nullptr;
746 contextParam.type = RenderContext::ContextType::EFFECT;
747 std::optional<RenderContext::ContextParam> contextParamValue7 = std::make_optional(contextParam);
748 rosenRenderContext->InitContext(false, contextParamValue7);
749 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
750 rosenRenderContext->rsNode_ = nullptr;
751 contextParam.type = RenderContext::ContextType::INCREMENTAL_CANVAS;
752 std::optional<RenderContext::ContextParam> contextParamValue8 = std::make_optional(contextParam);
753 rosenRenderContext->InitContext(false, contextParamValue8);
754 EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
755 rosenRenderContext->rsNode_ = nullptr;
756 contextParam.type = RenderContext::ContextType::EXTERNAL;
757 std::optional<RenderContext::ContextParam> contextParamValue9 = std::make_optional(contextParam);
758 rosenRenderContext->InitContext(false, contextParamValue9);
759 EXPECT_EQ(rosenRenderContext->rsNode_ == nullptr, true);
760 }
761
762 /**
763 * @tc.name: RosenRenderContextTest033
764 * @tc.desc: PaintDebugBoundary()
765 * @tc.type: FUNC
766 */
767 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest033, TestSize.Level1)
768 {
769 auto frameNode =
__anon54a3be8d1d02() 770 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
771 auto rosenRenderContext = InitRosenRenderContext(frameNode);
772 rosenRenderContext->PaintDebugBoundary(false);
773 EXPECT_EQ(rosenRenderContext->debugBoundaryModifier_ == nullptr, true);
774 auto rosenRenderContext2 = AceType::MakeRefPtr<RosenRenderContext>();
775 RenderContext::ContextParam contextParam;
776 contextParam.type = RenderContext::ContextType::SURFACE;
777 contextParam.surfaceName.emplace("test");
778 std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
779 rosenRenderContext2->InitContext(false, contextParamValue);
780 rosenRenderContext2->SetHostNode(frameNode);
781 rosenRenderContext2->PaintDebugBoundary(true);
782 EXPECT_EQ(rosenRenderContext->debugBoundaryModifier_ == nullptr, true);
783 }
784
785 /**
786 * @tc.name: RosenRenderContextTest034
787 * @tc.desc: UpdateBlurBackgroundColor()
788 * @tc.type: FUNC
789 */
790 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest034, TestSize.Level1)
791 {
792 auto frameNode =
__anon54a3be8d1e02() 793 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
794 auto rosenRenderContext = InitRosenRenderContext(frameNode);
795 std::optional<BlurStyleOption> bgBlurStyle;
796 EXPECT_FALSE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle));
797 std::optional<BlurStyleOption> bgBlurStyle2 = std::make_optional(BlurStyleOption());
798 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
799 bgBlurStyle2->isValidColor = true;
800 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
801 bgBlurStyle2->isWindowFocused = false;
802 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
803
804 std::optional<EffectOption> efffectOption = std::make_optional(EffectOption());
805 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
806 efffectOption->isValidColor = true;
807 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
808 efffectOption->isWindowFocused = false;
809 EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
810 }
811
812 /**
813 * @tc.name: RosenRenderContextTest035
814 * @tc.desc: UpdateAccessibilityRoundRect().
815 * @tc.type: FUNC
816 */
817 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest035, TestSize.Level1)
818 {
__anon54a3be8d1f02() 819 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
820 auto rosenRenderContext = InitRosenRenderContext(frameNode);
821 if (!rosenRenderContext) {
822 return;
823 }
824
825 rosenRenderContext->accessibilityFocusStateModifier_ = std::make_shared<FocusStateModifier>();
826 if (!rosenRenderContext->accessibilityFocusStateModifier_) {
827 return;
828 }
829
830 RoundRect frameRect;
831 frameRect.SetRect(RectF(6, 6, 6, 6));
832 const constexpr double accessibilityFocusWidth = 4.0;
833 double lineWidth = accessibilityFocusWidth * PipelineBase::GetCurrentDensity();
834 Dimension paintWidth(lineWidth, DimensionUnit::PX);
835 auto paintWidthPx = static_cast<float>(paintWidth.ConvertToPx());
836 (void)paintWidthPx;
837 rosenRenderContext->accessibilityFocusStateModifier_->SetRoundRect(frameRect, paintWidthPx);
838 if (!rosenRenderContext->accessibilityFocusStateModifier_->animationRect_) {
839 return;
840 }
841 frameNode->geometryNode_->SetFrameSize(SizeF(10.0f, 10.0f));
842 rosenRenderContext->UpdateAccessibilityRoundRect();
843 auto rectBeforeUpdate = rosenRenderContext->accessibilityFocusStateModifier_->roundRect_.GetRect();
844 EXPECT_EQ(rectBeforeUpdate.GetLeft(), 2.0f);
845 EXPECT_EQ(rectBeforeUpdate.GetTop(), 2.0f);
846 EXPECT_EQ(rectBeforeUpdate.GetRight(), 8.0f);
847 EXPECT_EQ(rectBeforeUpdate.GetBottom(), 8.0f);
848
849 frameNode->geometryNode_->SetFrameSize(SizeF(20.0f, 20.0f));
850 rosenRenderContext->UpdateAccessibilityRoundRect();
851 auto rectAfterUpdate = rosenRenderContext->accessibilityFocusStateModifier_->roundRect_.GetRect();
852
853 EXPECT_EQ(rectAfterUpdate.GetLeft(), 2.0f);
854 EXPECT_EQ(rectAfterUpdate.GetTop(), 2.0f);
855 EXPECT_EQ(rectAfterUpdate.GetRight(), 18.0f);
856 EXPECT_EQ(rectAfterUpdate.GetBottom(), 18.0f);
857 }
858
859 /**
860 * @tc.name: RosenRenderContextTest037
861 * @tc.desc: UpdateShadow.
862 * @tc.type: FUNC
863 */
864 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest037, TestSize.Level1)
865 {
__anon54a3be8d2002() 866 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
867 auto rosenRenderContext = InitRosenRenderContext(frameNode);
868 if (!rosenRenderContext) {
869 return;
870 }
871 Shadow shadow;
872 shadow.SetBlurRadius(1.0);
873 shadow.SetOffsetX(1.0);
874 shadow.SetOffsetY(1.0);
875 shadow.SetIsFilled(true);
876 rosenRenderContext->OnBackShadowUpdate(shadow);
877 auto color = rosenRenderContext->rsNode_->GetStagingProperties().GetShadowColor();
878 ASSERT_TRUE(color.AsArgbInt() == Color::BLACK.GetValue());
879 auto offsetX = rosenRenderContext->rsNode_->GetStagingProperties().GetShadowOffsetY();
880 auto offsetY = rosenRenderContext->rsNode_->GetStagingProperties().GetShadowOffsetY();
881 ASSERT_TRUE(NearEqual(1.0, offsetX));
882 ASSERT_TRUE(NearEqual(1.0, offsetY));
883 auto isFilled = rosenRenderContext->rsNode_->GetStagingProperties().GetShadowIsFilled();
884 ASSERT_TRUE(isFilled);
885 }
886
887 /**
888 * @tc.name: RosenRenderContextTest38
889 * @tc.desc: UpdateClipEdge
890 * @tc.type: FUNC
891 */
892 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest038, TestSize.Level1)
893 {
__anon54a3be8d2102() 894 auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
895 auto rosenRenderContext = InitRosenRenderContext(frameNode);
896 if (!rosenRenderContext) {
897 return;
898 }
899 rosenRenderContext->OnClipEdgeUpdate(true);
900 auto clip = rosenRenderContext->rsNode_->GetStagingProperties().GetClipToBounds();
901 ASSERT_TRUE(clip);
902 }
903
904 /**
905 * @tc.name: RosenRenderContextTest039
906 * @tc.desc: GetStatusByEffectTypeAndWindow.
907 * @tc.type: FUNC
908 */
909 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest039, TestSize.Level1)
910 {
911 auto frameNode =
__anon54a3be8d2202() 912 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
913 auto rosenRenderContext = InitRosenRenderContext(frameNode);
914 auto pipeline = MockPipelineContext::GetCurrentContext();
915
916 auto windowEffect = EffectType::WINDOW_EFFECT;
917 rosenRenderContext->UpdateUseEffectType(windowEffect);
918 pipeline->WindowFocus(false);
919 EXPECT_TRUE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
920
921 pipeline->WindowFocus(true);
922 auto useEffectTypeVal = rosenRenderContext->GetUseEffectType();
923 EXPECT_EQ(useEffectTypeVal, windowEffect);
924 EXPECT_TRUE(pipeline->IsWindowFocused());
925 EXPECT_TRUE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
926
927 rosenRenderContext->UpdateUseEffectType(EffectType::DEFAULT);
928 EXPECT_FALSE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
929 }
930
931 /**
932 * @tc.name: RosenRenderContextTest040
933 * @tc.desc: OnUseEffectUpdate().
934 * @tc.type: FUNC
935 */
936 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest040, TestSize.Level1)
937 {
938 auto frameNode =
__anon54a3be8d2302() 939 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
940 auto rosenRenderContext = InitRosenRenderContext(frameNode);
941 auto pipeline = rosenRenderContext->GetPipelineContext();
942 ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
943
944 rosenRenderContext->UpdateUseEffectType(EffectType::WINDOW_EFFECT);
945 bool value = true;
946 // GetStatusByEffectTypeAndWindow() is true
947 pipeline->WindowFocus(false);
948 rosenRenderContext->OnUseEffectUpdate(value);
949 bool willSetVal = false;
950 rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
951 EXPECT_NE(willSetVal, value);
952
953 // GetStatusByEffectTypeAndWindow() is false
954 pipeline->WindowFocus(true);
955 rosenRenderContext->OnUseEffectUpdate(value);
956 willSetVal = true;
957 rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
958 EXPECT_EQ(willSetVal, value);
959
960 value = false;
961 // value is false, GetStatusByEffectTypeAndWindow() is true
962 pipeline->WindowFocus(false);
963 rosenRenderContext->OnUseEffectUpdate(value);
964 willSetVal = false;
965 rosenRenderContext->rsNode_->SetUseEffect(value);
966 EXPECT_EQ(willSetVal, value);
967
968 // value is false, GetStatusByEffectTypeAndWindow() is false
969 pipeline->WindowFocus(true);
970 rosenRenderContext->OnUseEffectUpdate(value);
971 willSetVal = false;
972 rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
973 EXPECT_EQ(willSetVal, value);
974 }
975
976 /**
977 * @tc.name: RosenRenderContextTest041
978 * @tc.desc: OnUseEffectTypeUpdate().
979 * @tc.type: FUNC
980 */
981 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest041, TestSize.Level1)
982 {
983 auto frameNode =
__anon54a3be8d2402() 984 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
985 auto rosenRenderContext = InitRosenRenderContext(frameNode);
986 EffectType effectType = EffectType::WINDOW_EFFECT;
987 rosenRenderContext->OnUseEffectTypeUpdate(effectType);
988 ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
989
990 auto effectTypeParam = static_cast<Rosen::UseEffectType>(effectType);
991 rosenRenderContext->rsNode_->SetUseEffectType(effectTypeParam);
992
993 bool useEffect = true;
994 rosenRenderContext->UpdateUseEffect(useEffect);
995 rosenRenderContext->OnUseEffectUpdate(useEffect);
996
997 useEffect = false;
998 rosenRenderContext->UpdateUseEffect(useEffect);
999 rosenRenderContext->OnUseEffectUpdate(useEffect);
1000
1001 effectType = EffectType::DEFAULT;
1002 rosenRenderContext->OnUseEffectTypeUpdate(effectType);
1003 auto useEffectTypeVal = rosenRenderContext->GetUseEffectType().value_or(EffectType::DEFAULT);
1004 EXPECT_EQ(useEffectTypeVal, effectType);
1005 }
1006
1007 /**
1008 * @tc.name: RosenRenderContextTest042
1009 * @tc.desc: UpdateWindowFocusState().
1010 * @tc.type: FUNC
1011 */
1012 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest042, TestSize.Level1)
1013 {
1014 auto frameNode =
__anon54a3be8d2502() 1015 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1016 auto rosenRenderContext = InitRosenRenderContext(frameNode);
1017
1018 bool isFocused = true;
1019 rosenRenderContext->UpdateWindowFocusState(isFocused);
1020
1021 auto useEffect = rosenRenderContext->GetUseEffect().value_or(false);
1022 rosenRenderContext->UpdateUseEffectType(EffectType::WINDOW_EFFECT);
1023 rosenRenderContext->OnUseEffectUpdate(useEffect);
1024
1025 BlurStyleOption blurStyleObj;
1026 blurStyleObj.policy = BlurStyleActivePolicy::FOLLOWS_WINDOW_ACTIVE_STATE;
1027 blurStyleObj.isWindowFocused = isFocused;
1028 rosenRenderContext->UpdateBackBlurStyle(blurStyleObj);
1029
1030 EffectOption effectObj;
1031 effectObj.policy = BlurStyleActivePolicy::FOLLOWS_WINDOW_ACTIVE_STATE;
1032 rosenRenderContext->UpdateBackgroundEffect(effectObj);
1033 EXPECT_EQ(effectObj.isWindowFocused, isFocused);
1034 }
1035
1036 /**
1037 * @tc.name: RosenRenderContextTest043
1038 * @tc.desc: OnBackgroundColorUpdate().
1039 * @tc.type: FUNC
1040 */
1041 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest043, TestSize.Level1)
1042 {
1043 auto frameNode =
__anon54a3be8d2602() 1044 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1045 auto rosenRenderContext = InitRosenRenderContext(frameNode);
1046 const Color value = Color::RED;
1047 rosenRenderContext->OnBackgroundColorUpdate(value);
1048 ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1049 rosenRenderContext->rsNode_->SetBackgroundColor(value.GetValue());
1050 rosenRenderContext->PaintBackground();
1051 auto backgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1052 EXPECT_EQ(backgroundColorVal, OHOS::Rosen::RSColor::FromArgbInt(value.GetValue()));
1053 }
1054
1055 /**
1056 * @tc.name: RosenRenderContextTest044
1057 * @tc.desc: HasValidBgImageResizable().
1058 * @tc.type: FUNC
1059 */
1060 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest044, TestSize.Level1)
1061 {
1062 auto frameNode =
__anon54a3be8d2702() 1063 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1064 auto rosenRenderContext = InitRosenRenderContext(frameNode);
1065
1066 rosenRenderContext->bgLoadingCtx_ = nullptr;
1067 EXPECT_EQ(rosenRenderContext->HasValidBgImageResizable(), false);
1068 auto str = ImageSourceInfo(SRC_JPG);
1069 auto ctx = AceType::MakeRefPtr<ImageLoadingContext>(str, LoadNotifier(nullptr, nullptr, nullptr), true);
1070
1071 rosenRenderContext->bgLoadingCtx_ = ctx;
1072 auto srcSize = rosenRenderContext->bgLoadingCtx_->GetImageSize();
1073 auto slice = rosenRenderContext->GetBackgroundImageResizableSliceValue(ImageResizableSlice());
1074 auto left = slice.left.ConvertToPxWithSize(srcSize.Width());
1075 auto right = slice.right.ConvertToPxWithSize(srcSize.Width());
1076 auto top = slice.top.ConvertToPxWithSize(srcSize.Width());
1077 auto bottom = slice.bottom.ConvertToPxWithSize(srcSize.Width());
1078 bool firstRes = srcSize.Width() > left + right;
1079 bool secondRes = srcSize.Height() > top + bottom;
1080 bool thirdRes = right > 0;
1081 bool fourthRes = bottom > 0;
1082 bool res = firstRes && secondRes && thirdRes && fourthRes;
1083
1084 EXPECT_EQ(rosenRenderContext->HasValidBgImageResizable(), res);
1085 }
1086
1087 /**
1088 * @tc.name: RosenRenderContextTest045
1089 * @tc.desc: SetAlphaOffscreen().
1090 * @tc.type: FUNC
1091 */
1092 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest045, TestSize.Level1)
1093 {
1094 auto frameNode =
__anon54a3be8d2802() 1095 FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1096 auto rosenRenderContext = InitRosenRenderContext(frameNode);
1097 ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1098 bool isOffScreen = true;
1099 bool isOffScreenVal = true;
1100 rosenRenderContext->SetAlphaOffscreen(isOffScreen);
1101 rosenRenderContext->rsNode_->SetAlphaOffscreen(isOffScreenVal);
1102 EXPECT_EQ(isOffScreen, isOffScreenVal);
1103
1104 isOffScreen = false;
1105 isOffScreenVal = false;
1106 rosenRenderContext->SetAlphaOffscreen(isOffScreen);
1107 rosenRenderContext->rsNode_->SetAlphaOffscreen(isOffScreenVal);
1108 EXPECT_EQ(isOffScreen, isOffScreenVal);
1109 }
1110
1111 /**
1112 * @tc.name: RosenRenderContextTest046
1113 * @tc.desc: Test SetRenderFit Func and GetRenderFit Func.
1114 * @tc.type: FUNC
1115 */
1116 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest046, TestSize.Level1)
1117 {
1118 auto frameNode =
__anon54a3be8d2902() 1119 FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1120 ASSERT_NE(frameNode, nullptr);
1121 RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1122 ASSERT_NE(rosenRenderContext, nullptr);
1123 ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1124 rosenRenderContext->SetRenderFit(RenderFit::CENTER);
1125 auto renderFit = rosenRenderContext->GetRenderFit();
1126 ASSERT_NE(renderFit, std::nullopt);
1127 EXPECT_EQ(renderFit.value(), RenderFit::CENTER);
1128 }
1129 } // namespace OHOS::Ace::NG