• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 iSoftStone Information Technology (Group) 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 "gtest/gtest.h"
16 #include "gmock/gmock.h"
17 
18 #include "base/utils/utils.h"
19 #define protected public
20 #define private public
21 #include "test/mock/core/pipeline/mock_pipeline_context.h"
22 
23 #include "core/components_ng/render/debug_boundary_painter.h"
24 #include "core/components_ng/render/render_context.h"
25 #include "core/components_ng/base/frame_node.h"
26 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
27 
28 #undef private
29 #undef protected
30 
31 using namespace testing;
32 using namespace testing::ext;
33 
34 namespace OHOS::Ace {
35 namespace {
36 const NG::InspectorFilter filter;
37 std::string srcimages = "test";
38 constexpr char TAG_ROOT[] = "root";
39 const std::string MATRIX_STRING1 = "1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,";
40 const std::string MATRIX_STRING2 = "0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,";
41 const float VALUE = 1.0f;
42 const float MAXVALUE = 200.0f;
43 const Color RED = Color(0xffff0000);
44 const Color BLACK = Color(0xff000000);
45 const Color WHITE = Color(0xffffffff);
46 
47 constexpr Dimension ZERO_TEST {0.0f, DimensionUnit::PX};
48 constexpr Dimension LEFT_TEST {10.0f, DimensionUnit::PX};
49 constexpr Dimension TOP_TEST {20.0f, DimensionUnit::PX};
50 constexpr Dimension RIGHT_TEST {30.0f, DimensionUnit::PX};
51 constexpr Dimension BOTTOM_TEST {40.0f, DimensionUnit::PX};
52 
CreateProgressMaskProperty()53 RefPtr<NG::ProgressMaskProperty> CreateProgressMaskProperty()
54 {
55     RefPtr<NG::ProgressMaskProperty> progressMaskProperty = AceType::MakeRefPtr<NG::ProgressMaskProperty>();
56     progressMaskProperty->SetMaxValue(MAXVALUE);
57     progressMaskProperty->SetColor(RED);
58     progressMaskProperty->SetValue(VALUE);
59     return progressMaskProperty;
60 };
61 
MakeProperty(NG::RenderContext & renderContext)62 void MakeProperty(NG::RenderContext& renderContext)
63 {
64     renderContext.propBorder_ = std::make_unique<NG::BorderProperty>();
65     renderContext.propOuterBorder_ = std::make_unique<NG::OuterBorderProperty>();
66     renderContext.propBdImage_ = std::make_unique<NG::BorderImageProperty>();
67     renderContext.propOverlay_ = std::make_unique<NG::OverlayProperty>();
68     renderContext.propPositionProperty_ = std::make_unique<NG::RenderPositionProperty>();
69     renderContext.propBackground_ = std::make_unique<NG::BackgroundProperty>();
70     renderContext.propGraphics_ = std::make_unique<NG::GraphicsProperty>();
71     renderContext.propGradient_ = std::make_unique<NG::GradientProperty>();
72     renderContext.propTransform_ = std::make_unique<NG::TransformProperty>();
73     renderContext.propClip_ = std::make_unique<NG::ClipProperty>();
74 };
75 }
76 
77 class RenderContextTestNg : public testing::Test {
78 public:
79     void SetUp() override;
80     void TearDown() override;
81 };
82 
SetUp()83 void RenderContextTestNg::SetUp()
84 {
85     NG::MockPipelineContext::SetUp();
86 }
87 
TearDown()88 void RenderContextTestNg::TearDown()
89 {
90     NG::MockPipelineContext::TearDown();
91 }
92 
93 /**
94  * @tc.name: RenderContextTest001
95  * @tc.desc: Test cast to RenderContextTestNg
96  * @tc.type: FUNC
97  */
98 HWTEST_F(RenderContextTestNg, RenderContextTest001, TestSize.Level1)
99 {
100     /**
101      * @tc.steps: step1. Build a object renderContext.
102      */
103     NG::RenderContext renderContext;
__anond7ff4d540202() 104     auto requestFrame = []() {
105         srcimages = "common/images/mmm.jpg";
106     };
107 
108     /**
109      * @tc.steps: step2. callback SetRequestFrame.
110      * @tc.expected: step2. The renderContext.requestFrame_ is not null.
111      */
112     renderContext.SetRequestFrame(requestFrame);
113     EXPECT_EQ(srcimages, "test");
114     ASSERT_NE(renderContext.requestFrame_, nullptr);
115 }
116 
117 /**
118  * @tc.name: RenderContextTest002
119  * @tc.desc: Test cast to RenderContextTestNg
120  * @tc.type: FUNC
121  */
122 HWTEST_F(RenderContextTestNg, RenderContextTest002, TestSize.Level1)
123 {
124     /**
125      * @tc.steps: step1. Build a object renderContext.
126      */
127     NG::RenderContext renderContext;
__anond7ff4d540302() 128     auto requestFrame = []() {
129         srcimages = "common/images/mmm.jpg";
130     };
131 
132     /**
133      * @tc.steps: step2. callback RequestNextFrame.
134      * @tc.expected: step2. The renderContext.requestFrame_ is null.
135      */
136     renderContext.RequestNextFrame();
137     EXPECT_EQ(srcimages, "test");
138     EXPECT_EQ(renderContext.requestFrame_, nullptr);
139 
140     /**
141      * @tc.steps: step3. callback RequestNextFrame.
142      * @tc.expected: step3. The renderContext.requestFrame_ is not null.
143      */
144     renderContext.SetRequestFrame(requestFrame);
145     renderContext.RequestNextFrame();
146     EXPECT_EQ(srcimages, "common/images/mmm.jpg");
147     ASSERT_NE(renderContext.requestFrame_, nullptr);
148 }
149 
150 /**
151  * @tc.name: RenderContextTest003
152  * @tc.desc: Test cast to RenderContextTestNg
153  * @tc.type: FUNC
154  */
155 HWTEST_F(RenderContextTestNg, RenderContextTest003, TestSize.Level1)
156 {
157     /**
158      * @tc.steps: step1. Build a object renderContext.
159      */
160     NG::RenderContext renderContext;
161     auto rowFrameNode =
162         NG::FrameNode::CreateFrameNode(TAG_ROOT, 0, AceType::MakeRefPtr<NG::LinearLayoutPattern>(false));
163 
164     /**
165      * @tc.steps: step2. callback GetHost.
166      * @tc.expected: step2. expected result is null.
167      */
168     RefPtr<NG::FrameNode> result = renderContext.GetHost();
169     EXPECT_EQ(result, nullptr);
170 
171     /**
172      * @tc.steps: step2. callback SetHostNode.
173      * @tc.expected: step2. The renderContext.host_ = rowFrameNode.
174      * @tc.expected: step2. The renderContext.host_.Upgrade() is not null.
175      */
176     renderContext.SetHostNode(rowFrameNode);
177     EXPECT_EQ(renderContext.host_, rowFrameNode);
178     ASSERT_NE(renderContext.host_.Upgrade(), nullptr);
179 
180     /**
181      * @tc.steps: step3. callback GetHost.
182      * @tc.expected: step3. expected results is not null.
183      */
184     RefPtr<NG::FrameNode> results = renderContext.GetHost();
185     ASSERT_NE(results, nullptr);
186 }
187 
188 /**
189  * @tc.name: RenderContextTest004
190  * @tc.desc: Test cast to RenderContextTestNg
191  * @tc.type: FUNC
192  */
193 HWTEST_F(RenderContextTestNg, RenderContextTest004, TestSize.Level1)
194 {
195     /**
196      * @tc.steps: step1. Build a object renderContext.
197      */
198     NG::RenderContext renderContext;
199 
200     /**
201      * @tc.steps: step2. callback ToJsonValue.push propTransformMatrix_ is null.
202      * @tc.steps: step2. push propProgressMask_ is null.push propPixelStretchEffect_ is null.
203      */
204     auto json = JsonUtil::Create(true);
205     renderContext.ToJsonValue(json, filter);
206 
207     /**
208      * @tc.expected: Return expected results..
209      */
210     EXPECT_EQ(json->GetString("total"), "");
211     EXPECT_EQ(json->GetString("updateProgress"), "");
212     EXPECT_EQ(json->GetString("updateColor"), "");
213     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("left"), ZERO_TEST.ToString());
214     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("right"), ZERO_TEST.ToString());
215     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("top"), ZERO_TEST.ToString());
216     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("bottom"), ZERO_TEST.ToString());
217     EXPECT_EQ(json->GetString("backgroundColor"), "#00000000");
218     EXPECT_EQ(json->GetString("foregroundColor"), "#00000001");
219     EXPECT_EQ(json->GetString("transform"), "");
220 }
221 
222 /**
223  * @tc.name: RenderContextTest005
224  * @tc.desc: Test cast to RenderContextTestNg
225  * @tc.type: FUNC
226  */
227 HWTEST_F(RenderContextTestNg, RenderContextTest005, TestSize.Level1)
228 {
229     /**
230      * @tc.steps: step1. Build a object renderContext.
231      */
232     NG::RenderContext renderContext;
233     auto json = JsonUtil::Create(true);
234 
235     /**
236      * @tc.steps: step2. callback ToJsonValue.push propProgressMask_ is not null.
237      */
238     MakeProperty(renderContext);
239     renderContext.propProgressMask_ = CreateProgressMaskProperty();
240     renderContext.ToJsonValue(json, filter);
241 
242     /**
243      * @tc.expected: Return expected results.
244      */
245     EXPECT_EQ(json->GetString("total"), "");
246     EXPECT_EQ(json->GetString("updateProgress"), "");
247     EXPECT_EQ(json->GetString("updateColor"), "#FFFF0000");
248 }
249 
250 /**
251  * @tc.name: RenderContextTest006
252  * @tc.desc: Test cast to RenderContextTestNg
253  * @tc.type: FUNC
254  */
255 HWTEST_F(RenderContextTestNg, RenderContextTest006, TestSize.Level1)
256 {
257     /**
258      * @tc.steps: step1. Build a object renderContext.
259      */
260     NG::RenderContext renderContext;
261     auto json = JsonUtil::Create(true);
262 
263     PixStretchEffectOption pixStretchEffectOption;
264     pixStretchEffectOption.bottom = BOTTOM_TEST;
265     pixStretchEffectOption.left = LEFT_TEST;
266     pixStretchEffectOption.right= RIGHT_TEST;
267     pixStretchEffectOption.top = TOP_TEST;
268 
269     /**
270      * @tc.steps: step2. callback ToJsonValue.push propPixelStretchEffect_ is not null.
271      */
272     MakeProperty(renderContext);
273     renderContext.propPixelStretchEffect_ = std::move(pixStretchEffectOption);
274     renderContext.ToJsonValue(json, filter);
275 
276     /**
277      * @tc.expected: Return expected results.
278      */
279     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("left"), LEFT_TEST.ToString());
280     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("right"), RIGHT_TEST.ToString());
281     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("top"), TOP_TEST.ToString());
282     EXPECT_EQ(json->GetValue("pixelStretchEffect")->GetString("bottom"), BOTTOM_TEST.ToString());
283 }
284 
285 /**
286  * @tc.name: RenderContextTest007
287  * @tc.desc: Test cast to RenderContextTestNg
288  * @tc.type: FUNC
289  */
290 HWTEST_F(RenderContextTestNg, RenderContextTest007, TestSize.Level1)
291 {
292     /**
293      * @tc.steps: step1. Build a object renderContext.
294      */
295     NG::RenderContext renderContext;
296     auto json = JsonUtil::Create(true);
297 
298     /**
299      * @tc.steps: step2. callback ToJsonValue.push propBackgroundColor_ is BLACK.
300      * @tc.steps: step2. push propForegroundColor_ is WHITE.
301      */
302     MakeProperty(renderContext);
303     renderContext.propBackgroundColor_ = BLACK;
304     renderContext.propForegroundColor_ = WHITE;
305     renderContext.ToJsonValue(json, filter);
306 
307     /**
308      * @tc.expected: Return expected results.
309      */
310     EXPECT_EQ(json->GetString("backgroundColor"), "#FF000000");
311     EXPECT_EQ(json->GetString("foregroundColor"), "#FFFFFFFF");
312 }
313 
314 /**
315  * @tc.name: RenderContextTest008
316  * @tc.desc: Test cast to RenderContextTestNg
317  * @tc.type: FUNC
318  */
319 HWTEST_F(RenderContextTestNg, RenderContextTest008, TestSize.Level1)
320 {
321     /**
322      * @tc.steps: step1. Build a object renderContext.
323      */
324     NG::RenderContext renderContext;
325     auto json = JsonUtil::Create(true);
326 
327     /**
328      * @tc.steps: step2. callback ToJsonValue.push propTransformMatrix_ is CreateIdentity.
329      */
330     MakeProperty(renderContext);
331     renderContext.propTransformMatrix_ = Matrix4::CreateIdentity();;
332     renderContext.ToJsonValue(json, filter);
333 
334     /**
335      * @tc.expected: Return expected results.
336      */
337     EXPECT_EQ(json->GetValue("transform")->GetString("type"), "matrix");
338     EXPECT_EQ(json->GetValue("transform")->GetString("matrix"), MATRIX_STRING1 + MATRIX_STRING2);
339 }
340 
341 /**
342  * @tc.name: RenderContextTest009
343  * @tc.desc: Test function RequestNextFrame
344  * @tc.type: FUNC
345  */
346 HWTEST_F(RenderContextTestNg, RenderContextTest009, TestSize.Level1)
347 {
348     /**
349      * @tc.steps: step1. create a frameNode ande update renderContext.
350      */
351     auto frameNode = NG::FrameNode::CreateFrameNode(TAG_ROOT, 0, AceType::MakeRefPtr<NG::LinearLayoutPattern>(false));
352     frameNode->UpdateInspectorId("123");
353     auto renderContext = frameNode->GetRenderContext();
__anond7ff4d540402() 354     renderContext->requestFrame_ = []() {};
355     NG::BorderWidthProperty borderWidth = { 1.0_vp, 1.0_vp, 1.0_vp, 1.0_vp };
356     auto layoutProperty = AceType::MakeRefPtr<NG::LayoutProperty>();
357     layoutProperty->UpdateBorderWidth(borderWidth);
358     RefPtr<NG::LayoutWrapper> layoutWrapper = frameNode->CreateLayoutWrapper(true, true);
359     layoutWrapper->SetActive(true);
__anond7ff4d540502() 360     auto builderFunc = []() -> RefPtr<NG::UINode> { return nullptr; };
361     frameNode->SetBackgroundFunction(builderFunc);
362     frameNode->SetLayoutProperty(layoutProperty);
363     frameNode->SwapDirtyLayoutWrapperOnMainThread(layoutWrapper);
364 
365     /**
366      * @tc.steps: step2. call the function RequestNextFrame.
367      */
368     renderContext->RequestNextFrame();
369     EXPECT_EQ(renderContext->GetBorderColor()->leftColor.value(), Color::BLACK);
370     EXPECT_NE(renderContext->GetUnsafeHost(), nullptr);
371     EXPECT_FALSE(renderContext->HasSharedTransition());
372 }
373 
374 /**
375  * @tc.name: RenderContextTest010
376  * @tc.desc: Test cast to RenderContextTestNg
377  * @tc.type: FUNC
378  */
379 HWTEST_F(RenderContextTestNg, RenderContextTest010, TestSize.Level1)
380 {
381     /**
382      * @tc.steps: step1. Build a object renderContext.
383      */
384     NG::RenderContext renderContext;
385     auto json = JsonUtil::Create(true);
386     NG::InspectorFilter testFilter;
387     testFilter.AddFilterAttr("focusable");
388 
389     /**
390      * @tc.steps: step2. callback ToJsonValue.push propTransformMatrix_ is CreateIdentity.
391      */
392     MakeProperty(renderContext);
393     renderContext.propTransformMatrix_ = Matrix4::CreateIdentity();;
394     renderContext.ToJsonValue(json, testFilter);
395 
396     /**
397      * @tc.expected: Return expected results.
398      */
399     EXPECT_EQ(json->GetValue("transform")->GetString("type"), "");
400 }
401 
402 /**
403  * @tc.name: RenderContextTest011
404  * @tc.desc: Test cast to RenderContextTestNg
405  * @tc.type: FUNC
406  */
407 HWTEST_F(RenderContextTestNg, RenderContextTest011, TestSize.Level1)
408 {
409     /**
410      * @tc.steps: step1. Build a object renderContext.
411      */
412     NG::RenderContext renderContext;
413     auto json = JsonUtil::Create(true);
414     NG::DebugBoundaryPainter painter;
415     RSCanvas canvas;
416     painter.PaintDebugBoundary(canvas, NG::OffsetF(1.0, 1.0));
417     painter.PaintDebugCorner(canvas, NG::OffsetF(1.0, 1.0));
418     painter.PaintDebugMargin(canvas, NG::OffsetF(1.0, 1.0));
419 
420     /**
421      * @tc.steps: step2. callback ToJsonValue.push propTransformMatrix_ is CreateIdentity.
422      */
423     MakeProperty(renderContext);
424     renderContext.propTransformMatrix_ = Matrix4::CreateIdentity();
425     ClickEffectInfo clickEffect;
426     clickEffect.level = ClickEffectLevel::LIGHT;
427     renderContext.UpdateClickEffectLevel(clickEffect);
428     std::vector<ObscuredReasons> obscuredReasons;
429     obscuredReasons.emplace_back(ObscuredReasons::PLACEHOLDER);
430     renderContext.UpdateObscured(obscuredReasons);
431     renderContext.ToJsonValue(json, filter);
432 
433     /**
434      * @tc.expected: Return expected results.
435      */
436     EXPECT_EQ(json->GetValue("transform")->GetString("type"), "matrix");
437     EXPECT_EQ(json->GetValue("transform")->GetString("matrix"), MATRIX_STRING1 + MATRIX_STRING2);
438 }
439 
440 /**
441  * @tc.name: RenderContextTest012
442  * @tc.desc: Test cast to RenderContextTestNg
443  * @tc.type: FUNC
444  */
445 HWTEST_F(RenderContextTestNg, RenderContextTest012, TestSize.Level1)
446 {
447     /**
448      * @tc.steps: step1. Build a object renderContext.
449      */
450     NG::RenderContext renderContextOne;
451     NG::RenderContext renderContextTwo;
452     NG::RenderContext renderContextThree;
453     auto jsonOne = JsonUtil::Create(true);
454     auto jsonTwo = JsonUtil::Create(true);
455     auto jsonThree = JsonUtil::Create(true);
456 
457     /**
458      * @tc.steps: step2. callback ToJsonValue.push propTransformMatrix_ is CreateIdentity.
459      */
460     MakeProperty(renderContextOne);
461     MakeProperty(renderContextTwo);
462     MakeProperty(renderContextThree);
463     jsonOne->Put("clip", "false");
464     renderContextOne.FromJson(jsonOne);
465     EXPECT_FALSE(renderContextOne.GetClipEdge().value());
466     renderContextTwo.UpdateClipEdge(false);
467     jsonTwo->Put("clip", "normal");
468     renderContextTwo.FromJson(jsonTwo);
469     EXPECT_FALSE(renderContextTwo.GetClipEdge().value());
470     jsonThree->Put("clip", "true");
471     renderContextThree.FromJson(jsonThree);
472     EXPECT_TRUE(renderContextThree.GetClipEdge().value());
473 }
474 } // namespace OHOS::Ace
475