• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "gmock/gmock.h"
19 
20 #define private public
21 #define protected public
22 
23 #include "test/unittest/core/rosen/rosen_render_context_test.h"
24 #undef private
25 #undef protected
26 
27 using namespace testing;
28 using namespace testing::ext;
29 
30 namespace OHOS::Ace::NG {
31 namespace {
32 constexpr char SRC_JPG[] = "file://data/data/com.example.test/res/exampleAlt.jpg";
33 
34 template <typename T>
CompareVector(const std::vector<T> & vec1,const std::vector<T> & vec2)35 bool CompareVector(const std::vector<T>& vec1, const std::vector<T>& vec2)
36 {
37     if (vec1.size() != vec2.size()) {
38         return false;
39     }
40     for (size_t i = 0; i != vec1.size(); ++i) {
41         if (!NearEqual(vec1[i], vec2[i])) {
42             return false;
43         }
44     }
45     return true;
46 }
47 } // namespace
48 
SetUp()49 void RosenRenderContextTest::SetUp()
50 {
51     MockPipelineContext::SetUp();
52     MockContainer::SetUp();
53 }
54 
TearDown()55 void RosenRenderContextTest::TearDown()
56 {
57     MockPipelineContext::TearDown();
58     MockContainer::TearDown();
59 }
60 
InitRosenRenderContext(const RefPtr<FrameNode> & frameNode)61 RefPtr<RosenRenderContext> RosenRenderContextTest::InitRosenRenderContext(const RefPtr<FrameNode>& frameNode)
62 {
63     return InitRosenRenderContext(frameNode, RenderContext::ContextType::CANVAS);
64 }
65 
InitRosenRenderContext(const RefPtr<FrameNode> & frameNode,const RenderContext::ContextType & type)66 RefPtr<RosenRenderContext> RosenRenderContextTest::InitRosenRenderContext(const RefPtr<FrameNode>& frameNode,
67     const RenderContext::ContextType& type)
68 {
69     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
70     RenderContext::ContextParam contextParam;
71     contextParam.type = type;
72     contextParam.surfaceName.emplace("test");
73     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
74     rosenRenderContext->InitContext(false, contextParamValue);
75     rosenRenderContext->SetHostNode(frameNode);
76     return rosenRenderContext;
77 }
78 
79 /**
80  * @tc.name: RosenRenderContextTest001
81  * @tc.desc: SetPivot().
82  * @tc.type: FUNC
83  */
84 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest001, TestSize.Level1)
85 {
__anon099ef3ef0202() 86     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
87     auto rosenRenderContext = InitRosenRenderContext(frameNode);
88     float xPivot = 10.0;
89     float yPivot = 10.0;
90     float zPivot = 10.0;
91     rosenRenderContext->SetPivot(xPivot, yPivot, zPivot);
92     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 10.0);
93     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 10.0);
94     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 10.0);
95     xPivot = 5.0;
96     rosenRenderContext->SetPivot(xPivot, yPivot, zPivot);
97     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 5.0);
98 }
99 
100 /**
101  * @tc.name: RosenRenderContextTest002
102  * @tc.desc: SetTransitionPivot().
103  * @tc.type: FUNC
104  */
105 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest002, TestSize.Level1)
106 {
__anon099ef3ef0302() 107     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
108     auto rosenRenderContext = InitRosenRenderContext(frameNode);
109     rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
110     ScaleOptions scaleOptions;
111     scaleOptions.centerX = CalcDimension(50.0, DimensionUnit::PX);
112     scaleOptions.centerY = CalcDimension(50.0, DimensionUnit::PX);
113     rosenRenderContext->GetOrCreateTransitionAppearing()->UpdateScale(scaleOptions);
114     rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
115     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 0.5);
116     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 0.5);
117     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 0);
118     RotateOptions rotateOptions;
119     rotateOptions.centerX = CalcDimension(50.0, DimensionUnit::PX);
120     rotateOptions.centerY = CalcDimension(50.0, DimensionUnit::PX);
121     rotateOptions.centerZ = CalcDimension(50.0, DimensionUnit::PX);
122     rosenRenderContext->GetOrCreateTransitionAppearing()->UpdateRotate(rotateOptions);
123     rosenRenderContext->SetTransitionPivot(SizeF(100.0, 100.0), true);
124     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().x_, 0.5);
125     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivot().y_, 0.5);
126     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetPivotZ(), 50.0);
127 }
128 
129 /**
130  * @tc.name: RosenRenderContextTest003
131  * @tc.desc: SetSandBox().
132  * @tc.type: FUNC
133  */
134 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest003, TestSize.Level1)
135 {
__anon099ef3ef0402() 136     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
137     auto rosenRenderContext = InitRosenRenderContext(frameNode);
138     std::optional<OffsetF> parentPosition = std::make_optional(OffsetF(100.0, 100.0));
139     rosenRenderContext->SetSandBox(parentPosition, false);
140     EXPECT_EQ(rosenRenderContext->sandBoxCount_, 1);
141     rosenRenderContext->SetSandBox(parentPosition, true);
142     EXPECT_EQ(rosenRenderContext->sandBoxCount_, 1);
143     rosenRenderContext->SetSandBox(std::nullopt, true);
144     EXPECT_EQ(rosenRenderContext->sandBoxCount_, 0);
145     rosenRenderContext->sandBoxCount_ = 2;
146     rosenRenderContext->SetSandBox(std::nullopt, true);
147     EXPECT_EQ(rosenRenderContext->sandBoxCount_, 0);
148 }
149 
150 /**
151  * @tc.name: RosenRenderContextTest004
152  * @tc.desc: SetFrameWithoutAnimation().
153  * @tc.type: FUNC
154  */
155 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest004, TestSize.Level1)
156 {
__anon099ef3ef0502() 157     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
158     auto rosenRenderContext = InitRosenRenderContext(frameNode);
159     RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
160     rosenRenderContext->SetFrameWithoutAnimation(paintRect);
161     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
162     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
163     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
164     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
165 }
166 
167 /**
168  * @tc.name: RosenRenderContextTest005
169  * @tc.desc: SyncGeometryFrame().
170  * @tc.type: FUNC
171  */
172 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest005, TestSize.Level1)
173 {
__anon099ef3ef0602() 174     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
175     auto rosenRenderContext = InitRosenRenderContext(frameNode);
176     RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
177     rosenRenderContext->SyncGeometryFrame(paintRect);
178     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
179     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
180     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
181     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
182     rosenRenderContext->SyncGeometryFrame(paintRect);
183     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[0], paintRect.GetX());
184     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[1], paintRect.GetY());
185     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[2], paintRect.Width());
186     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetBounds()[3], paintRect.Height());
187 }
188 
189 /**
190  * @tc.name: RosenRenderContextTest006
191  * @tc.desc: SetChildBounds().
192  * @tc.type: FUNC
193  */
194 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest006, TestSize.Level1)
195 {
__anon099ef3ef0702() 196     auto hostNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
197     auto rosenRenderContext = InitRosenRenderContext(hostNode);
198     RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
199     rosenRenderContext->SetChildBounds(paintRect);
200     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetChildren().size(), 0);
201     auto rosenRenderContextChild = AceType::MakeRefPtr<RosenRenderContext>();
202     RenderContext::ContextParam contextParam;
203     contextParam.type = RenderContext::ContextType::CANVAS;
204     contextParam.surfaceName.emplace("test1");
205     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
206     rosenRenderContextChild->InitContext(false, contextParamValue);
__anon099ef3ef0802() 207     auto frameNode = FrameNode::GetOrCreateFrameNode("child", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
208     rosenRenderContextChild->SetHostNode(frameNode);
209     rosenRenderContext->AddChild(rosenRenderContextChild, 10);
210     rosenRenderContext->SetChildBounds(paintRect);
211     EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[0], 0.0);
212     EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[1], 0.0);
213     EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[2], paintRect.Width());
214     EXPECT_EQ(rosenRenderContextChild->GetRSNode()->GetStagingProperties().GetBounds()[3], paintRect.Height());
215 }
216 
217 /**
218  * @tc.name: RosenRenderContextTest008
219  * @tc.desc: OnForegroundEffectUpdate().
220  * @tc.type: FUNC
221  */
222 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest008, TestSize.Level1)
223 {
__anon099ef3ef0902() 224     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
225     auto rosenRenderContext = InitRosenRenderContext(frameNode);
226     rosenRenderContext->OnForegroundEffectUpdate(1.0f);
227     EXPECT_TRUE(rosenRenderContext->GetRSNode()->GetStagingProperties().GetForegroundEffectRadius() - 1.0 < 1);
228 }
229 
230 /**
231  * @tc.name: RosenRenderContextTest011
232  * @tc.desc: SyncGeometryFrame().
233  * @tc.type: FUNC
234  */
235 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest011, TestSize.Level1)
236 {
__anon099ef3ef0a02() 237     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
238     auto rosenRenderContext = InitRosenRenderContext(frameNode);
239     rosenRenderContext->OnOpacityUpdate(10.0);
240     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetAlpha(), 10.0);
241 }
242 
243 /**
244  * @tc.name: RosenRenderContextTest012
245  * @tc.desc: ConvertDimensionToScaleBySize().
246  * @tc.type: FUNC
247  */
248 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest012, TestSize.Level1)
249 {
250     Dimension dimension;
251     dimension.SetUnit(DimensionUnit::FP);
252     float size = 100.0;
253     float ret = RosenRenderContext::ConvertDimensionToScaleBySize(dimension, size);
254     EXPECT_EQ(ret == 0.5f, false);
255     dimension.SetUnit(DimensionUnit::PERCENT);
256     float ret2 = RosenRenderContext::ConvertDimensionToScaleBySize(dimension, size);
257     EXPECT_EQ(ret2 == 0.0f, true);
258 }
259 
260 /**
261  * @tc.name: RosenRenderContextTest013
262  * @tc.desc: OnNodeAppear().
263  * @tc.type: FUNC
264  */
265 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest013, TestSize.Level1)
266 {
__anon099ef3ef0b02() 267     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
268     auto rosenRenderContext = InitRosenRenderContext(frameNode);
269     // recursive is false
270     rosenRenderContext->OnNodeAppear(false);
271     EXPECT_TRUE(rosenRenderContext->firstTransitionIn_);
272     // OnNodeAppear() recursive is true
273     rosenRenderContext->OnNodeAppear(true);
274     EXPECT_FALSE(rosenRenderContext->isDisappearing_);
275 }
276 
277 /**
278  * @tc.name: RosenRenderContextTest014
279  * @tc.desc: CreateHardwareSurface().
280  * @tc.type: FUNC
281  */
282 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest014, TestSize.Level1)
283 {
__anon099ef3ef0c02() 284     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
285     auto rosenRenderContext = InitRosenRenderContext(frameNode);
286     std::optional<RenderContext::ContextParam> param = std::make_optional(RenderContext::ContextParam());
287     bool isTextureExportNode = true;
288     std::shared_ptr<Rosen::RSUIContext> rsUIContext;
289     std::shared_ptr<Rosen::RSNode> ret = rosenRenderContext->CreateHardwareSurface(
290         param, isTextureExportNode, rsUIContext);
291     EXPECT_FALSE(ret == nullptr);
292 }
293 
294 /**
295  * @tc.name: RosenRenderContextTest015
296  * @tc.desc: SyncGeometryProperties().
297  * @tc.type: FUNC
298  */
299 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest015, TestSize.Level1)
300 {
__anon099ef3ef0d02() 301     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
302     auto rosenRenderContext = InitRosenRenderContext(frameNode);
303     RectF paintRect = { 10.0f, 10.0f, 10.0f, 10.0f };
304     rosenRenderContext->SyncGeometryProperties(paintRect);
305     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[0], paintRect.GetX());
306     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[1], paintRect.GetY());
307     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[2], paintRect.Width());
308     EXPECT_EQ(rosenRenderContext->GetRSNode()->GetStagingProperties().GetFrame()[3], paintRect.Height());
309 }
310 
311 /**
312  * @tc.name: RosenRenderContextTest017
313  * @tc.desc: OnBackgroundImageUpdate().
314  * @tc.type: FUNC
315  */
316 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest017, TestSize.Level1)
317 {
__anon099ef3ef0e02() 318     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
319     auto rosenRenderContext = InitRosenRenderContext(frameNode);
320     // Src null,pixmap null
321     ImageSourceInfo src;
322     rosenRenderContext->OnBackgroundImageUpdate(src);
323     EXPECT_EQ(rosenRenderContext->bgImage_, nullptr);
324     EXPECT_EQ(rosenRenderContext->bgLoadingCtx_, nullptr);
325     // Src null,pixmap not null
326     RefPtr<PixelMap> pixmap;
327     std::optional<Color> fillColor = std::make_optional(Color::BLACK);
328     src.SetPixMap(pixmap, fillColor);
329     rosenRenderContext->OnBackgroundImageUpdate(src);
330     EXPECT_TRUE(rosenRenderContext->bgImage_ == nullptr);
331     EXPECT_TRUE(rosenRenderContext->bgLoadingCtx_ == nullptr);
332     // Src not null,pixmap null
333     src.SetSrc("test");
334     rosenRenderContext->OnBackgroundImageUpdate(src);
335     EXPECT_TRUE(rosenRenderContext->bgImage_ == nullptr);
336     EXPECT_TRUE(rosenRenderContext->bgLoadingCtx_ != nullptr);
337 }
338 
339 /**
340  * @tc.name: RosenRenderContextTest019
341  * @tc.desc: OnParticleOptionArrayUpdate()
342  * @tc.type: FUNC
343  */
344 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest019, TestSize.Level1)
345 {
346     auto frameNode =
__anon099ef3ef0f02() 347         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
348     auto rosenRenderContext = InitRosenRenderContext(frameNode);
349     std::list<ParticleOption> optionList;
350     rosenRenderContext->OnParticleOptionArrayUpdate(optionList);
351     EXPECT_FALSE(rosenRenderContext->particleAnimationPlaying_);
352     rosenRenderContext->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, 1.0f);
353     rosenRenderContext->OnParticleOptionArrayUpdate(optionList);
354     EXPECT_TRUE(rosenRenderContext->particleAnimationPlaying_);
__anon099ef3ef1002() 355     auto frameNode2 = FrameNode::GetOrCreateFrameNode("parent", -1, []() {
356         auto pattern = AceType::MakeRefPtr<ParticlePattern>(1);
357         pattern->SetHaveUnVisibleParent(true);
358         return pattern;
359     });
360     auto rosenRenderContext2 = InitRosenRenderContext(frameNode2);
361     rosenRenderContext2->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, 1.0f);
362     rosenRenderContext2->OnParticleOptionArrayUpdate(optionList);
363     EXPECT_FALSE(rosenRenderContext2->particleAnimationPlaying_);
364 }
365 
366 /**
367  * @tc.name: RosenRenderContextTest020
368  * @tc.desc: OnParticleOptionArrayUpdate()
369  * @tc.type: FUNC
370  */
371 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest020, TestSize.Level1)
372 {
373     auto frameNode =
__anon099ef3ef1102() 374         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
375     auto rosenRenderContext = InitRosenRenderContext(frameNode);
376     // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
377     ParticleOption particleOption;
378     RectF rectF;
379     EmitterOption emitter;
380     Particle particle;
381     particle.SetLifeTime(0.0f);
382     particle.SetLifeTimeRange(1.0f);
383     emitter.SetParticle(particle);
384     particleOption.SetEmitterOption(emitter);
385     OHOS::Rosen::ParticleParams ret = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
386     EXPECT_EQ(ret.velocity_.velocityAngle_.start_, 0.0f);
387     EXPECT_EQ(ret.velocity_.velocityAngle_.end_, 0.0f);
388     // SetLifeTime 0.0f,SetLifeTimeRange 1.0f
389     Particle particle2;
390     particle2.SetLifeTime(-1.0f);
391     particle2.SetLifeTimeRange(1.0f);
392     emitter.SetParticle(particle2);
393     particleOption.SetEmitterOption(emitter);
394     OHOS::Rosen::ParticleParams ret2 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
395     EXPECT_EQ(ret2.velocity_.velocityAngle_.start_, 0.0f);
396     EXPECT_EQ(ret2.velocity_.velocityAngle_.end_, 0.0f);
397     // SetLifeTime 1.0f,SetLifeTimeRange 0.5f
398     Particle particle3;
399     particle3.SetLifeTime(1);
400     particle3.SetLifeTimeRange(0);
401     particle3.SetParticleType(ParticleType::IMAGE);
402     ParticleConfig config;
403     ImageParticleParameter imageParam;
404     ImageFit imageFit = ImageFit::FILL;
405     imageParam.SetImageFit(imageFit);
406     config.SetImageParticleParameter(imageParam);
407     particle3.SetConfig(config);
408     emitter.SetParticle(particle3);
409     particleOption.SetEmitterOption(emitter);
410     OHOS::Rosen::ParticleParams ret3 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
411     EXPECT_EQ(ret3.velocity_.velocityAngle_.start_, 0.0f);
412     EXPECT_EQ(ret3.velocity_.velocityAngle_.end_, 0.0f);
413 }
414 
415 /**
416  * @tc.name: RosenRenderContextTest021
417  * @tc.desc: OnParticleOptionArrayUpdate()-2
418  * @tc.type: FUNC
419  */
420 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest021, TestSize.Level1)
421 {
422     auto frameNode =
__anon099ef3ef1202() 423         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
424     auto rosenRenderContext = InitRosenRenderContext(frameNode);
425     // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
426     ParticleOption particleOption;
427     RectF rectF;
428     EmitterOption emitter;
429     Particle particle;
430     particle.SetLifeTime(0.0f);
431     particle.SetLifeTimeRange(1.0f);
432     emitter.SetParticle(particle);
433     particleOption.SetEmitterOption(emitter);
434     // particleColorPropertyOption assign value
435     ParticleColorPropertyOption particleColorPropertyOption;
436     particleOption.SetParticleColorOption(particleColorPropertyOption);
437     OHOS::Rosen::ParticleParams ret4 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
438     EXPECT_EQ(ret4.color_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
439     ParticleColorPropertyUpdater colorUpdater;
440     colorUpdater.SetUpdateType(UpdaterType::RANDOM);
441     particleColorPropertyOption.SetUpdater(colorUpdater);
442     particleOption.SetParticleColorOption(particleColorPropertyOption);
443     OHOS::Rosen::ParticleParams ret5 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
444     EXPECT_EQ(ret5.color_.updator_, OHOS::Rosen::ParticleUpdator::RANDOM);
445     colorUpdater.SetUpdateType(UpdaterType::CURVE);
446     particleColorPropertyOption.SetUpdater(colorUpdater);
447     particleOption.SetParticleColorOption(particleColorPropertyOption);
448     OHOS::Rosen::ParticleParams ret6 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
449     EXPECT_EQ(ret6.color_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
450     // ParticleFloatPropertyOption assign value
451     ParticleFloatPropertyOption particleFloatPropertyOption;
452     particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
453     OHOS::Rosen::ParticleParams ret7 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
454     EXPECT_EQ(ret7.opacity_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
455     ParticleFloatPropertyUpdater particleFloatPropertyUpdater;
456     particleFloatPropertyUpdater.SetUpdaterType(UpdaterType::RANDOM);
457     particleFloatPropertyOption.SetUpdater(particleFloatPropertyUpdater);
458     particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
459     OHOS::Rosen::ParticleParams ret8 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
460     EXPECT_EQ(ret8.opacity_.updator_, OHOS::Rosen::ParticleUpdator::RANDOM);
461     particleFloatPropertyUpdater.SetUpdaterType(UpdaterType::CURVE);
462     particleFloatPropertyOption.SetUpdater(particleFloatPropertyUpdater);
463     particleOption.SetParticleOpacityOption(particleFloatPropertyOption);
464     OHOS::Rosen::ParticleParams ret9 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
465     EXPECT_EQ(ret9.opacity_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
466     // scaleOptionOpt assing value,same as rsOpacityOpt
467     particleOption.SetParticleScaleOption(particleFloatPropertyOption);
468     OHOS::Rosen::ParticleParams ret10 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
469     EXPECT_EQ(ret10.scale_.updator_, OHOS::Rosen::ParticleUpdator::CURVE);
470 }
471 
472 /**
473  * @tc.name: RosenRenderContextTest022
474  * @tc.desc: OnParticleOptionArrayUpdate()-3
475  * @tc.type: FUNC
476  */
477 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest022, TestSize.Level1)
478 {
479     auto frameNode =
__anon099ef3ef1302() 480         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
481     auto rosenRenderContext = InitRosenRenderContext(frameNode);
482     // constrcuct params,default value,expect SetLifeTime 0.0f,SetLifeTimeRange 1.0f
483     ParticleOption particleOption;
484     RectF rectF;
485     EmitterOption emitter;
486     Particle particle;
487     particle.SetLifeTime(0.0f);
488     particle.SetLifeTimeRange(1.0f);
489     emitter.SetParticle(particle);
490     particleOption.SetEmitterOption(emitter);
491     // velocityOptionOpt assing value
492     VelocityProperty velocityProperty;
493     std::pair<float, float> range = std::make_pair(1.0f, 2.0f);
494     velocityProperty.SetSpeedRange(range);
495     velocityProperty.SetAngleRange(range);
496     particleOption.SetParticleVelocityOption(velocityProperty);
497     OHOS::Rosen::ParticleParams ret11 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
498     EXPECT_EQ(ret11.velocity_.velocityAngle_.end_, 2.0f);
499     //  accelerationProperty assing value
500     AccelerationProperty accelerationProperty;
501     particleOption.SetParticleAccelerationOption(accelerationProperty);
502     OHOS::Rosen::ParticleParams ret12 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
503     EXPECT_EQ(ret12.acceleration_.accelerationAngle_.val_.end_, 0.0f);
504     EXPECT_EQ(ret12.acceleration_.accelerationValue_.val_.end_, 0.0f);
505     ParticleFloatPropertyOption particleFloatPropertyOption1;
506     particleFloatPropertyOption1.SetRange(range);
507     accelerationProperty.SetSpeed(particleFloatPropertyOption1);
508     accelerationProperty.SetAngle(particleFloatPropertyOption1);
509     particleOption.SetParticleAccelerationOption(accelerationProperty);
510     OHOS::Rosen::ParticleParams ret13 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
511     EXPECT_EQ(ret13.acceleration_.accelerationAngle_.val_.end_, 2.0f);
512     EXPECT_EQ(ret13.acceleration_.accelerationValue_.val_.end_, 2.0f);
513     // spinOption assing value
514     particleOption.SetParticleSpinOption(particleFloatPropertyOption1);
515     OHOS::Rosen::ParticleParams ret14 = rosenRenderContext->ConvertParticleOptionToParams(particleOption, rectF);
516     EXPECT_EQ(ret14.spin_.updator_, OHOS::Rosen::ParticleUpdator::NONE);
517 }
518 
519 /**
520  * @tc.name: RosenRenderContextTest023
521  * @tc.desc: OnDynamicRangeModeUpdate()
522  * @tc.type: FUNC
523  */
524 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest023, TestSize.Level1)
525 {
526     auto frameNode =
__anon099ef3ef1402() 527         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
528     auto rosenRenderContext = InitRosenRenderContext(frameNode);
529     // constrcuct params
530     DynamicRangeMode dynamicRangeMode = DynamicRangeMode::STANDARD;
531     rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
532     EXPECT_EQ(rosenRenderContext->isHdr_, false);
533     dynamicRangeMode = DynamicRangeMode::HIGH;
534     rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
535     EXPECT_EQ(rosenRenderContext->isHdr_, true);
536     rosenRenderContext->OnDynamicRangeModeUpdate(dynamicRangeMode);
537     EXPECT_EQ(rosenRenderContext->isHdr_, false);
538 }
539 
540 /**
541  * @tc.name: RosenRenderContextTest024
542  * @tc.desc: GetThumbnailPixelMap()
543  * @tc.type: FUNC
544  */
545 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest024, TestSize.Level1)
546 {
547     auto frameNode =
__anon099ef3ef1502() 548         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
549     auto rosenRenderContext = InitRosenRenderContext(frameNode);
550     // constrcuct params
551     RefPtr<PixelMap> ret = rosenRenderContext->GetThumbnailPixelMap(false);
552     EXPECT_EQ(Referenced::RawPtr(ret) == nullptr, true);
553     RefPtr<PixelMap> ret2 = rosenRenderContext->GetThumbnailPixelMap(true);
554     EXPECT_EQ(Referenced::RawPtr(ret) == nullptr, true);
555 }
556 
557 /**
558  * @tc.name: RosenRenderContextTest025
559  * @tc.desc: MarshallTranslate()
560  * @tc.type: FUNC
561  */
562 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest025, TestSize.Level1)
563 {
564     auto frameNode =
__anon099ef3ef1602() 565         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
566     auto rosenRenderContext = InitRosenRenderContext(frameNode);
567     // constrcuct params
568     TranslateOptions translate;
569     Vector3F ret = rosenRenderContext->MarshallTranslate(translate);
570     EXPECT_EQ(ret.x, 0.0f);
571     EXPECT_EQ(ret.y, 0.0f);
572     EXPECT_EQ(ret.z, 0.0f);
573     CalcDimension x(1.0, DimensionUnit::PX);
574     CalcDimension y(1.0, DimensionUnit::PERCENT);
575     CalcDimension z(1.0, DimensionUnit::PX);
576     TranslateOptions translate1(x, y, z);
577     Vector3F ret2 = rosenRenderContext->MarshallTranslate(translate1);
578     EXPECT_EQ(ret2.x, 0.0f);
579     CalcDimension x2(1.0, DimensionUnit::PERCENT);
580     TranslateOptions translate2(x2, y, z);
581     Vector3F ret3 = rosenRenderContext->MarshallTranslate(translate2);
582     EXPECT_EQ(ret3.x, 0.0f);
583 }
584 
585 /**
586  * @tc.name: RosenRenderContextTest026
587  * @tc.desc: GetPaintRectWithTransform()
588  * @tc.type: FUNC
589  */
590 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest026, TestSize.Level1)
591 {
592     auto frameNode =
__anon099ef3ef1702() 593         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
594     auto rosenRenderContext = InitRosenRenderContext(frameNode);
595     // constrcuct params
596     RectF ret = rosenRenderContext->GetPaintRectWithTransform();
597     EXPECT_EQ(ret.x_, 0.0f);
598     rosenRenderContext->GetRSNode()->SetRotation(2.0f);
599     RectF ret2 = rosenRenderContext->GetPaintRectWithTransform();
600     EXPECT_EQ(ret2.x_, 0.0f);
601     rosenRenderContext->GetRSNode()->SetRotation(90.0f);
602     RectF ret3 = rosenRenderContext->GetPaintRectWithTransform();
603     EXPECT_EQ(ret3.x_, 0.0f);
604     rosenRenderContext->GetRSNode()->SetRotation(180.0f);
605     RectF ret4 = rosenRenderContext->GetPaintRectWithTransform();
606     EXPECT_EQ(ret4.x_, 0.0f);
607     rosenRenderContext->GetRSNode()->SetRotation(270.0f);
608     RectF ret5 = rosenRenderContext->GetPaintRectWithTransform();
609     EXPECT_EQ(ret5.x_, 0.0f);
610 }
611 
612 /**
613  * @tc.name: RosenRenderContextTest027
614  * @tc.desc: GetPaintRectWithTranslate()
615  * @tc.type: FUNC
616  */
617 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest027, TestSize.Level1)
618 {
619     auto frameNode =
__anon099ef3ef1802() 620         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
621     auto rosenRenderContext = InitRosenRenderContext(frameNode);
622     // constrcuct params
623     std::pair<RectF, bool> ret = rosenRenderContext->GetPaintRectWithTranslate();
624     EXPECT_EQ(ret.first.x_, 0.0f);
625     rosenRenderContext->GetRSNode()->SetRotation(90.0f);
626     std::pair<RectF, bool> ret2 = rosenRenderContext->GetPaintRectWithTranslate();
627     EXPECT_EQ(ret2.first.width_, -1.0f);
628 }
629 
630 /**
631  * @tc.name: RosenRenderContextTest028
632  * @tc.desc: GetRevertMatrix()/GetMatrix()/GetMatrixWithTransformRotate()
633  * @tc.type: FUNC
634  */
635 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest028, TestSize.Level1)
636 {
637     auto frameNode =
__anon099ef3ef1902() 638         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
639     auto rosenRenderContext = InitRosenRenderContext(frameNode);
640     // constrcuct params
641     Matrix4 ret = rosenRenderContext->GetRevertMatrix();
642     EXPECT_EQ(ret(0, 0), 1.0f);
643     Matrix4 ret2 = rosenRenderContext->GetMatrix();
644     EXPECT_EQ(ret2(0, 0), 1.0f);
645     Matrix4 ret3 = rosenRenderContext->GetMatrixWithTransformRotate();
646     EXPECT_EQ(ret3(0, 0), 1.0f);
647 }
648 
649 /**
650  * @tc.name: RosenRenderContextTest029
651  * @tc.desc: GetPointWithTransform()
652  * @tc.type: FUNC
653  */
654 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest029, TestSize.Level1)
655 {
656     auto frameNode =
__anon099ef3ef1a02() 657         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
658     auto rosenRenderContext = InitRosenRenderContext(frameNode);
659     // constrcuct params
660     PointF pointf;
661     rosenRenderContext->GetPointWithTransform(pointf);
662     EXPECT_EQ(pointf.x_, 0.0f);
663     rosenRenderContext->GetRSNode()->SetRotation(90.0f);
664     rosenRenderContext->GetPointWithTransform(pointf);
665     EXPECT_EQ(pointf.x_, 0.0f);
666 }
667 
668 /**
669  * @tc.name: RosenRenderContextTest030
670  * @tc.desc: NeedPreloadImage()
671  * @tc.type: FUNC
672  */
673 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest030, TestSize.Level1)
674 {
675     auto frameNode =
__anon099ef3ef1b02() 676         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
677     auto rosenRenderContext = InitRosenRenderContext(frameNode);
678     // constrcuct params
679     std::list<ParticleOption> optionList;
680     RectF rect;
681     bool ret = rosenRenderContext->NeedPreloadImage(optionList, rect);
682     EXPECT_FALSE(ret);
683     ParticleOption particleOption1;
684     EmitterOption emitter1;
685     Particle particle1;
686     particle1.SetLifeTime(1);
687     particle1.SetLifeTimeRange(0);
688     particle1.SetParticleType(ParticleType::POINT);
689     emitter1.SetParticle(particle1);
690     particleOption1.SetEmitterOption(emitter1);
691     optionList.push_back(particleOption1);
692     bool ret2 = rosenRenderContext->NeedPreloadImage(optionList, rect);
693     EXPECT_FALSE(ret2);
694     ParticleOption particleOption;
695     EmitterOption emitter;
696     Particle particle;
697     particle.SetLifeTime(1);
698     particle.SetLifeTimeRange(0);
699     particle.SetParticleType(ParticleType::IMAGE);
700     emitter.SetParticle(particle);
701     particleOption.SetEmitterOption(emitter);
702     optionList.push_back(particleOption);
703     bool ret3 = rosenRenderContext->NeedPreloadImage(optionList, rect);
704     EXPECT_TRUE(ret3);
705 }
706 
707 /**
708  * @tc.name: RosenRenderContextTest031
709  * @tc.desc: OnParticleImageLoaded()/ConvertDimensionToPx
710  * @tc.type: FUNC
711  */
712 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest031, TestSize.Level1)
713 {
714     auto frameNode =
__anon099ef3ef1c02() 715         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
716     auto rosenRenderContext = InitRosenRenderContext(frameNode);
717     // constrcuct params
718     std::string src = "";
719     RefPtr<CanvasImage> canvasImage;
720     int size = rosenRenderContext->particleImageMap_.size();
721     rosenRenderContext->OnParticleImageLoaded(src, canvasImage);
722     EXPECT_EQ(rosenRenderContext->particleImageMap_.size(), size + 1);
723 
724     OHOS::Ace::Dimension dimension(1.0, DimensionUnit::PX);
725     float ret = rosenRenderContext->ConvertDimensionToPx(dimension, 5);
726     EXPECT_EQ(ret, 1.0f);
727     OHOS::Ace::Dimension dimension2(1.0, DimensionUnit::PERCENT);
728     float ret2 = rosenRenderContext->ConvertDimensionToPx(dimension2, 5);
729     EXPECT_EQ(ret2, 5.0f);
730 }
731 
732 /**
733  * @tc.name: RosenRenderContextTest032
734  * @tc.desc: InitContext()
735  * @tc.type: FUNC
736  */
737 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest032, TestSize.Level1)
738 {
739     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
740     RenderContext::ContextParam contextParam;
741     contextParam.type = RenderContext::ContextType::CANVAS;
742     contextParam.surfaceName.emplace("test");
743     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
744     // is root is true
745     rosenRenderContext->InitContext(true, contextParamValue);
746     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
747     rosenRenderContext->rsNode_ = nullptr;
748     // contextParamValue does not has value
749     std::optional<RenderContext::ContextParam> contextParamValue2 = std::make_optional(contextParam);
750     rosenRenderContext->InitContext(false, contextParamValue2);
751     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
752     rosenRenderContext->rsNode_ = nullptr;
753     contextParam.type = RenderContext::ContextType::ROOT;
754     std::optional<RenderContext::ContextParam> contextParamValue3 = std::make_optional(contextParam);
755     rosenRenderContext->InitContext(false, contextParamValue3);
756     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
757     rosenRenderContext->rsNode_ = nullptr;
758     contextParam.type = RenderContext::ContextType::SURFACE;
759     std::optional<RenderContext::ContextParam> contextParamValue4 = std::make_optional(contextParam);
760     rosenRenderContext->InitContext(false, contextParamValue4);
761     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
762     rosenRenderContext->rsNode_ = nullptr;
763     contextParam.type = RenderContext::ContextType::HARDWARE_SURFACE;
764     std::optional<RenderContext::ContextParam> contextParamValue5 = std::make_optional(contextParam);
765     rosenRenderContext->InitContext(false, contextParamValue5);
766     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
767     rosenRenderContext->rsNode_ = nullptr;
768     contextParam.type = RenderContext::ContextType::EFFECT;
769     std::optional<RenderContext::ContextParam> contextParamValue7 = std::make_optional(contextParam);
770     rosenRenderContext->InitContext(false, contextParamValue7);
771     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
772     rosenRenderContext->rsNode_ = nullptr;
773     contextParam.type = RenderContext::ContextType::INCREMENTAL_CANVAS;
774     std::optional<RenderContext::ContextParam> contextParamValue8 = std::make_optional(contextParam);
775     rosenRenderContext->InitContext(false, contextParamValue8);
776     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
777     rosenRenderContext->rsNode_ = nullptr;
778     contextParam.type = RenderContext::ContextType::EXTERNAL;
779     std::optional<RenderContext::ContextParam> contextParamValue9 = std::make_optional(contextParam);
780     rosenRenderContext->InitContext(false, contextParamValue9);
781     EXPECT_EQ(rosenRenderContext->rsNode_ == nullptr, true);
782 }
783 
784 /**
785  * @tc.name: RosenRenderContextTest033
786  * @tc.desc: PaintDebugBoundary()
787  * @tc.type: FUNC
788  */
789 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest033, TestSize.Level1)
790 {
791     auto frameNode =
__anon099ef3ef1d02() 792         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
793     auto rosenRenderContext = InitRosenRenderContext(frameNode);
794     rosenRenderContext->PaintDebugBoundary(false);
795     EXPECT_EQ(rosenRenderContext->debugBoundaryModifier_ == nullptr, true);
796     auto rosenRenderContext2 = AceType::MakeRefPtr<RosenRenderContext>();
797     RenderContext::ContextParam contextParam;
798     contextParam.type = RenderContext::ContextType::SURFACE;
799     contextParam.surfaceName.emplace("test");
800     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
801     rosenRenderContext2->InitContext(false, contextParamValue);
802     rosenRenderContext2->SetHostNode(frameNode);
803     rosenRenderContext2->PaintDebugBoundary(true);
804     EXPECT_EQ(rosenRenderContext->debugBoundaryModifier_ == nullptr, true);
805 }
806 
807 /**
808  * @tc.name: RosenRenderContextTest034
809  * @tc.desc: UpdateBlurBackgroundColor()
810  * @tc.type: FUNC
811  */
812 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest034, TestSize.Level1)
813 {
814     auto frameNode =
__anon099ef3ef1e02() 815         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<ParticlePattern>(1); });
816     auto rosenRenderContext = InitRosenRenderContext(frameNode);
817     std::optional<BlurStyleOption> bgBlurStyle;
818     EXPECT_FALSE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle));
819     std::optional<BlurStyleOption> bgBlurStyle2 = std::make_optional(BlurStyleOption());
820     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
821     bgBlurStyle2->isValidColor = true;
822     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
823     bgBlurStyle2->isWindowFocused = false;
824     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(bgBlurStyle2));
825 
826     std::optional<EffectOption> efffectOption = std::make_optional(EffectOption());
827     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
828     efffectOption->isValidColor = true;
829     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
830     efffectOption->isWindowFocused = false;
831     EXPECT_TRUE(rosenRenderContext->UpdateBlurBackgroundColor(efffectOption));
832 }
833 
834 /**
835  * @tc.name: RosenRenderContextTest035
836  * @tc.desc: UpdateAccessibilityRoundRect().
837  * @tc.type: FUNC
838  */
839 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest035, TestSize.Level1)
840 {
__anon099ef3ef1f02() 841     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
842     auto rosenRenderContext = InitRosenRenderContext(frameNode);
843     if (!rosenRenderContext) {
844         return;
845     }
846 
847     rosenRenderContext->accessibilityFocusStateModifier_ = std::make_shared<FocusStateModifier>();
848     if (!rosenRenderContext->accessibilityFocusStateModifier_) {
849         return;
850     }
851 
852     RoundRect frameRect;
853     frameRect.SetRect(RectF(6, 6, 6, 6));
854     const constexpr double accessibilityFocusWidth = 4.0;
855     double lineWidth = accessibilityFocusWidth * PipelineBase::GetCurrentDensity();
856     Dimension paintWidth(lineWidth, DimensionUnit::PX);
857     auto paintWidthPx = static_cast<float>(paintWidth.ConvertToPx());
858     (void)paintWidthPx;
859     rosenRenderContext->accessibilityFocusStateModifier_->SetRoundRect(frameRect, paintWidthPx);
860     if (!rosenRenderContext->accessibilityFocusStateModifier_->animationRect_) {
861         return;
862     }
863     frameNode->geometryNode_->SetFrameSize(SizeF(10.0f, 10.0f));
864     rosenRenderContext->UpdateAccessibilityRoundRect();
865     auto rectBeforeUpdate = rosenRenderContext->accessibilityFocusStateModifier_->roundRect_.GetRect();
866     EXPECT_EQ(rectBeforeUpdate.GetLeft(), 2.0f);
867     EXPECT_EQ(rectBeforeUpdate.GetTop(), 2.0f);
868     EXPECT_EQ(rectBeforeUpdate.GetRight(), 8.0f);
869     EXPECT_EQ(rectBeforeUpdate.GetBottom(), 8.0f);
870 
871     frameNode->geometryNode_->SetFrameSize(SizeF(20.0f, 20.0f));
872     rosenRenderContext->UpdateAccessibilityRoundRect();
873     auto rectAfterUpdate = rosenRenderContext->accessibilityFocusStateModifier_->roundRect_.GetRect();
874 
875     EXPECT_EQ(rectAfterUpdate.GetLeft(), 2.0f);
876     EXPECT_EQ(rectAfterUpdate.GetTop(), 2.0f);
877     EXPECT_EQ(rectAfterUpdate.GetRight(), 18.0f);
878     EXPECT_EQ(rectAfterUpdate.GetBottom(), 18.0f);
879 
880     Dimension focusPaddingVp = Dimension(0.0, DimensionUnit::VP);
881     auto borderPaddingPx = static_cast<float>(focusPaddingVp.ConvertToPx());
882     auto diffRadiusValueX = borderPaddingPx + paintWidthPx / 2;
883     auto diffRadiusValueY = borderPaddingPx + paintWidthPx / 2;
884 
885     auto roundRectAfterUpdate = rosenRenderContext->accessibilityFocusStateModifier_->roundRect_;
886     auto focusPaintCornerTopLeftAfter = roundRectAfterUpdate.GetCornerRadius(RSRoundRect::RoundRect::CornerPos::TOP_LEFT_POS);
887     auto focusPaintCornerTopRightAfter = roundRectAfterUpdate.GetCornerRadius(RSRoundRect::RoundRect::CornerPos::TOP_RIGHT_POS);
888     auto focusPaintCornerBottomLeftAfter = roundRectAfterUpdate.GetCornerRadius(RSRoundRect::RoundRect::CornerPos::BOTTOM_LEFT_POS);
889     auto focusPaintCornerBottomRightAfter = roundRectAfterUpdate.GetCornerRadius(RSRoundRect::RoundRect::CornerPos::BOTTOM_RIGHT_POS);
890 
891     EXPECT_EQ(focusPaintCornerTopLeftAfter.GetX(), diffRadiusValueX);
892     EXPECT_EQ(focusPaintCornerTopLeftAfter.GetY(), diffRadiusValueY);
893     EXPECT_EQ(focusPaintCornerTopRightAfter.GetX(), diffRadiusValueX);
894     EXPECT_EQ(focusPaintCornerTopRightAfter.GetY(), diffRadiusValueY);
895     EXPECT_EQ(focusPaintCornerBottomLeftAfter.GetX(), diffRadiusValueX);
896     EXPECT_EQ(focusPaintCornerBottomLeftAfter.GetY(), diffRadiusValueY);
897     EXPECT_EQ(focusPaintCornerBottomRightAfter.GetX(), diffRadiusValueX);
898     EXPECT_EQ(focusPaintCornerBottomRightAfter.GetY(), diffRadiusValueY);
899 }
900 
901 /**
902  * @tc.name: RosenRenderContextTest037
903  * @tc.desc: UpdateShadow.
904  * @tc.type: FUNC
905  */
906 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest037, TestSize.Level1)
907 {
__anon099ef3ef2002() 908     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
909     auto rosenRenderContext = InitRosenRenderContext(frameNode);
910     if (!rosenRenderContext) {
911         return;
912     }
913     Shadow shadow;
914     shadow.SetBlurRadius(1.0);
915     shadow.SetOffsetX(1.0);
916     shadow.SetOffsetY(1.0);
917     shadow.SetIsFilled(true);
918     rosenRenderContext->OnBackShadowUpdate(shadow);
919     auto color = rosenRenderContext->rsNode_->GetStagingProperties().GetShadowColor();
920     ASSERT_TRUE(color.AsArgbInt() == Color::BLACK.GetValue());
921     auto offsetX =  rosenRenderContext->rsNode_->GetStagingProperties().GetShadowOffsetY();
922     auto offsetY =  rosenRenderContext->rsNode_->GetStagingProperties().GetShadowOffsetY();
923     ASSERT_TRUE(NearEqual(1.0, offsetX));
924     ASSERT_TRUE(NearEqual(1.0, offsetY));
925     auto isFilled =  rosenRenderContext->rsNode_->GetStagingProperties().GetShadowIsFilled();
926     ASSERT_TRUE(isFilled);
927 }
928 
929 /**
930  * @tc.name: RosenRenderContextTest38
931  * @tc.desc: UpdateClipEdge
932  * @tc.type: FUNC
933  */
934 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest038, TestSize.Level1)
935 {
__anon099ef3ef2102() 936     auto frameNode = FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
937     auto rosenRenderContext = InitRosenRenderContext(frameNode);
938     if (!rosenRenderContext) {
939         return;
940     }
941     rosenRenderContext->OnClipEdgeUpdate(true);
942     auto clip = rosenRenderContext->rsNode_->GetStagingProperties().GetClipToBounds();
943     ASSERT_TRUE(clip);
944 }
945 
946 /**
947  * @tc.name: RosenRenderContextTest039
948  * @tc.desc: GetStatusByEffectTypeAndWindow.
949  * @tc.type: FUNC
950  */
951 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest039, TestSize.Level1)
952 {
953     auto frameNode =
__anon099ef3ef2202() 954         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
955     auto rosenRenderContext = InitRosenRenderContext(frameNode);
956     auto pipeline = MockPipelineContext::GetCurrentContext();
957 
958     auto windowEffect = EffectType::WINDOW_EFFECT;
959     rosenRenderContext->UpdateUseEffectType(windowEffect);
960     pipeline->WindowFocus(false);
961     EXPECT_TRUE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
962 
963     pipeline->WindowFocus(true);
964     auto useEffectTypeVal = rosenRenderContext->GetUseEffectType();
965     EXPECT_EQ(useEffectTypeVal, windowEffect);
966     EXPECT_TRUE(pipeline->IsWindowFocused());
967     EXPECT_TRUE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
968 
969     rosenRenderContext->UpdateUseEffectType(EffectType::DEFAULT);
970     EXPECT_FALSE(rosenRenderContext->GetStatusByEffectTypeAndWindow());
971 }
972 
973 /**
974  * @tc.name: RosenRenderContextTest040
975  * @tc.desc: OnUseEffectUpdate().
976  * @tc.type: FUNC
977  */
978 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest040, TestSize.Level1)
979 {
980     auto frameNode =
__anon099ef3ef2302() 981         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
982     auto rosenRenderContext = InitRosenRenderContext(frameNode);
983     auto pipeline = rosenRenderContext->GetPipelineContext();
984     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
985 
986     rosenRenderContext->UpdateUseEffectType(EffectType::WINDOW_EFFECT);
987     bool value = true;
988     // GetStatusByEffectTypeAndWindow() is true
989     pipeline->WindowFocus(false);
990     rosenRenderContext->OnUseEffectUpdate(value);
991     bool willSetVal = false;
992     rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
993     EXPECT_NE(willSetVal, value);
994 
995     // GetStatusByEffectTypeAndWindow() is false
996     pipeline->WindowFocus(true);
997     rosenRenderContext->OnUseEffectUpdate(value);
998     willSetVal = true;
999     rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
1000     EXPECT_EQ(willSetVal, value);
1001 
1002     value = false;
1003     // value is false, GetStatusByEffectTypeAndWindow() is true
1004     pipeline->WindowFocus(false);
1005     rosenRenderContext->OnUseEffectUpdate(value);
1006     willSetVal = false;
1007     rosenRenderContext->rsNode_->SetUseEffect(value);
1008     EXPECT_EQ(willSetVal, value);
1009 
1010     // value is false,  GetStatusByEffectTypeAndWindow() is false
1011     pipeline->WindowFocus(true);
1012     rosenRenderContext->OnUseEffectUpdate(value);
1013     willSetVal = false;
1014     rosenRenderContext->rsNode_->SetUseEffect(willSetVal);
1015     EXPECT_EQ(willSetVal, value);
1016 }
1017 
1018 /**
1019  * @tc.name: RosenRenderContextTest041
1020  * @tc.desc: OnUseEffectTypeUpdate().
1021  * @tc.type: FUNC
1022  */
1023 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest041, TestSize.Level1)
1024 {
1025     auto frameNode =
__anon099ef3ef2402() 1026         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1027     auto rosenRenderContext = InitRosenRenderContext(frameNode);
1028     EffectType effectType = EffectType::WINDOW_EFFECT;
1029     rosenRenderContext->OnUseEffectTypeUpdate(effectType);
1030     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1031 
1032     auto effectTypeParam = static_cast<Rosen::UseEffectType>(effectType);
1033     rosenRenderContext->rsNode_->SetUseEffectType(effectTypeParam);
1034 
1035     bool useEffect = true;
1036     rosenRenderContext->UpdateUseEffect(useEffect);
1037     rosenRenderContext->OnUseEffectUpdate(useEffect);
1038 
1039     useEffect = false;
1040     rosenRenderContext->UpdateUseEffect(useEffect);
1041     rosenRenderContext->OnUseEffectUpdate(useEffect);
1042 
1043     effectType = EffectType::DEFAULT;
1044     rosenRenderContext->OnUseEffectTypeUpdate(effectType);
1045     auto useEffectTypeVal = rosenRenderContext->GetUseEffectType().value_or(EffectType::DEFAULT);
1046     EXPECT_EQ(useEffectTypeVal, effectType);
1047 }
1048 
1049 /**
1050  * @tc.name: RosenRenderContextTest042
1051  * @tc.desc: UpdateWindowFocusState().
1052  * @tc.type: FUNC
1053  */
1054 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest042, TestSize.Level1)
1055 {
1056     auto frameNode =
__anon099ef3ef2502() 1057         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1058     auto rosenRenderContext = InitRosenRenderContext(frameNode);
1059 
1060     bool isFocused = true;
1061     rosenRenderContext->UpdateWindowFocusState(isFocused);
1062 
1063     auto useEffect = rosenRenderContext->GetUseEffect().value_or(false);
1064     rosenRenderContext->UpdateUseEffectType(EffectType::WINDOW_EFFECT);
1065     rosenRenderContext->OnUseEffectUpdate(useEffect);
1066 
1067     BlurStyleOption blurStyleObj;
1068     blurStyleObj.policy = BlurStyleActivePolicy::FOLLOWS_WINDOW_ACTIVE_STATE;
1069     blurStyleObj.isWindowFocused = isFocused;
1070     rosenRenderContext->UpdateBackBlurStyle(blurStyleObj);
1071 
1072     EffectOption effectObj;
1073     effectObj.policy = BlurStyleActivePolicy::FOLLOWS_WINDOW_ACTIVE_STATE;
1074     rosenRenderContext->UpdateBackgroundEffect(effectObj);
1075     EXPECT_EQ(effectObj.isWindowFocused, isFocused);
1076 }
1077 
1078 /**
1079  * @tc.name: RosenRenderContextTest043
1080  * @tc.desc: OnBackgroundColorUpdate().
1081  * @tc.type: FUNC
1082  */
1083 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest043, TestSize.Level1)
1084 {
1085     /**
1086      * @tc.steps: step1. Create node and check basic information.
1087      */
1088     auto frameNode =
__anon099ef3ef2602() 1089         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1090     auto rosenRenderContext = InitRosenRenderContext(frameNode);
1091     const Color value = Color::RED;
1092     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1093     OHOS::Rosen::RSColor rsColor;
1094     /**
1095      * @tc.steps: step2. Call OnBackgroundColorUpdate function with value (RED), and convert it to rsColor.
1096      * @tc.expected: step2. The backgroundColorVal value on node should match rsColor value.
1097      */
1098     rosenRenderContext->OnBackgroundColorUpdate(value);
1099     rosenRenderContext->ColorToRSColor(value, rsColor);
1100     rosenRenderContext->rsNode_->SetBackgroundColor(rsColor);
1101     rosenRenderContext->PaintBackground();
1102     auto backgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1103     rsColor.ConvertToP3ColorSpace();
1104     EXPECT_EQ(backgroundColorVal.GetRed(), rsColor.GetRed());
1105     EXPECT_EQ(backgroundColorVal.GetGreen(), rsColor.GetGreen());
1106     EXPECT_EQ(backgroundColorVal.GetBlue(), rsColor.GetBlue());
1107     EXPECT_EQ(backgroundColorVal.GetAlpha(), rsColor.GetAlpha());
1108     EXPECT_EQ(backgroundColorVal.GetColorSpace(), rsColor.GetColorSpace());
1109     /**
1110      * @tc.steps: step3. Call OnBackgroundColorUpdate function with p3Color (RED with DISPLAY_P3 color space),
1111      * and convert it to rsColor.
1112      * @tc.expected: step3. The colorSpace of p3BackgroundColorVal on node should match colorSpace of rsColor.
1113      */
1114     Color p3Color = Color::RED;
1115     p3Color.SetColorSpace(ColorSpace::DISPLAY_P3);
1116     rosenRenderContext->OnBackgroundColorUpdate(p3Color);
1117     rosenRenderContext->ColorToRSColor(p3Color, rsColor);
1118     rosenRenderContext->rsNode_->SetBackgroundColor(rsColor);
1119     rosenRenderContext->PaintBackground();
1120     auto p3BackgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1121     EXPECT_EQ(p3BackgroundColorVal.GetColorSpace(), rsColor.GetColorSpace());
1122 }
1123 
1124 /**
1125  * @tc.name: RosenRenderContextTest044
1126  * @tc.desc: HasValidBgImageResizable().
1127  * @tc.type: FUNC
1128  */
1129 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest044, TestSize.Level1)
1130 {
1131     auto frameNode =
__anon099ef3ef2702() 1132         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1133     auto rosenRenderContext = InitRosenRenderContext(frameNode);
1134 
1135     rosenRenderContext->bgLoadingCtx_ = nullptr;
1136     EXPECT_EQ(rosenRenderContext->HasValidBgImageResizable(), false);
1137     auto str = ImageSourceInfo(SRC_JPG);
1138     auto ctx = AceType::MakeRefPtr<ImageLoadingContext>(str, LoadNotifier(nullptr, nullptr, nullptr), true);
1139 
1140     rosenRenderContext->bgLoadingCtx_ = ctx;
1141     auto srcSize = rosenRenderContext->bgLoadingCtx_->GetImageSize();
1142     auto slice = rosenRenderContext->GetBackgroundImageResizableSliceValue(ImageResizableSlice());
1143     auto left = slice.left.ConvertToPxWithSize(srcSize.Width());
1144     auto right = slice.right.ConvertToPxWithSize(srcSize.Width());
1145     auto top = slice.top.ConvertToPxWithSize(srcSize.Width());
1146     auto bottom = slice.bottom.ConvertToPxWithSize(srcSize.Width());
1147     bool firstRes = srcSize.Width() > left + right;
1148     bool secondRes = srcSize.Height() > top + bottom;
1149     bool thirdRes = right > 0;
1150     bool fourthRes = bottom > 0;
1151     bool res = firstRes && secondRes && thirdRes && fourthRes;
1152 
1153     EXPECT_EQ(rosenRenderContext->HasValidBgImageResizable(), res);
1154 }
1155 
1156 /**
1157  * @tc.name: RosenRenderContextTest045
1158  * @tc.desc: SetAlphaOffscreen().
1159  * @tc.type: FUNC
1160  */
1161 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest045, TestSize.Level1)
1162 {
1163     auto frameNode =
__anon099ef3ef2802() 1164         FrameNode::GetOrCreateFrameNode("parent", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1165     auto rosenRenderContext = InitRosenRenderContext(frameNode);
1166     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1167     bool isOffScreen = true;
1168     bool isOffScreenVal = true;
1169     rosenRenderContext->SetAlphaOffscreen(isOffScreen);
1170     rosenRenderContext->rsNode_->SetAlphaOffscreen(isOffScreenVal);
1171     EXPECT_EQ(isOffScreen, isOffScreenVal);
1172 
1173     isOffScreen = false;
1174     isOffScreenVal = false;
1175     rosenRenderContext->SetAlphaOffscreen(isOffScreen);
1176     rosenRenderContext->rsNode_->SetAlphaOffscreen(isOffScreenVal);
1177     EXPECT_EQ(isOffScreen, isOffScreenVal);
1178 }
1179 
1180 /**
1181  * @tc.name: RosenRenderContextTest046
1182  * @tc.desc: Test SetRenderFit Func and GetRenderFit Func.
1183  * @tc.type: FUNC
1184  */
1185 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest046, TestSize.Level1)
1186 {
1187     auto frameNode =
__anon099ef3ef2902() 1188         FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1189     ASSERT_NE(frameNode, nullptr);
1190     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1191     ASSERT_NE(rosenRenderContext, nullptr);
1192     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1193     rosenRenderContext->SetRenderFit(RenderFit::CENTER);
1194     auto renderFit = rosenRenderContext->GetRenderFit();
1195     ASSERT_NE(renderFit, std::nullopt);
1196     EXPECT_EQ(renderFit.value(), RenderFit::CENTER);
1197 }
1198 
1199 /**
1200  * @tc.name: RosenRenderContextTest047
1201  * @tc.desc: Test OnTransformRotateAngleUpdate Func.
1202  * @tc.type: FUNC
1203  */
1204 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest047, TestSize.Level1)
1205 {
__anon099ef3ef2a02() 1206     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1207     ASSERT_NE(frameNode, nullptr);
1208     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1209     ASSERT_NE(rosenRenderContext, nullptr);
1210     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1211     auto rotateX = 40.0f;
1212     auto rotateY = -40.0f;
1213     auto rotateZ = 0.0f;
1214     auto perspective = 120.0f;
1215     auto rotate = 0.0f;
1216     auto rotationXUserModifier = std::make_shared<Rosen::RSAnimatableProperty<float>>(rotate);
1217     auto rotationYUserModifier = std::make_shared<Rosen::RSAnimatableProperty<float>>(rotate);
1218     auto rotationZUserModifier = std::make_shared<Rosen::RSAnimatableProperty<float>>(rotate);
1219     auto cameraDistanceUserModifier = std::make_shared<Rosen::RSAnimatableProperty<float>>(rotate);
1220     rosenRenderContext->rotationXUserModifier_ = std::make_shared<Rosen::ModifierNG::RSTransformModifier>();
1221     rosenRenderContext->rotationXUserModifier_->AttachProperty(
1222         Rosen::ModifierNG::RSPropertyType::ROTATION_X, rotationXUserModifier);
1223     rosenRenderContext->rotationYUserModifier_ = std::make_shared<Rosen::ModifierNG::RSTransformModifier>();
1224     rosenRenderContext->rotationYUserModifier_->AttachProperty(
1225         Rosen::ModifierNG::RSPropertyType::ROTATION_Y, rotationYUserModifier);
1226     rosenRenderContext->rotationZUserModifier_ = std::make_shared<Rosen::ModifierNG::RSTransformModifier>();
1227     rosenRenderContext->rotationZUserModifier_->AttachProperty(
1228         Rosen::ModifierNG::RSPropertyType::ROTATION, rotationZUserModifier);
1229     rosenRenderContext->cameraDistanceUserModifier_ = std::make_shared<Rosen::ModifierNG::RSTransformModifier>();
1230     rosenRenderContext->cameraDistanceUserModifier_->AttachProperty(
1231         Rosen::ModifierNG::RSPropertyType::CAMERA_DISTANCE, cameraDistanceUserModifier);
1232     rosenRenderContext->OnTransformRotateAngleUpdate({ rotateX, rotateY, rotateZ, perspective });
1233     auto rotationXValue = rosenRenderContext->rotationXUserModifier_->GetRotationX();
1234     auto rotationYValue = rosenRenderContext->rotationYUserModifier_->GetRotationY();
1235     auto rotationZValue = rosenRenderContext->rotationZUserModifier_->GetRotation();
1236     auto cameraDistanceValue = rosenRenderContext->cameraDistanceUserModifier_->GetCameraDistance();
1237     EXPECT_EQ(rotationXValue, -rotateX);
1238     EXPECT_EQ(rotationYValue, -rotateY);
1239     EXPECT_EQ(rotationZValue, rotateZ);
1240     EXPECT_EQ(cameraDistanceValue, perspective);
1241 }
1242 
1243 /**
1244  * @tc.name: RosenRenderContextTest048
1245  * @tc.desc: Test BlendBgColor Func and ResetBlendBgColor Func.
1246  * @tc.type: FUNC
1247  */
1248 HWTEST_F(RosenRenderContextTest, RosenRenderContextTest048, TestSize.Level1)
1249 {
1250     /**
1251      * @tc.steps: step1. Create node and check basic information.
1252      */
1253     auto frameNode =
__anon099ef3ef2b02() 1254         FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1255     ASSERT_NE(frameNode, nullptr);
1256     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1257     ASSERT_NE(rosenRenderContext, nullptr);
1258     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1259     /**
1260      * @tc.steps: step2. Call the BlendBgColor function and ResetBlendBgColor function.
1261      * @tc.expected: step2. The current colorSpace value on the node should match the original colorSpace value.
1262      */
1263     Color bgColor = Color::RED;
1264     OHOS::Rosen::RSColor rsColor;
1265     rosenRenderContext->OnBackgroundColorUpdate(bgColor);
1266     rosenRenderContext->ColorToRSColor(bgColor, rsColor);
1267     rosenRenderContext->rsNode_->SetBackgroundColor(rsColor);
1268     rosenRenderContext->PaintBackground();
1269     Color blendColor = Color::FromRGB(6, 7, 8);
1270     auto originBackgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1271     rosenRenderContext->BlendBgColor(blendColor);
1272     auto backgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1273     EXPECT_EQ(backgroundColorVal.GetColorSpace(), originBackgroundColorVal.GetColorSpace());
1274     rosenRenderContext->ResetBlendBgColor();
1275     backgroundColorVal = rosenRenderContext->rsNode_->GetStagingProperties().GetBackgroundColor();
1276     EXPECT_EQ(backgroundColorVal.GetColorSpace(), originBackgroundColorVal.GetColorSpace());
1277 }
1278 
1279 /**
1280  * @tc.name: AnimationPropertyTest001
1281  * @tc.desc: Test GetRenderNodePropertyValue func.
1282  * @tc.type: FUNC
1283  */
1284 HWTEST_F(RosenRenderContextTest, AnimationPropertyTest001, TestSize.Level1)
1285 {
1286     /**
1287      * @tc.steps: step1. Create node and check basic infomation.
1288      */
__anon099ef3ef2c02() 1289     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1290     ASSERT_NE(frameNode, nullptr);
1291     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1292     ASSERT_NE(rosenRenderContext, nullptr);
1293     auto rsNode = rosenRenderContext->rsNode_;
1294     ASSERT_NE(rsNode, nullptr);
1295     /**
1296      * @tc.steps: step2. Test GetRenderNodePropertyValue function without setting value.
1297      * @tc.expected: step2. property value on node is default value.
1298      */
1299     auto rotationValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::ROTATION);
1300     std::vector<float> expectedRotationValue = { 0.0f, 0.0f, 0.0f };
1301     EXPECT_TRUE(CompareVector(rotationValue, expectedRotationValue));
1302     auto scaleValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::SCALE);
1303     std::vector<float> expectedScaleValue = { 1.0f, 1.0f };
1304     EXPECT_TRUE(CompareVector(scaleValue, expectedScaleValue));
1305     auto translateValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::TRANSLATION);
1306     std::vector<float> expectedTranslateValue = { 0.0f, 0.0f };
1307     EXPECT_TRUE(CompareVector(translateValue, expectedTranslateValue));
1308     auto opacityValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::OPACITY);
1309     std::vector<float> expectedOpacityValue = { 1.0f };
1310     EXPECT_TRUE(CompareVector(opacityValue, expectedOpacityValue));
1311 }
1312 
1313 /**
1314  * @tc.name: AnimationPropertyTest002
1315  * @tc.desc: Test SetAnimationPropertyValue and GetRenderNodePropertyValue func.
1316  * @tc.type: FUNC
1317  */
1318 HWTEST_F(RosenRenderContextTest, AnimationPropertyTest002, TestSize.Level1)
1319 {
1320     /**
1321      * @tc.steps: step1. Create node and check basic infomation.
1322      */
__anon099ef3ef2d02() 1323     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1324     ASSERT_NE(frameNode, nullptr);
1325     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1326     ASSERT_NE(rosenRenderContext, nullptr);
1327     auto rsNode = rosenRenderContext->rsNode_;
1328     ASSERT_NE(rsNode, nullptr);
1329     /**
1330      * @tc.steps: step2. call SetAnimationPropertyValue function.
1331      * @tc.expected: step2. The value on rsNode is same with set value.
1332      */
1333     std::vector<float> rotationValue { 45.0f, -30.0f, 180.0f };
1334     rosenRenderContext->SetAnimationPropertyValue(AnimationPropertyType::ROTATION, rotationValue);
1335     std::vector<float> scaleValue { 2.0f, 1.2f };
1336     rosenRenderContext->SetAnimationPropertyValue(AnimationPropertyType::SCALE, scaleValue);
1337     std::vector<float> translateValue { 100.0f, -20.0f };
1338     rosenRenderContext->SetAnimationPropertyValue(AnimationPropertyType::TRANSLATION, translateValue);
1339     std::vector<float> opacityValue { 0.5f };
1340     rosenRenderContext->SetAnimationPropertyValue(AnimationPropertyType::OPACITY, opacityValue);
1341     auto nodeRotateValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::ROTATION);
1342     auto nodeScaleValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::SCALE);
1343     auto nodeTranslateValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::TRANSLATION);
1344     auto nodeOpacityValue = rosenRenderContext->GetRenderNodePropertyValue(AnimationPropertyType::OPACITY);
1345     EXPECT_TRUE(CompareVector(nodeRotateValue, rotationValue));
1346     EXPECT_TRUE(CompareVector(nodeScaleValue, scaleValue));
1347     EXPECT_TRUE(CompareVector(nodeTranslateValue, translateValue));
1348     EXPECT_TRUE(CompareVector(nodeOpacityValue, opacityValue));
1349     /**
1350      * @tc.steps: step3. call SyncRSPropertyToRenderContext function.
1351      * @tc.expected: step3. The value on renderContext is same with set value.
1352      */
1353     rosenRenderContext->SyncRSPropertyToRenderContext(AnimationPropertyType::ROTATION);
1354     rosenRenderContext->SyncRSPropertyToRenderContext(AnimationPropertyType::SCALE);
1355     rosenRenderContext->SyncRSPropertyToRenderContext(AnimationPropertyType::TRANSLATION);
1356     rosenRenderContext->SyncRSPropertyToRenderContext(AnimationPropertyType::OPACITY);
1357     ASSERT_TRUE(rosenRenderContext->GetTransformRotateAngle().has_value());
1358     EXPECT_TRUE(NearEqual(rotationValue[2], rosenRenderContext->GetTransformRotateAngle()->z));
1359     ASSERT_TRUE(rosenRenderContext->GetTransformScale().has_value());
1360     EXPECT_TRUE(NearEqual(scaleValue[0], rosenRenderContext->GetTransformScale()->x));
1361     ASSERT_TRUE(rosenRenderContext->GetTransformTranslate().has_value());
1362     ASSERT_TRUE(rosenRenderContext->GetOpacity().has_value());
1363     EXPECT_TRUE(NearEqual(opacityValue[0], rosenRenderContext->GetOpacity().value()));
1364 }
1365 
1366 /**
1367  * @tc.name: UpdateTransformTranslate001
1368  * @tc.desc: Test UpdateTransformTranslate Func.
1369  * @tc.type: FUNC
1370  */
1371 HWTEST_F(RosenRenderContextTest, UpdateTransformTranslate001, TestSize.Level1)
1372 {
1373     /**
1374      * @tc.steps: step1. Create node and check basic infomation.
1375      */
__anon099ef3ef2e02() 1376     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1377     ASSERT_NE(frameNode, nullptr);
1378     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1379     ASSERT_NE(rosenRenderContext, nullptr);
1380     auto rsNode = rosenRenderContext->rsNode_;
1381     ASSERT_NE(rsNode, nullptr);
1382     /**
1383      * @tc.steps: step2. Set a TranslateOptions value whose unit is px.
1384      * @tc.expected: step2. Translate value in RSNode is correct.
1385      */
1386     constexpr float translateX = 30.0f;
1387     constexpr float translateY = -10.0f;
1388     constexpr float translateZ = 3.0f;
1389     Rosen::Vector2f translateRS;
1390     float translateZRS = 0.0f;
1391     TranslateOptions options { Dimension(translateX), Dimension(translateY), Dimension(translateZ) };
1392     rosenRenderContext->UpdateTransformTranslate(options);
1393     translateRS = rsNode->GetStagingProperties().GetTranslate();
1394     translateZRS = rsNode->GetStagingProperties().GetTranslateZ();
1395     EXPECT_TRUE(NearEqual(translateRS[0], translateX));
1396     EXPECT_TRUE(NearEqual(translateRS[1], translateY));
1397     EXPECT_TRUE(NearEqual(translateRS[2], translateZ));
1398     /**
1399      * @tc.steps: step3. Set a TranslateOptions value whose unit is percent. The node need have size.
1400      * @tc.expected: step3. Translate value in RSNode is correct.
1401      */
1402     constexpr float width = 200.0f;
1403     constexpr float height = 100.0f;
1404     constexpr float translateXPercent1 = 0.1f;
1405     constexpr float translateYPercent1 = 0.0f;
1406     RectF frame { 0, 0, width, height };
1407     rosenRenderContext->UpdatePaintRect(frame);
1408     rosenRenderContext->SyncGeometryProperties(frame);
1409     TranslateOptions options1 { Dimension(translateXPercent1, DimensionUnit::PERCENT),
1410         Dimension(translateYPercent1, DimensionUnit::PERCENT), Dimension(translateZ) };
1411     rosenRenderContext->UpdateTransformTranslate(options1);
1412     translateRS = rsNode->GetStagingProperties().GetTranslate();
1413     EXPECT_TRUE(NearEqual(translateRS[0], translateXPercent1 * width));
1414     EXPECT_TRUE(NearEqual(translateRS[1], translateYPercent1 * height));
1415 }
1416 
1417 /**
1418  * @tc.name: UpdateTransformRotate001
1419  * @tc.desc: Test UpdateTransformRotate Func.
1420  * @tc.type: FUNC
1421  */
1422 HWTEST_F(RosenRenderContextTest, UpdateTransformRotate001, TestSize.Level1)
1423 {
1424     /**
1425      * @tc.steps: step1. Create node and check basic infomation.
1426      */
__anon099ef3ef2f02() 1427     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1428     ASSERT_NE(frameNode, nullptr);
1429     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1430     ASSERT_NE(rosenRenderContext, nullptr);
1431     auto rsNode = rosenRenderContext->rsNode_;
1432     ASSERT_NE(rsNode, nullptr);
1433     constexpr float angle = 90.0f;
1434     constexpr float angleZero = 0.0f;
1435     /**
1436      * @tc.steps: step2. Set rotationX.
1437      * @tc.expected: step2. RotationX value in RSNode is correct.
1438      */
1439     Vector5F vecX { 1.0f, 0.0f, 0.0f, angle, 0.0f };
1440     rosenRenderContext->UpdateTransformRotate(vecX);
1441     // ignore the sign
1442     EXPECT_TRUE(NearEqual(std::abs(rsNode->GetStagingProperties().GetRotationX()), angle));
1443     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotationY(), angleZero));
1444     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotation(), angleZero));
1445     /**
1446      * @tc.steps: step3. Set rotationY.
1447      * @tc.expected: step3. RotationY value in RSNode is correct.
1448      */
1449     Vector5F vecY { 0.0f, 1.0f, 0.0f, angle, 0.0f };
1450     rosenRenderContext->UpdateTransformRotate(vecY);
1451     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotationX(), angleZero));
1452     EXPECT_TRUE(NearEqual(std::abs(rsNode->GetStagingProperties().GetRotationY()), angle));
1453     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotation(), angleZero));
1454     /**
1455      * @tc.steps: step4. Set rotationZ.
1456      * @tc.expected: step4. RotationZ value in RSNode is correct.
1457      */
1458     Vector5F vecZ { 0.0f, 0.0f, 1.0f, angle, 0.0f };
1459     rosenRenderContext->UpdateTransformRotate(vecZ);
1460     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotationX(), angleZero));
1461     EXPECT_TRUE(NearEqual(rsNode->GetStagingProperties().GetRotationY(), angleZero));
1462     EXPECT_TRUE(NearEqual(std::abs(rsNode->GetStagingProperties().GetRotation()), angle));
1463 }
1464 
1465 /**
1466  * @tc.name: UpdateTransformScale001
1467  * @tc.desc: Test UpdateTransformScale Func.
1468  * @tc.type: FUNC
1469  */
1470 HWTEST_F(RosenRenderContextTest, UpdateTransformScale001, TestSize.Level1)
1471 {
1472     /**
1473      * @tc.steps: step1. Create node and check basic infomation.
1474      */
__anon099ef3ef3002() 1475     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1476     ASSERT_NE(frameNode, nullptr);
1477     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1478     ASSERT_NE(rosenRenderContext, nullptr);
1479     auto rsNode = rosenRenderContext->rsNode_;
1480     ASSERT_NE(rsNode, nullptr);
1481     constexpr float scale1 = 2.0f;
1482     constexpr float scale2 = -2.0f;
1483     Rosen::Vector2f rsScale;
1484     /**
1485      * @tc.steps: step2. Set positive scale.
1486      * @tc.expected: step2. Scale value in RSNode is correct.
1487      */
1488     VectorF vecScale1 { scale1, scale1 };
1489     rosenRenderContext->UpdateTransformScale(vecScale1);
1490     rsScale = rsNode->GetStagingProperties().GetScale();
1491     EXPECT_TRUE(NearEqual(rsScale[0], scale1));
1492     EXPECT_TRUE(NearEqual(rsScale[1], scale1));
1493     /**
1494      * @tc.steps: step3. Set negative scale.
1495      * @tc.expected: step3. Scale value in RSNode is correct.
1496      */
1497     VectorF vecScale2 { scale2, scale2 };
1498     rosenRenderContext->UpdateTransformScale(vecScale2);
1499     rsScale = rsNode->GetStagingProperties().GetScale();
1500     EXPECT_TRUE(NearEqual(rsScale[0], scale2));
1501     EXPECT_TRUE(NearEqual(rsScale[1], scale2));
1502 }
1503 
1504 /**
1505  * @tc.name: SetAlwaysSnapshot001
1506  * @tc.desc: Test SetAlwaysSnapshot Func.
1507  * @tc.type: FUNC
1508  */
1509 HWTEST_F(RosenRenderContextTest, SetAlwaysSnapshot001, TestSize.Level1)
1510 {
1511     auto frameNode =
__anon099ef3ef3102() 1512         FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1513     ASSERT_NE(frameNode, nullptr);
1514     RefPtr<RosenRenderContext> rosenRenderContext =
1515         InitRosenRenderContext(frameNode, RenderContext::ContextType::EFFECT);
1516     ASSERT_NE(rosenRenderContext, nullptr);
1517     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1518 
1519     /**
1520      * @tc.steps: step1. Get default value.
1521      * @tc.expected: step1. Default value is false.
1522      */
1523     EXPECT_EQ(rosenRenderContext->rsNode_->GetStagingProperties().GetAlwaysSnapshot(), false);
1524 
1525     /**
1526      * @tc.steps: step2. Set value to rsNode_ which context type is EFFECT.
1527      * @tc.expected: step2. Value can be set correctly.
1528      */
1529     rosenRenderContext->SetAlwaysSnapshot(true);
1530     EXPECT_EQ(rosenRenderContext->rsNode_->GetStagingProperties().GetAlwaysSnapshot(), true);
1531 
1532     /**
1533      * @tc.steps: step3. Set value to rsNode_ which context type is not EFFECT.
1534      * @tc.expected: step3. Value is always false.
1535      */
1536     rosenRenderContext = InitRosenRenderContext(frameNode);
1537     ASSERT_NE(rosenRenderContext, nullptr);
1538     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1539     rosenRenderContext->SetAlwaysSnapshot(true);
1540     EXPECT_EQ(rosenRenderContext->rsNode_->GetStagingProperties().GetAlwaysSnapshot(), false);
1541 }
1542 
1543 /**
1544  * @tc.name: GetWithRange001
1545  * @tc.desc: Test GetWithRange Func.
1546  * @tc.type: FUNC
1547  */
1548 HWTEST_F(RosenRenderContextTest, GetWithRange001, TestSize.Level1)
1549 {
1550     /**
1551      * @tc.steps: step1.Mock data.
1552      */
1553     NodeIdentity startID;
1554     NodeIdentity endID;
1555     startID.first = "test1";
1556     endID.first = "test2";
1557     bool isStartRect = true;
1558     int32_t errorCode = 0;
1559     ComponentSnapshot::JsCallback callback = [&](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3202(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1560         std::function<void()> finishCallback) {
1561         errorCode = errCode;
1562     };
1563     SnapshotOptions options{};
1564 
1565     /**
1566      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1567      * @tc.expected: Check error code.
1568      */
1569     ComponentSnapshot snapshot;
1570     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1571     ASSERT_NE(callback, nullptr);
1572     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1573 }
1574 
1575 /**
1576  * @tc.name: GetWithRange002
1577  * @tc.desc: Test GetWithRange Func.
1578  * @tc.type: FUNC
1579  */
1580 HWTEST_F(RosenRenderContextTest, GetWithRange002, TestSize.Level1)
1581 {
1582     /**
1583      * @tc.steps: step1.Mock data.
1584      */
1585     NodeIdentity startID;
1586     NodeIdentity endID;
1587     startID.second = 0;
1588     endID.second = 0;
1589     bool isStartRect = true;
1590     int32_t errorCode = 0;
1591     ComponentSnapshot::JsCallback callback = [&](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3302(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1592         std::function<void()> finishCallback) {
1593         errorCode = errCode;
1594     };
1595     SnapshotOptions options{};
1596 
1597     /**
1598      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1599      * @tc.expected: Check error code.
1600      */
1601     ComponentSnapshot snapshot;
1602     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1603     ASSERT_NE(callback, nullptr);
1604     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1605 }
1606 
1607 /**
1608  * @tc.name: GetWithRange003
1609  * @tc.desc: Test GetWithRange Func.
1610  * @tc.type: FUNC
1611  */
1612 HWTEST_F(RosenRenderContextTest, GetWithRange003, TestSize.Level1)
1613 {
1614     /**
1615      * @tc.steps: step1.Mock data.
1616      */
1617     NodeIdentity startID;
1618     NodeIdentity endID;
1619     startID.first = "test";
1620     endID.second = 0;
1621     bool isStartRect = true;
1622     int32_t errorCode = 0;
1623     ComponentSnapshot::JsCallback callback = [&](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3402(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1624         std::function<void()> finishCallback) {
1625         errorCode = errCode;
1626     };
1627     SnapshotOptions options{};
1628 
1629     /**
1630      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1631      * @tc.expected: Check error code.
1632      */
1633     ComponentSnapshot snapshot;
1634     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1635     ASSERT_NE(callback, nullptr);
1636     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1637 }
1638 
1639 /**
1640  * @tc.name: GetWithRange004
1641  * @tc.desc: Test GetWithRange Func.
1642  * @tc.type: FUNC
1643  */
1644 HWTEST_F(RosenRenderContextTest, GetWithRange004, TestSize.Level1)
1645 {
1646     /**
1647      * @tc.steps: step1.Mock data.
1648      */
1649     NodeIdentity startID;
1650     NodeIdentity endID;
1651     startID.second = 0;
1652     endID.first = "test";
1653     bool isStartRect = true;
1654     int32_t errorCode = 0;
1655     ComponentSnapshot::JsCallback callback = [&](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3502(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1656         std::function<void()> finishCallback) {
1657         errorCode = errCode;
1658     };
1659     SnapshotOptions options{};
1660 
1661     /**
1662      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1663      * @tc.expected: Check error code.
1664      */
1665     ComponentSnapshot snapshot;
1666     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1667     ASSERT_NE(callback, nullptr);
1668     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1669 }
1670 
1671 /**
1672  * @tc.name: GetWithRange005
1673  * @tc.desc: Test GetWithRange Func.
1674  * @tc.type: FUNC
1675  */
1676 HWTEST_F(RosenRenderContextTest, GetWithRange005, TestSize.Level1)
1677 {
1678     /**
1679      * @tc.steps: step1.Mock data.
1680      */
1681     NodeIdentity startID;
1682     NodeIdentity endID;
1683     startID.first = "test1";
1684     startID.second = 0;
1685     endID.first = "test2";
1686     endID.second = 0;
1687     bool isStartRect = true;
1688     int32_t errorCode = 0;
1689     ComponentSnapshot::JsCallback callback = [&](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3602(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1690         std::function<void()> finishCallback) {
1691         errorCode = errCode;
1692     };
1693     SnapshotOptions options{};
1694 
1695     /**
1696      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1697      * @tc.expected: Check error code.
1698      */
1699     ComponentSnapshot snapshot;
1700     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1701     ASSERT_NE(callback, nullptr);
1702     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1703 }
1704 
1705 /**
1706  * @tc.name: GetWithRange006
1707  * @tc.desc: Test GetWithRange Func.
1708  * @tc.type: FUNC
1709  */
1710 HWTEST_F(RosenRenderContextTest, GetWithRange006, TestSize.Level1)
1711 {
1712     /**
1713      * @tc.steps: step1.Mock data.
1714      */
1715     auto startNode = FrameNode::CreateFrameNode("startNode", -1, AceType::MakeRefPtr<Pattern>());
1716     auto endNode = FrameNode::CreateFrameNode("endNode", -1, AceType::MakeRefPtr<Pattern>());
1717     NodeIdentity startID;
1718     NodeIdentity endID;
1719     bool isStartRect = true;
1720     int32_t errorCode = -1;
1721     ComponentSnapshot::JsCallback callback = [&errorCode](std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode,
__anon099ef3ef3702(std::shared_ptr<Media::PixelMap> pixmap, int32_t errCode, std::function<void()> finishCallback) 1722         std::function<void()> finishCallback) {
1723         errorCode = errCode;
1724     };
1725     SnapshotOptions options{};
1726 
1727     /**
1728      * @tc.steps: step2. Call ComponentSnapshot::GetWithRange.
1729      * @tc.expected: Check error code.
1730      */
1731     startID.first = "0";
1732     endID.first = "endNode";
1733     ComponentSnapshot snapshot;
1734     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1735     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1736 
1737     errorCode = -1;
1738     startID.first = "startNode";
1739     endID.first = "0";
1740     snapshot.GetWithRange(startID, endID, isStartRect, std::move(callback), options);
1741     EXPECT_EQ(errorCode, ERROR_CODE_INTERNAL_ERROR);
1742 }
1743 
1744 /**
1745  * @tc.name: GetRangeIDNode001
1746  * @tc.desc: Test GetRangeIDNode Func.
1747  * @tc.type: FUNC
1748  */
1749 HWTEST_F(RosenRenderContextTest, GetRangeIDNode001, TestSize.Level1)
1750 {
1751     /**
1752      * @tc.steps: step1.Mock data.
1753      */
1754     NodeIdentity startID;
1755     startID.first = "test1";
1756     startID.second = 0;
1757 
1758     /**
1759      * @tc.steps: step2. Call ComponentSnapshot::GetRangeIDNode.
1760      * @tc.expected: Check result.
1761      */
1762     ComponentSnapshot snapshot;
1763     auto startNode = snapshot.GetRangeIDNode(startID);
1764     EXPECT_EQ(startNode, nullptr);
1765 }
1766 
1767 /**
1768  * @tc.name: GetRangeIDNode002
1769  * @tc.desc: Test GetRangeIDNode Func.
1770  * @tc.type: FUNC
1771  */
1772 HWTEST_F(RosenRenderContextTest, GetRangeIDNode002, TestSize.Level1)
1773 {
1774     /**
1775      * @tc.steps: step1.Mock data.
1776      */
1777     NodeIdentity startID;
1778     startID.first = "";
1779     startID.second = 1;
1780 
1781     /**
1782      * @tc.steps: step2. Call ComponentSnapshot::GetRangeIDNode.
1783      * @tc.expected: Check result.
1784      */
1785     ComponentSnapshot snapshot;
1786     auto startNode = snapshot.GetRangeIDNode(startID);
1787     EXPECT_EQ(startNode, nullptr);
1788 }
1789 
1790 /**
1791  * @tc.name: GetRangeIDStr001
1792  * @tc.desc: Test GetRangeIDStr Func.
1793  * @tc.type: FUNC
1794  */
1795 HWTEST_F(RosenRenderContextTest, GetRangeIDStr001, TestSize.Level1)
1796 {
1797     /**
1798      * @tc.steps: step1.Mock data.
1799      */
1800     NodeIdentity startID;
1801     startID.first = "test1";
1802     startID.second = 0;
1803 
1804     /**
1805      * @tc.steps: step2. Call ComponentSnapshot::GetRangeIDStr.
1806      * @tc.expected: Check result.
1807      */
1808     ComponentSnapshot snapshot;
1809     auto startNode = snapshot.GetRangeIDStr(startID);
1810     EXPECT_EQ(startNode, "test1");
1811 }
1812 
1813 /**
1814  * @tc.name: GetRangeIDStr002
1815  * @tc.desc: Test GetRangeIDStr Func.
1816  * @tc.type: FUNC
1817  */
1818 HWTEST_F(RosenRenderContextTest, GetRangeIDStr002, TestSize.Level1)
1819 {
1820     /**
1821      * @tc.steps: step1.Mock data.
1822      */
1823     NodeIdentity startID;
1824     startID.first = "";
1825     startID.second = 1;
1826 
1827     /**
1828      * @tc.steps: step2. Call ComponentSnapshot::GetRangeIDStr.
1829      * @tc.expected: Check result.
1830      */
1831     ComponentSnapshot snapshot;
1832     auto startNode = snapshot.GetRangeIDStr(startID);
1833     EXPECT_EQ(startNode, "1");
1834 }
1835 
1836 /**
1837  * @tc.name: GetRangeIDStr003
1838  * @tc.desc: Test GetRangeIDStr Func.
1839  * @tc.type: FUNC
1840  */
1841 HWTEST_F(RosenRenderContextTest, GetRangeIDStr003, TestSize.Level1)
1842 {
1843     /**
1844      * @tc.steps: step1.Mock data.
1845      */
1846     NodeIdentity startID;
1847     startID.first = "";
1848     startID.second = 0;
1849 
1850     /**
1851      * @tc.steps: step2. Call ComponentSnapshot::GetRangeIDStr.
1852      * @tc.expected: Check result.
1853      */
1854     ComponentSnapshot snapshot;
1855     auto startNode = snapshot.GetRangeIDStr(startID);
1856     EXPECT_EQ(startNode, "0");
1857 }
1858 
1859 /**
1860  * @tc.name: CreateBackgroundPixelMap001
1861  * @tc.desc: Test CreateBackgroundPixelMap Func.
1862  * @tc.type: FUNC
1863  */
1864 HWTEST_F(RosenRenderContextTest, CreateBackgroundPixelMap001, TestSize.Level1)
1865 {
__anon099ef3ef3802() 1866     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1867     ASSERT_NE(frameNode, nullptr);
1868     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1869     ASSERT_NE(rosenRenderContext, nullptr);
1870     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1871 
1872     /**
1873      * @tc.steps: step1. Call CreateBackgroundPixelMap function.
1874      * @tc.expected: step1. The backgroundTaskId_ can be set correctly.
1875      */
1876     auto backgroundNode =
__anon099ef3ef3902() 1877         FrameNode::GetOrCreateFrameNode("background", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1878     ASSERT_NE(backgroundNode, nullptr);
1879     uint32_t backgroundTaskId = 1;
1880     rosenRenderContext->backgroundTaskId_ = backgroundTaskId;
1881     rosenRenderContext->CreateBackgroundPixelMap(backgroundNode);
1882     EXPECT_EQ(rosenRenderContext->backgroundTaskId_, backgroundTaskId + 1);
1883 }
1884 
1885 /**
1886  * @tc.name: OnCustomBackgroundColorUpdate001
1887  * @tc.desc: Test OnCustomBackgroundColorUpdate Func.
1888  * @tc.type: FUNC
1889  */
1890 HWTEST_F(RosenRenderContextTest, OnCustomBackgroundColorUpdate001, TestSize.Level1)
1891 {
__anon099ef3ef3a02() 1892     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1893     ASSERT_NE(frameNode, nullptr);
1894     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1895     ASSERT_NE(rosenRenderContext, nullptr);
1896     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1897     auto transitionModifier = rosenRenderContext->GetOrCreateTransitionModifier();
1898     ASSERT_NE(transitionModifier, nullptr);
1899 
1900     /**
1901      * @tc.steps: step1. Set custom background color.
1902      * @tc.expected: step1. Custom background color can be set correctly.
1903      */
1904     Color color = Color::BLUE;
1905     rosenRenderContext->OnCustomBackgroundColorUpdate(color);
1906     EXPECT_EQ(transitionModifier->backgroundColor_.GetValue(), color.GetValue());
1907 
1908     /**
1909      * @tc.steps: step2. Set custom background color while rsNode_ is null.
1910      * @tc.expected: step2. Custom background color set failed.
1911      */
1912     rosenRenderContext->rsNode_ = nullptr;
1913     rosenRenderContext->OnCustomBackgroundColorUpdate(Color::GREEN);
1914     EXPECT_EQ(transitionModifier->backgroundColor_.GetValue(), color.GetValue());
1915 }
1916 
1917 /**
1918  * @tc.name: OnBuilderBackgroundFlagUpdate001
1919  * @tc.desc: Test OnBuilderBackgroundFlagUpdate Func.
1920  * @tc.type: FUNC
1921  */
1922 HWTEST_F(RosenRenderContextTest, OnBuilderBackgroundFlagUpdate001, TestSize.Level1)
1923 {
__anon099ef3ef3b02() 1924     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1925     ASSERT_NE(frameNode, nullptr);
1926     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1927     ASSERT_NE(rosenRenderContext, nullptr);
1928     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1929     auto transitionModifier = rosenRenderContext->GetOrCreateTransitionModifier();
1930     ASSERT_NE(transitionModifier, nullptr);
1931 
1932     /**
1933      * @tc.steps: step1. Set BuilderBackgroundFlag.
1934      * @tc.expected: step1. BuilderBackgroundFlag can be set correctly.
1935      */
1936     rosenRenderContext->OnBuilderBackgroundFlagUpdate(true);
1937     EXPECT_TRUE(transitionModifier->isBuilderBackground_);
1938 
1939     /**
1940      * @tc.steps: step2. Set BuilderBackgroundFlag while rsNode_ is null.
1941      * @tc.expected: step2. BuilderBackgroundFlag set failed.
1942      */
1943     rosenRenderContext->rsNode_ = nullptr;
1944     rosenRenderContext->OnBuilderBackgroundFlagUpdate(false);
1945     EXPECT_TRUE(transitionModifier->isBuilderBackground_);
1946 }
1947 
1948 /**
1949  * @tc.name: OnBackgroundAlignUpdate001
1950  * @tc.desc: Test OnBackgroundAlignUpdate Func.
1951  * @tc.type: FUNC
1952  */
1953 HWTEST_F(RosenRenderContextTest, OnBackgroundAlignUpdate001, TestSize.Level1)
1954 {
__anon099ef3ef3c02() 1955     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1956     ASSERT_NE(frameNode, nullptr);
1957     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1958     ASSERT_NE(rosenRenderContext, nullptr);
1959     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1960     auto transitionModifier = rosenRenderContext->GetOrCreateTransitionModifier();
1961     ASSERT_NE(transitionModifier, nullptr);
1962     auto backgroundModifier = rosenRenderContext->GetOrCreateBackgroundModifier();
1963     ASSERT_NE(backgroundModifier, nullptr);
1964 
1965     /**
1966      * @tc.steps: step1. Set alignment.
1967      * @tc.expected: step1. alignment can be set correctly.
1968      */
1969     Alignment align = Alignment::TOP_CENTER;
1970     rosenRenderContext->OnBackgroundAlignUpdate(align);
1971     EXPECT_EQ(transitionModifier->align_.ToString(), align.ToString());
1972     EXPECT_EQ(backgroundModifier->align_.ToString(), align.ToString());
1973 
1974     /**
1975      * @tc.steps: step2. Set alignment while rsNode_ is null.
1976      * @tc.expected: step2. alignment set failed.
1977      */
1978     rosenRenderContext->rsNode_ = nullptr;
1979     rosenRenderContext->OnBackgroundAlignUpdate(Alignment::BOTTOM_RIGHT);
1980     EXPECT_EQ(transitionModifier->align_.ToString(), align.ToString());
1981     EXPECT_EQ(backgroundModifier->align_.ToString(), align.ToString());
1982 }
1983 
1984 /**
1985  * @tc.name: OnBackgroundPixelMapUpdate001
1986  * @tc.desc: Test OnBackgroundPixelMapUpdate Func.
1987  * @tc.type: FUNC
1988  */
1989 HWTEST_F(RosenRenderContextTest, OnBackgroundPixelMapUpdate001, TestSize.Level1)
1990 {
1991     const float EXPECT_WIDTH = 100.0f;
1992     const float EXPECT_HEIGHT = 150.0f;
__anon099ef3ef3d02() 1993     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
1994     ASSERT_NE(frameNode, nullptr);
1995     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
1996     ASSERT_NE(rosenRenderContext, nullptr);
1997     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
1998     auto transitionModifier = rosenRenderContext->GetOrCreateTransitionModifier();
1999     ASSERT_NE(transitionModifier, nullptr);
2000     auto backgroundModifier = rosenRenderContext->GetOrCreateBackgroundModifier();
2001     ASSERT_NE(backgroundModifier, nullptr);
2002 
2003     /**
2004      * @tc.steps: step1. Set alignment.
2005      * @tc.expected: step1. alignment can be set correctly.
2006      */
2007     RefPtr<PixelMap> pixelMap = AceType::MakeRefPtr<MockPixelMap>();
2008     auto geometryNode = frameNode->GetGeometryNode();
2009     ASSERT_NE(geometryNode, nullptr);
2010     geometryNode->SetFrameSize(SizeF(EXPECT_WIDTH, EXPECT_HEIGHT));
2011     rosenRenderContext->OnBackgroundPixelMapUpdate(pixelMap);
2012     RectF backgroundRegion = frameNode->GetBackGroundAccumulatedSafeAreaExpand();
2013     EXPECT_EQ(transitionModifier->initialBackgroundRegion_.ToString(), backgroundRegion.ToString());
2014     EXPECT_EQ(backgroundModifier->initialNodeWidth_, EXPECT_WIDTH);
2015     EXPECT_EQ(backgroundModifier->initialNodeHeight_, EXPECT_HEIGHT);
2016 
2017     /**
2018      * @tc.steps: step2. Set PixelMap while rsNode_ is null.
2019      * @tc.expected: step2. PixelMap set failed.
2020      */
2021     rosenRenderContext->rsNode_ = nullptr;
2022     transitionModifier->pixelMap_ = nullptr;
2023     backgroundModifier->pixelMap_ = nullptr;
2024     rosenRenderContext->OnBackgroundPixelMapUpdate(pixelMap);
2025     EXPECT_EQ(transitionModifier->pixelMap_, nullptr);
2026     EXPECT_EQ(backgroundModifier->pixelMap_, nullptr);
2027 }
2028 
2029 /**
2030  * @tc.name: UpdateCustomBackground001
2031  * @tc.desc: Test UpdateCustomBackground Func.
2032  * @tc.type: FUNC
2033  */
2034 HWTEST_F(RosenRenderContextTest, UpdateCustomBackground001, TestSize.Level1)
2035 {
__anon099ef3ef3e02() 2036     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2037     ASSERT_NE(frameNode, nullptr);
2038     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
2039     ASSERT_NE(rosenRenderContext, nullptr);
2040     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
2041 
2042     /**
2043      * @tc.steps: step1. Create transition modifier and get the modifier flag.
2044      * @tc.expected: step1. Creation successful.
2045      */
2046     rosenRenderContext->UpdateIsTransitionBackground(true);
2047     auto transitionModifier = rosenRenderContext->GetOrCreateTransitionModifier();
2048     ASSERT_NE(transitionModifier, nullptr);
2049     transitionModifier->Modify();
2050     ASSERT_NE(transitionModifier->flag_, nullptr);
2051     bool flag = transitionModifier->flag_->Get();
2052 
2053     /**
2054      * @tc.steps: step2. Call UpdateCustomBackground function.
2055      * @tc.expected: step2. The modifier flag is changed.
2056      */
2057     rosenRenderContext->UpdateCustomBackground();
2058     EXPECT_NE(transitionModifier->flag_->Get(), flag);
2059 }
2060 
2061 /**
2062  * @tc.name: OnTransform3DMatrixUpdate001
2063  * @tc.desc: Test OnTransform3DMatrixUpdate Func.
2064  * @tc.type: FUNC
2065  */
2066 HWTEST_F(RosenRenderContextTest, OnTransform3DMatrixUpdate001, TestSize.Level1)
2067 {
__anon099ef3ef3f02() 2068     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2069     ASSERT_NE(frameNode, nullptr);
2070     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
2071     ASSERT_NE(rosenRenderContext, nullptr);
2072     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
2073     float INDEX_0 = 0.0f;
2074     float INDEX_1 = 1.0f;
2075     float INDEX_100 = 100.0f;
2076     Matrix4 matrix4(INDEX_1, INDEX_0, INDEX_0, INDEX_0, INDEX_0, INDEX_1, INDEX_0, INDEX_0, INDEX_0, INDEX_0, INDEX_1,
2077         INDEX_0, INDEX_100, INDEX_0, INDEX_0, INDEX_1);
2078     rosenRenderContext->OnTransform3DMatrixUpdate(matrix4);
2079     auto perspectiveValue = rosenRenderContext->transformModifier_->GetPersp();
2080     auto xyTranslateValue = rosenRenderContext->transformModifier_->GetTranslate();
2081     auto translateZValue = rosenRenderContext->transformModifier_->GetTranslateZ();
2082     auto scaleXYValue = rosenRenderContext->transformModifier_->GetScale();
2083     auto scaleZValue = rosenRenderContext->transformModifier_->GetScaleZ();
2084     auto skewValue = rosenRenderContext->transformModifier_->GetSkew();
2085     auto quaternionValue = rosenRenderContext->transformModifier_->GetQuaternion();
2086     EXPECT_NE(perspectiveValue[0], 0);
2087     EXPECT_EQ(perspectiveValue[1], 0);
2088     EXPECT_EQ(perspectiveValue[2], 0);
2089     EXPECT_NE(perspectiveValue[3], 0);
2090     EXPECT_EQ(xyTranslateValue[0], 0);
2091     EXPECT_EQ(perspectiveValue[1], 0);
2092     EXPECT_EQ(translateZValue, 0);
2093     EXPECT_NE(scaleXYValue[0], 0);
2094     EXPECT_NE(scaleXYValue[1], 0);
2095     EXPECT_NE(scaleZValue, 0);
2096     EXPECT_EQ(skewValue[0], 0);
2097     EXPECT_EQ(skewValue[1], 0);
2098     EXPECT_EQ(skewValue[2], 0);
2099     EXPECT_EQ(quaternionValue[0], 0);
2100     EXPECT_EQ(quaternionValue[1], 0);
2101     EXPECT_EQ(quaternionValue[2], 0);
2102     EXPECT_NE(quaternionValue[3], 0);
2103 }
2104 
2105 /**
2106  * @tc.name: ClearModifiers001
2107  * @tc.desc: Test cast to RosenRenderContextTest
2108  * @tc.type: FUNC
2109  */
2110 HWTEST_F(RosenRenderContextTest, ClearModifiers001, TestSize.Level1)
2111 {
2112     /**
2113      * @tc.steps: step1. Build a object renderContext.
2114      */
__anon099ef3ef4002() 2115     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2116     ASSERT_NE(frameNode, nullptr);
2117     RefPtr<RosenRenderContext> rosenRenderContext = InitRosenRenderContext(frameNode);
2118     ASSERT_NE(rosenRenderContext, nullptr);
2119     auto rsNode = rosenRenderContext->rsNode_;
2120     ASSERT_NE(rsNode, nullptr);
2121 
2122     /**
2123      * @tc.steps: step2. set rotateZ is 90.
2124      * @tc.expected: GetRotation is 90.
2125      */
2126     auto angle = 90;
2127     rosenRenderContext->SetRotation(0, 0, angle);
2128     auto rotateZ = rsNode->GetStagingProperties().GetRotation();
2129     EXPECT_EQ(rotateZ, angle);
2130 
2131     /**
2132      * @tc.steps: step3. ClearModifiers.
2133      * @tc.expected: GetRotation is default value.
2134      */
2135     rosenRenderContext->ClearModifiers();
2136     rotateZ = rsNode->GetStagingProperties().GetRotation();
2137     EXPECT_EQ(rotateZ, 0);
2138 }
2139 
2140 /**
2141  * @tc.name: GetBitmapTest001
2142  * @tc.desc: Test RosenRenderContext GetBitmap with rsNode_ is nullptr
2143  * @tc.type: FUNC
2144  * @tc.require: issueICK0X0
2145  */
2146 HWTEST_F(RosenRenderContextTest, GetBitmapTest001, TestSize.Level1)
2147 {
2148     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2149     RenderContext::ContextParam contextParam;
2150     contextParam.type = RenderContext::ContextType::CANVAS;
2151     contextParam.surfaceName.emplace("test");
2152 
2153     rosenRenderContext->rsNode_ = nullptr;
2154     RSBitmap bitmap;
2155     bool ret = rosenRenderContext->GetBitmap(bitmap, nullptr);
2156     EXPECT_EQ(ret, false);
2157 }
2158 
2159 /**
2160  * @tc.name: GetBitmapTest002
2161  * @tc.desc: Test RosenRenderContext GetBitmap with rsNode_ is not nullptr
2162  * @tc.type: FUNC
2163  * @tc.require: issueICK0X0
2164  */
2165 HWTEST_F(RosenRenderContextTest, GetBitmapTest002, TestSize.Level1)
2166 {
2167     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2168     RenderContext::ContextParam contextParam;
2169     contextParam.type = RenderContext::ContextType::CANVAS;
2170     contextParam.surfaceName.emplace("test");
2171     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
2172     rosenRenderContext->InitContext(true, contextParamValue);
2173     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
2174 
2175     RSBitmap bitmap;
2176     bool ret = rosenRenderContext->GetBitmap(bitmap, nullptr);
2177     EXPECT_EQ(ret, false);
2178 }
2179 
2180 /**
2181  * @tc.name: GetPixelMapTest001
2182  * @tc.desc: Test RosenRenderContext GetPixelMap with rsNode_ is nullptr
2183  * @tc.type: FUNC
2184  * @tc.require: issueICK0X0
2185  */
2186 HWTEST_F(RosenRenderContextTest, GetPixelMapTest001, TestSize.Level1)
2187 {
2188     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2189     RenderContext::ContextParam contextParam;
2190     contextParam.type = RenderContext::ContextType::CANVAS;
2191     contextParam.surfaceName.emplace("test");
2192 
2193     rosenRenderContext->rsNode_ = nullptr;
2194     RSBitmap bitmap;
2195     bool ret = rosenRenderContext->GetPixelMap(nullptr, nullptr, nullptr);
2196     EXPECT_EQ(ret, false);
2197 }
2198 
2199 /**
2200  * @tc.name: GetPixelMapTest002
2201  * @tc.desc: Test RosenRenderContext GetPixelMap with rsNode_ is not nullptr
2202  * @tc.type: FUNC
2203  * @tc.require: issueICK0X0
2204  */
2205 HWTEST_F(RosenRenderContextTest, GetPixelMapTest002, TestSize.Level1)
2206 {
2207     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2208     RenderContext::ContextParam contextParam;
2209     contextParam.type = RenderContext::ContextType::CANVAS;
2210     contextParam.surfaceName.emplace("test");
2211     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
2212     rosenRenderContext->InitContext(true, contextParamValue);
2213     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
2214 
2215     RSBitmap bitmap;
2216     bool ret = rosenRenderContext->GetPixelMap(nullptr, nullptr, nullptr);
2217     EXPECT_EQ(ret, false);
2218 }
2219 
2220 /**
2221  * @tc.name: RemoveFromTreeTest001
2222  * @tc.desc: Test RosenRenderContext RemoveFromTree
2223  * @tc.type: FUNC
2224  */
2225 HWTEST_F(RosenRenderContextTest, RemoveFromTreeTest001, TestSize.Level1)
2226 {
2227     /**
2228      * @tc.steps: step1. construct a rosenRenderContext
2229      */
2230     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2231     ASSERT_NE(rosenRenderContext, nullptr);
2232     ASSERT_EQ(rosenRenderContext->rsNode_, nullptr);
2233 
2234      /**
2235      * @tc.steps: step2. test RemoveFromTree function
2236      */
2237     rosenRenderContext->RemoveFromTree();
2238     ASSERT_EQ(rosenRenderContext->rsNode_, nullptr);
2239 }
2240 
2241 /**
2242  * @tc.name: RemoveFromTreeTest002
2243  * @tc.desc: Test RosenRenderContext RemoveFromTree
2244  * @tc.type: FUNC
2245  */
2246 HWTEST_F(RosenRenderContextTest, RemoveFromTreeTest002, TestSize.Level1)
2247 {
2248     /**
2249      * @tc.steps: step1. construct a RemoveFromTree
2250      */
2251     auto rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
2252     RenderContext::ContextParam contextParam;
2253     contextParam.type = RenderContext::ContextType::CANVAS;
2254     contextParam.surfaceName.emplace("test");
2255     std::optional<RenderContext::ContextParam> contextParamValue = std::make_optional(contextParam);
2256     rosenRenderContext->InitContext(true, contextParamValue);
2257     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
2258 
2259     /**
2260      * @tc.steps: step2. test RemoveFromTree function
2261      */
2262     rosenRenderContext->RemoveFromTree();
2263     EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true);
2264     EXPECT_EQ(rosenRenderContext->rsNode_->isOnTheTreeInit_, true);
2265     EXPECT_EQ(rosenRenderContext->rsNode_->isOnTheTree_, false);
2266 }
2267 
2268 class MockRosenRenderContext : public RosenRenderContext {
2269 public:
2270     MOCK_METHOD1(SetNeedUseCmdlistDrawRegion, void(bool needUseCmdlistDrawRegion));
2271 };
2272 
2273 /**
2274  * @tc.name: SetNeedUseCmdlistDrawRegion001
2275  * @tc.desc: Test RosenRenderContext SetNeedUseCmdlistDrawRegion
2276  * @tc.type: FUNC
2277  */
2278 HWTEST_F(RosenRenderContextTest, SetNeedUseCmdlistDrawRegion001, TestSize.Level1)
2279 {
2280     auto mockRosenRenderContext = AceType::MakeRefPtr<MockRosenRenderContext>();
2281     EXPECT_CALL(*mockRosenRenderContext, SetNeedUseCmdlistDrawRegion(_)).Times(2);
2282     mockRosenRenderContext->SetNeedUseCmdlistDrawRegion(true);
2283     mockRosenRenderContext->SetNeedUseCmdlistDrawRegion(false);
2284 }
2285 
2286 /**
2287  * @tc.name: ShouldSkipAffineTransformation001
2288  * @tc.desc: Test ShouldSkipAffineTransformation Func.
2289  * @tc.type: FUNC
2290  */
2291 HWTEST_F(RosenRenderContextTest, ShouldSkipAffineTransformation001, TestSize.Level1)
2292 {
__anon099ef3ef4102() 2293     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2294     ASSERT_NE(frameNode, nullptr);
2295     RefPtr rosenRenderContext = InitRosenRenderContext(frameNode);
2296     ASSERT_NE(rosenRenderContext, nullptr);
2297     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
2298     rosenRenderContext->rsNode_->SetDrawNodeType(Rosen::DrawNodeType::DrawPropertyType);
2299     bool res = rosenRenderContext->ShouldSkipAffineTransformation(rosenRenderContext->rsNode_);
2300     rosenRenderContext->rsNode_->SetDrawNodeType(Rosen::DrawNodeType::GeometryPropertyType);
2301     res = rosenRenderContext->ShouldSkipAffineTransformation(rosenRenderContext->rsNode_);
2302     ASSERT_EQ(res, false);
2303     rosenRenderContext->rsNode_ = nullptr;
2304     ASSERT_EQ(rosenRenderContext->rsNode_, nullptr);
2305 }
2306 
2307 /**
2308  * @tc.name: ShouldSkipAffineTransformation002
2309  * @tc.desc: Test ShouldSkipAffineTransformation Func.
2310  * @tc.type: FUNC
2311  */
2312 HWTEST_F(RosenRenderContextTest, ShouldSkipAffineTransformation002, TestSize.Level1)
2313 {
__anon099ef3ef4202() 2314     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2315     ASSERT_NE(frameNode, nullptr);
2316     RefPtr rosenRenderContext = InitRosenRenderContext(frameNode);
2317     ASSERT_NE(rosenRenderContext, nullptr);
2318     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
2319     rosenRenderContext->paintRect_ = RectT<float>(1.0f, 1.0f, -1.0f, 1.0f);
2320     rosenRenderContext->GetPaintRectWithTransform();
2321     rosenRenderContext->GetPaintRectWithTransformWithoutDegree();
2322     ASSERT_EQ(rosenRenderContext->paintRect_, RectT<float>(1.0f, 1.0f, -1.0f, 1.0f));
2323     rosenRenderContext->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, -1.0f);
2324     rosenRenderContext->GetPaintRectWithTransform();
2325     rosenRenderContext->GetPaintRectWithTransformWithoutDegree();
2326     ASSERT_EQ(rosenRenderContext->paintRect_, RectT<float>(1.0f, 1.0f, 1.0f, -1.0f));
2327     rosenRenderContext->paintRect_ = RectT<float>(1.0f, 1.0f, 1.0f, 1.0f);
2328     rosenRenderContext->GetPaintRectWithTransform();
2329     rosenRenderContext->GetPaintRectWithTransformWithoutDegree();
2330     ASSERT_EQ(rosenRenderContext->paintRect_, RectT<float>(1.0f, 1.0f, 1.0f, 1.0f));
2331     rosenRenderContext->rsNode_ = nullptr;
2332     ASSERT_EQ(rosenRenderContext->rsNode_, nullptr);
2333 }
2334 
2335 /**
2336  * @tc.name: RSUIContext001
2337  * @tc.desc: Test RSUIContext001 Func.
2338  * @tc.type: FUNC
2339  */
2340 HWTEST_F(RosenRenderContextTest, RSUIContext001, TestSize.Level1)
2341 {
__anon099ef3ef4302() 2342     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2343     ASSERT_NE(frameNode, nullptr);
2344     ComponentSnapshot snapshot;
2345     snapshot.SetRSUIContext(frameNode, nullptr);
2346     auto pipeline = MockPipelineContext::GetCurrentContext();
2347     auto rsUIContext = snapshot.GetRSUIContext(pipeline);
2348     EXPECT_EQ(rsUIContext, nullptr);
2349 }
2350 
2351 /**
2352  * @tc.name: OnZindexUpdate001
2353  * @tc.desc: Test OnZindexUpdate Func.
2354  * @tc.type: FUNC
2355  */
2356 HWTEST_F(RosenRenderContextTest, OnZindexUpdate001, TestSize.Level1)
2357 {
__anon099ef3ef4402() 2358     auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr<Pattern>(); });
2359     ASSERT_NE(frameNode, nullptr);
2360     RefPtr rosenRenderContext = InitRosenRenderContext(frameNode);
2361     ASSERT_NE(rosenRenderContext, nullptr);
2362     ASSERT_NE(rosenRenderContext->rsNode_, nullptr);
2363 
2364     /**
2365      * @tc.steps: step1. Set zIndex.
2366      * @tc.expected: step1. zIndex set success.
2367      */
2368     rosenRenderContext->OnZIndexUpdate(2);
2369     auto rsNdoe = rosenRenderContext->GetRSNode();
2370     auto stagingProperties = rsNdoe->GetStagingProperties();
2371     auto positionZ = stagingProperties.GetPositionZ();
2372     EXPECT_EQ(positionZ, 2);
2373 
2374     /**
2375      * @tc.steps: step2. Set Layouting and zIndex.
2376      * @tc.expected: step2. zIndex set success.
2377      */
2378     auto pipeline = MockPipelineContext::GetCurrentContext();
2379     pipeline->SetIsLayouting(true);
2380     rosenRenderContext->OnZIndexUpdate(3);
2381     pipeline->taskScheduler_->FlushTask();
2382     positionZ = stagingProperties.GetPositionZ();
2383     EXPECT_EQ(positionZ, 3);
2384 }
2385 } // namespace OHOS::Ace::NG
2386