• 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 
16 #include <string>
17 
18 #include "gtest/gtest.h"
19 
20 #define private public
21 #define protected public
22 
23 #include "include/core/SkStream.h"
24 #include "test/mock/core/common/mock_container.h"
25 #include "test/mock/core/rosen/mock_canvas.h"
26 
27 #include "base/memory/ace_type.h"
28 #include "core/components/common/layout/constants.h"
29 #include "core/components/common/properties/color.h"
30 #include "core/components/common/properties/decoration.h"
31 #include "core/components/declaration/svg/svg_animate_declaration.h"
32 #include "core/components/declaration/svg/svg_circle_declaration.h"
33 #include "core/components/declaration/svg/svg_declaration.h"
34 #include "core/components/declaration/svg/svg_ellipse_declaration.h"
35 #include "core/components/declaration/svg/svg_fe_blend_declaration.h"
36 #include "core/components/declaration/svg/svg_fe_colormatrix_declaration.h"
37 #include "core/components/declaration/svg/svg_fe_composite_declaration.h"
38 #include "core/components/declaration/svg/svg_fe_declaration.h"
39 #include "core/components/declaration/svg/svg_fe_flood_declaration.h"
40 #include "core/components/declaration/svg/svg_fe_gaussianblur_declaration.h"
41 #include "core/components/declaration/svg/svg_filter_declaration.h"
42 #include "core/components/declaration/svg/svg_gradient_declaration.h"
43 #include "core/components/declaration/svg/svg_image_declaration.h"
44 #include "core/components/declaration/svg/svg_line_declaration.h"
45 #include "core/components/declaration/svg/svg_mask_declaration.h"
46 #include "core/components/declaration/svg/svg_path_declaration.h"
47 #include "core/components/declaration/svg/svg_pattern_declaration.h"
48 #include "core/components/declaration/svg/svg_polygon_declaration.h"
49 #include "core/components/declaration/svg/svg_rect_declaration.h"
50 #include "core/components/declaration/svg/svg_stop_declaration.h"
51 #include "core/components_ng/render/drawing.h"
52 #include "core/components_ng/svg/parse/svg_animation.h"
53 #include "core/components_ng/svg/parse/svg_circle.h"
54 #include "core/components_ng/svg/parse/svg_clip_path.h"
55 #include "core/components_ng/svg/parse/svg_defs.h"
56 #include "core/components_ng/svg/parse/svg_fe_color_matrix.h"
57 #include "core/components_ng/svg/parse/svg_fe_composite.h"
58 #include "core/components_ng/svg/parse/svg_fe_offset.h"
59 #include "core/components_ng/svg/parse/svg_filter.h"
60 #include "core/components_ng/svg/parse/svg_g.h"
61 #include "core/components_ng/svg/parse/svg_gradient.h"
62 #include "core/components_ng/svg/parse/svg_mask.h"
63 #include "core/components_ng/svg/parse/svg_path.h"
64 #include "core/components_ng/svg/parse/svg_pattern.h"
65 #include "core/components_ng/svg/parse/svg_polygon.h"
66 #include "core/components_ng/svg/parse/svg_rect.h"
67 #include "core/components_ng/svg/parse/svg_stop.h"
68 #include "core/components_ng/svg/parse/svg_svg.h"
69 #include "core/components_ng/svg/parse/svg_use.h"
70 #include "core/components_ng/svg/svg_dom.h"
71 
72 using namespace testing;
73 using namespace testing::ext;
74 namespace OHOS::Ace::NG {
75 namespace {
76 const std::string CIRCLE_SVG_LABEL =
77     "<svg width=\"400px\" height=\"400px\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"60px\" "
78     "cy=\"200px\" r = \"50px\" fill=\"red\" opacity=\"0.5\" stroke=\"blue\" stroke-width=\"16px\" "
79     "stroke-opacity=\"0.3\" id=\"circleId\"/></svg>";
80 } // namespace
81 
82 class SvgNodeTestNg : public testing::Test {
83 public:
SetUpTestSuite()84     static void SetUpTestSuite()
85     {
86         MockContainer::SetUp();
87     }
TearDownTestSuite()88     static void TearDownTestSuite()
89     {
90         MockContainer::TearDown();
91     }
92 };
93 
94 class MockSvgGraphic : public SvgGraphic {
95 public:
96     MockSvgGraphic() = default;
97     ~MockSvgGraphic() = default;
98 
99     MOCK_METHOD2(SetLinearGradient, void(const Size& viewPort, OHOS::Ace::Gradient& gradient));
100     MOCK_METHOD2(SetRadialGradient, void(const Size& viewPort, OHOS::Ace::Gradient& gradient));
101     MOCK_METHOD3(RectifyTargetSize, void(const Rect& bounds, double& width, double& height));
102 };
103 
104 /**
105  * @tc.name: feOffsetTest
106  * @tc.desc: test feOffsetTest
107  * @tc.type: FUNC
108  */
109 HWTEST_F(SvgNodeTestNg, feOffsetTest001, TestSize.Level1)
110 {
111     auto svgFeOffset = AceType::DynamicCast<SvgFeOffset>(SvgFeOffset::Create());
112     CHECK_NULL_VOID(svgFeOffset);
113     svgFeOffset->ParseAndSetSpecializedAttr("dx", "30");
114     svgFeOffset->ParseAndSetSpecializedAttr("dy", "40");
115     EXPECT_FLOAT_EQ(svgFeOffset->feOffsetAttr_.dx.Value(), 30);
116     EXPECT_FLOAT_EQ(svgFeOffset->feOffsetAttr_.dy.Value(), 40);
117 }
118 
119 /**
120  * @tc.name: feOffsetTest
121  * @tc.desc: test feOffsetTest
122  * @tc.type: FUNC
123  */
124 HWTEST_F(SvgNodeTestNg, svgMaskTest001, TestSize.Level1)
125 {
126     auto svgMask = AceType::DynamicCast<SvgMask>(SvgMask::Create());
127     CHECK_NULL_VOID(svgMask);
128     svgMask->ParseAndSetSpecializedAttr("width", "30");
129     svgMask->ParseAndSetSpecializedAttr("height", "40");
130     svgMask->ParseAndSetSpecializedAttr("maskUnits", "userSpaceOnUse");
131     svgMask->ParseAndSetSpecializedAttr("maskContentUnits", "userSpaceOnUse");
132     svgMask->ParseAndSetSpecializedAttr("x", "20");
133     svgMask->ParseAndSetSpecializedAttr("y", "20");
134     EXPECT_FLOAT_EQ(svgMask->maskAttr_.x.Value(), 20);
135     EXPECT_FLOAT_EQ(svgMask->maskAttr_.y.Value(), 20);
136     EXPECT_FLOAT_EQ(svgMask->maskAttr_.width.Value(), 30);
137     EXPECT_FLOAT_EQ(svgMask->maskAttr_.height.Value(), 40);
138     EXPECT_EQ(svgMask->maskAttr_.maskUnits, SvgLengthScaleUnit::USER_SPACE_ON_USE);
139     EXPECT_EQ(svgMask->maskAttr_.maskContentUnits, SvgLengthScaleUnit::USER_SPACE_ON_USE);
140     svgMask->OnInitStyle();
141     EXPECT_FLOAT_EQ(svgMask->x_.Value(), svgMask->maskAttr_.x.Value());
142     EXPECT_FLOAT_EQ(svgMask->y_.Value(), svgMask->maskAttr_.y.Value());
143     EXPECT_FLOAT_EQ(svgMask->height_.Value(), svgMask->maskAttr_.height.Value());
144     EXPECT_FLOAT_EQ(svgMask->width_.Value(), svgMask->maskAttr_.width.Value());
145     EXPECT_FLOAT_EQ(svgMask->isDefaultMaskUnits_, false);
146     EXPECT_FLOAT_EQ(svgMask->isDefaultMaskContentUnits_, true);
147 }
148 
149 /**
150  * @tc.name: svgGTest001
151  * @tc.desc: test g
152  * @tc.type: FUNC
153  */
154 HWTEST_F(SvgNodeTestNg, svgGTest001, TestSize.Level1)
155 {
156     auto svgG = AceType::DynamicCast<SvgG>(SvgG::Create());
157     CHECK_NULL_VOID(svgG);
158     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
159     svgG->AppendChild(svgCircle);
160     Size size(300, 400);
161     svgG->AsPath(size);
162     EXPECT_FLOAT_EQ(svgG->children_.size(), 1);
163 }
164 
165 /**
166  * @tc.name: svgGTest002
167  * @tc.desc: test g
168  * @tc.type: FUNC
169  */
170 HWTEST_F(SvgNodeTestNg, svgGTest002, TestSize.Level1)
171 {
172     auto svgG = AceType::DynamicCast<SvgG>(SvgG::Create());
173     CHECK_NULL_VOID(svgG);
174     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
175     svgG->AppendChild(svgCircle);
176     Size size(300, 400);
177     svgG->AsPath(size);
178     EXPECT_FLOAT_EQ(svgG->children_.size(), 1);
179 }
180 
181 /**
182  * @tc.name: svgGTest003
183  * @tc.desc: test g
184  * @tc.type: FUNC
185  */
186 HWTEST_F(SvgNodeTestNg, svgGTest003, TestSize.Level1)
187 {
188     auto svgG = AceType::DynamicCast<SvgG>(SvgG::Create());
189     CHECK_NULL_VOID(svgG);
190     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
191     svgG->AppendChild(svgCircle);
192     Size size(300, 400);
193     svgG->AsPath(size);
194     EXPECT_FLOAT_EQ(svgG->children_.size(), 1);
195 }
196 
197 /**
198  * @tc.name: svgFilterTest001
199  * @tc.desc: test g
200  * @tc.type: FUNC
201  */
202 HWTEST_F(SvgNodeTestNg, svgFilterTest001, TestSize.Level1)
203 {
204     auto svgFilter = AceType::DynamicCast<SvgFilter>(SvgFilter::Create());
205     CHECK_NULL_VOID(svgFilter);
206     auto svgFeOffset = AceType::DynamicCast<SvgFeOffset>(SvgFeOffset::Create());
207     svgFilter->AppendChild(svgFeOffset);
208     svgFilter->ParseAndSetSpecializedAttr("width", "300");
209     svgFilter->ParseAndSetSpecializedAttr("height", "300");
210     svgFilter->ParseAndSetSpecializedAttr("x", "30");
211     svgFilter->ParseAndSetSpecializedAttr("y", "30");
212     Size size(300, 400);
213     svgFilter->AsPath(size);
214     Testing::MockCanvas rSCanvas;
215     svgFilter->Draw(rSCanvas, size, std::nullopt);
216     EXPECT_FLOAT_EQ(svgFilter->filterAttr_.width.Value(), 300);
217     EXPECT_FLOAT_EQ(svgFilter->filterAttr_.height.Value(), 300);
218     EXPECT_FLOAT_EQ(svgFilter->filterAttr_.x.Value(), 30);
219     EXPECT_FLOAT_EQ(svgFilter->filterAttr_.y.Value(), 30);
220 }
221 
222 /**
223  * @tc.name: svgUseTest001
224  * @tc.desc: test use
225  * @tc.type: FUNC
226  */
227 HWTEST_F(SvgNodeTestNg, svgUseTest001, TestSize.Level1)
228 {
229     auto svgUse = AceType::DynamicCast<SvgUse>(SvgUse::Create());
230     std::cout << "10" << std::endl;
231     EXPECT_NE(svgUse, nullptr);
232     std::cout << "11" << std::endl;
233     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
234     std::cout << "13" << std::endl;
235     svgUse->AppendChild(svgCircle);
236     std::cout << "14" << std::endl;
237     svgUse->ParseAndSetSpecializedAttr("width", "300");
238     svgUse->ParseAndSetSpecializedAttr("height", "300");
239     svgUse->ParseAndSetSpecializedAttr("x", "30");
240     svgUse->ParseAndSetSpecializedAttr("y", "30");
241     svgUse->ParseAndSetSpecializedAttr("mirror", "30");
242     svgUse->ParseAndSetSpecializedAttr("viewbox", "30 30 100 100");
243     Size size(300, 400);
244     svgUse->AsPath(size);
245     Testing::MockCanvas rSCanvas;
246     EXPECT_FLOAT_EQ(svgUse->useAttr_.width.Value(), 300);
247     EXPECT_FLOAT_EQ(svgUse->useAttr_.height.Value(), 300);
248     EXPECT_FLOAT_EQ(svgUse->useAttr_.x.Value(), 30);
249     EXPECT_FLOAT_EQ(svgUse->useAttr_.y.Value(), 30);
250 }
251 
252 /**
253  * @tc.name: svgPatternTest001
254  * @tc.desc: test pattern
255  * @tc.type: FUNC
256  */
257 HWTEST_F(SvgNodeTestNg, svgPatternTest001, TestSize.Level1)
258 {
259     auto svgPattern = AceType::DynamicCast<SvgPattern>(SvgPattern::Create());
260     EXPECT_NE(svgPattern, nullptr);
261     svgPattern->ParseAndSetSpecializedAttr("height", "300");
262     svgPattern->ParseAndSetSpecializedAttr("width", "300");
263     svgPattern->ParseAndSetSpecializedAttr("x", "30");
264     svgPattern->ParseAndSetSpecializedAttr("y", "30");
265     svgPattern->ParseAndSetSpecializedAttr("pattenUnits", "useSpaceOnUse");
266     svgPattern->ParseAndSetSpecializedAttr("pattenContentUnits", "useSpaceOnUse");
267     svgPattern->ParseAndSetSpecializedAttr("viewbox", "30 30 100 100");
268     auto svgContext = AceType::MakeRefPtr<SvgContext>();
269     svgContext->Push("myPattern", svgPattern);
270     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
271     svgCircle->SetContext(svgContext);
272     Size size(300, 400);
273     svgCircle->AsPath(size);
274     EXPECT_FLOAT_EQ(svgPattern->patternAttr_.width.Value(), 300);
275     EXPECT_FLOAT_EQ(svgPattern->patternAttr_.height.Value(), 300);
276     EXPECT_FLOAT_EQ(svgPattern->patternAttr_.x.Value(), 30);
277     EXPECT_FLOAT_EQ(svgPattern->patternAttr_.y.Value(), 30);
278 }
279 
280 /**
281  * @tc.name: svgSvgTest001
282  * @tc.desc: test pattern
283  * @tc.type: FUNC
284  */
285 HWTEST_F(SvgNodeTestNg, svgSvgTest001, TestSize.Level1)
286 {
287     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
288     EXPECT_NE(svgSvg, nullptr);
289     svgSvg->ParseAndSetSpecializedAttr("height", "300");
290     svgSvg->ParseAndSetSpecializedAttr("width", "300");
291     svgSvg->ParseAndSetSpecializedAttr("x", "30");
292     svgSvg->ParseAndSetSpecializedAttr("y", "30");
293     svgSvg->ParseAndSetSpecializedAttr("viewbox", "30 30 100 100");
294     Size size(300, 400);
295     svgSvg->AsPath(size);
296     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.width.Value(), 300);
297     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.height.Value(), 300);
298     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.x.Value(), 30);
299     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.y.Value(), 30);
300 }
301 
302 /**
303  * @tc.name: svgSvgTest002
304  * @tc.desc: test svg width < 0 height < 0
305  * @tc.type: FUNC
306  */
307 HWTEST_F(SvgNodeTestNg, svgSvgTest002, TestSize.Level1)
308 {
309     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
310     EXPECT_NE(svgSvg, nullptr);
311     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
312     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
313     svgSvg->ParseAndSetSpecializedAttr("height", "-100");
314     svgSvg->ParseAndSetSpecializedAttr("width", "-100");
315     Size size(300, 400);
316     svgSvg->AsPath(size);
317     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
318 }
319 
320 /**
321  * @tc.name: svgSvgViewBoxTest001
322  * @tc.desc: test viewBox
323  * @tc.type: FUNC
324  */
325 HWTEST_F(SvgNodeTestNg, svgSvgViewBoxTest001, TestSize.Level1)
326 {
327     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
328     EXPECT_NE(svgSvg, nullptr);
329     svgSvg->ParseAndSetSpecializedAttr("height", "300");
330     svgSvg->ParseAndSetSpecializedAttr("width", "300");
331     svgSvg->ParseAndSetSpecializedAttr("x", "30");
332     svgSvg->ParseAndSetSpecializedAttr("y", "30");
333     svgSvg->ParseAndSetSpecializedAttr("viewbox", "");
334     Size size(300, 400);
335     svgSvg->AsPath(size);
336     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.width.Value(), 300);
337     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.height.Value(), 300);
338     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.x.Value(), 30);
339     EXPECT_FLOAT_EQ(svgSvg->svgAttr_.y.Value(), 30);
340 }
341 
342 /**
343  * @tc.name: svgSvgPreserveAspectRatioTest001
344  * @tc.desc: test Parse preserveAspectRatio Invalid
345  * @tc.type: FUNC
346  */
347 HWTEST_F(SvgNodeTestNg, svgSvgPreserveAspectRatioTest001, TestSize.Level1)
348 {
349     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
350     EXPECT_NE(svgSvg, nullptr);
351     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "");
352     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
353     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
354 
355     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "none");
356     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_NONE);
357 
358     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xx xx");
359     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
360     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
361 
362     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xx xx xx");
363     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
364     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
365 
366     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "   ");
367     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
368     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
369 }
370 
371 /**
372  * @tc.name: svgSvgPreserveAspectRatioTest002
373  * @tc.desc: test Parse preserveAspectRatio MEET
374  * @tc.type: FUNC
375  */
376 HWTEST_F(SvgNodeTestNg, svgSvgPreserveAspectRatioTest002, TestSize.Level1)
377 {
378     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
379     EXPECT_NE(svgSvg, nullptr);
380     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMin meet");
381     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMIN);
382     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
383 
384     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMid meet");
385     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMID);
386     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
387 
388     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMax meet");
389     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMAX);
390     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
391 
392     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMin meet");
393     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMIN);
394     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
395 
396     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMid meet");
397     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
398     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
399 
400     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMax meet");
401     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMAX);
402     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
403 
404     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMin meet");
405     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMIN);
406     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
407 
408     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMid meet");
409     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMID);
410     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
411 
412     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMax meet");
413     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMAX);
414     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::MEET);
415 }
416 
417 /**
418  * @tc.name: svgSvgPreserveAspectRatioTest003
419  * @tc.desc: test Parse preserveAspectRatio SLICE
420  * @tc.type: FUNC
421  */
422 HWTEST_F(SvgNodeTestNg, svgSvgPreserveAspectRatioTest003, TestSize.Level1)
423 {
424     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
425     EXPECT_NE(svgSvg, nullptr);
426     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMin slice");
427     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMIN);
428     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
429 
430     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMid slice");
431     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMID);
432     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
433 
434     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMinYMax slice");
435     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMIN_YMAX);
436     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
437 
438     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMin slice");
439     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMIN);
440     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
441 
442     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMid slice");
443     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMID);
444     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
445 
446     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMidYMax slice");
447     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMID_YMAX);
448     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
449 
450     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMin slice");
451     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMIN);
452     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
453 
454     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMid slice");
455     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMID);
456     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
457 
458     svgSvg->ParseAndSetSpecializedAttr("preserveAspectRatio", "xMaxYMax slice");
459     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.svgAlign, SvgAlign::ALIGN_XMAX_YMAX);
460     EXPECT_EQ(svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice, SvgMeetOrSlice::SLICE);
461 }
462 
463 /**
464  * @tc.name: svgAdjustContentAreaPreserveAspectRatio01
465  * @tc.desc: test AdjustContent
466  * @tc.type: FUNC
467  */
468 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio01, TestSize.Level1)
469 {
470     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
471     EXPECT_NE(svgSvg, nullptr);
472     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
473     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
474     svgSvg->svgAttr_.width = Dimension(100);
475     svgSvg->svgAttr_.height = Dimension(100);
476     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
477     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMIN_YMIN;
478     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
479     Testing::MockCanvas rSCanvas;
480     Size viewPort(100, 200);
481     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
482     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
483     EXPECT_CALL(rSCanvas, Scale(_, _));
484     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
485     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
486 }
487 
488 /**
489  * @tc.name: svgAdjustContentAreaPreserveAspectRatio02
490  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMIN_YMID MEET
491  * @tc.type: FUNC
492  */
493 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio02, TestSize.Level1)
494 {
495     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
496     EXPECT_NE(svgSvg, nullptr);
497     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
498     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
499     svgSvg->svgAttr_.width = Dimension(100);
500     svgSvg->svgAttr_.height = Dimension(100);
501     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
502     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMIN_YMID;
503     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
504     Testing::MockCanvas rSCanvas;
505     Size viewPort(100, 200);
506     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
507     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
508     EXPECT_CALL(rSCanvas, Scale(_, _));
509     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
510     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
511 }
512 
513 /**
514  * @tc.name: svgAdjustContentAreaPreserveAspectRatio03
515  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMIN_YMAX MEET
516  * @tc.type: FUNC
517  */
518 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio03, TestSize.Level1)
519 {
520     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
521     EXPECT_NE(svgSvg, nullptr);
522     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
523     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
524     svgSvg->svgAttr_.width = Dimension(100);
525     svgSvg->svgAttr_.height = Dimension(100);
526     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
527     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMIN_YMAX;
528     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
529     Testing::MockCanvas rSCanvas;
530     Size viewPort(100, 200);
531     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
532     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
533     EXPECT_CALL(rSCanvas, Scale(_, _));
534     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
535     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
536 }
537 
538 /**
539  * @tc.name: svgAdjustContentAreaPreserveAspectRatio04
540  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMID_YMIN MEET
541  * @tc.type: FUNC
542  */
543 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio04, TestSize.Level1)
544 {
545     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
546     EXPECT_NE(svgSvg, nullptr);
547     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
548     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
549     svgSvg->svgAttr_.width = Dimension(100);
550     svgSvg->svgAttr_.height = Dimension(100);
551     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
552     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMID_YMIN;
553     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
554     Testing::MockCanvas rSCanvas;
555     Size viewPort(100, 200);
556     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
557     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
558     EXPECT_CALL(rSCanvas, Scale(_, _));
559     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
560     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
561 }
562 
563 /**
564  * @tc.name: svgAdjustContentAreaPreserveAspectRatio05
565  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMID_YMID MEET
566  * @tc.type: FUNC
567  */
568 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio05, TestSize.Level1)
569 {
570     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
571     EXPECT_NE(svgSvg, nullptr);
572     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
573     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
574     svgSvg->svgAttr_.width = Dimension(100);
575     svgSvg->svgAttr_.height = Dimension(100);
576     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
577     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMID_YMID;
578     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
579     Testing::MockCanvas rSCanvas;
580     Size viewPort(100, 200);
581     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
582     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
583     EXPECT_CALL(rSCanvas, Scale(_, _));
584     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
585     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
586 }
587 
588 /**
589  * @tc.name: svgAdjustContentAreaPreserveAspectRatio06
590  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMID_YMAX MEET
591  * @tc.type: FUNC
592  */
593 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio06, TestSize.Level1)
594 {
595     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
596     EXPECT_NE(svgSvg, nullptr);
597     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
598     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
599     svgSvg->svgAttr_.width = Dimension(100);
600     svgSvg->svgAttr_.height = Dimension(100);
601     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
602     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMID_YMAX;
603     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
604     Testing::MockCanvas rSCanvas;
605     Size viewPort(100, 200);
606     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
607     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
608     EXPECT_CALL(rSCanvas, Scale(_, _));
609     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
610     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
611 }
612 
613 /**
614  * @tc.name: svgAdjustContentAreaPreserveAspectRatio07
615  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMAX_YMIN MEET
616  * @tc.type: FUNC
617  */
618 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio07, TestSize.Level1)
619 {
620     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
621     EXPECT_NE(svgSvg, nullptr);
622     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
623     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
624     svgSvg->svgAttr_.width = Dimension(100);
625     svgSvg->svgAttr_.height = Dimension(100);
626     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
627     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMAX_YMIN;
628     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
629     Testing::MockCanvas rSCanvas;
630     Size viewPort(100, 200);
631     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
632     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
633     EXPECT_CALL(rSCanvas, Scale(_, _));
634     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
635     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
636 }
637 
638 /**
639  * @tc.name: svgAdjustContentAreaPreserveAspectRatio08
640  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMAX_YMID MEET
641  * @tc.type: FUNC
642  */
643 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio08, TestSize.Level1)
644 {
645     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
646     EXPECT_NE(svgSvg, nullptr);
647     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
648     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
649     svgSvg->svgAttr_.width = Dimension(100);
650     svgSvg->svgAttr_.height = Dimension(100);
651     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
652     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMAX_YMID;
653     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
654     Testing::MockCanvas rSCanvas;
655     Size viewPort(100, 200);
656     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
657     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
658     EXPECT_CALL(rSCanvas, Scale(_, _));
659     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
660     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
661 }
662 
663 /**
664  * @tc.name: svgAdjustContentAreaPreserveAspectRatio09
665  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMAX_YMAX MEET
666  * @tc.type: FUNC
667  */
668 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio09, TestSize.Level1)
669 {
670     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
671     EXPECT_NE(svgSvg, nullptr);
672     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
673     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
674     svgSvg->svgAttr_.width = Dimension(100);
675     svgSvg->svgAttr_.height = Dimension(100);
676     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
677     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMAX_YMAX;
678     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::MEET;
679     Testing::MockCanvas rSCanvas;
680     Size viewPort(100, 200);
681     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
682     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
683     EXPECT_CALL(rSCanvas, Scale(_, _));
684     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
685     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
686 }
687 
688 /**
689  * @tc.name: svgAdjustContentAreaPreserveAspectRatio10
690  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_XMIN_YMIN SLICE
691  * @tc.type: FUNC
692  */
693 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio10, TestSize.Level1)
694 {
695     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
696     EXPECT_NE(svgSvg, nullptr);
697     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
698     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
699     svgSvg->svgAttr_.width = Dimension(100);
700     svgSvg->svgAttr_.height = Dimension(100);
701     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
702     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_XMIN_YMIN;
703     svgSvg->svgAttr_.preserveAspectRatio.meetOrSlice = SvgMeetOrSlice::SLICE;
704     Testing::MockCanvas rSCanvas;
705     Size viewPort(100, 200);
706     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
707     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
708     EXPECT_CALL(rSCanvas, Scale(_, _));
709     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
710     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
711 }
712 
713 /**
714  * @tc.name: svgAdjustContentAreaPreserveAspectRatio11
715  * @tc.desc: test AdjustContent preserveAspectRatio ALIGN_NONE
716  * @tc.type: FUNC
717  */
718 HWTEST_F(SvgNodeTestNg, svgAdjustContentAreaPreserveAspectRatio11, TestSize.Level1)
719 {
720     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
721     EXPECT_NE(svgSvg, nullptr);
722     int32_t backupApiVersion = MockContainer::Current()->GetApiTargetVersion();
723     MockContainer::Current()->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
724     svgSvg->svgAttr_.width = Dimension(100);
725     svgSvg->svgAttr_.height = Dimension(100);
726     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
727     svgSvg->svgAttr_.preserveAspectRatio.svgAlign = SvgAlign::ALIGN_NONE;
728     Testing::MockCanvas rSCanvas;
729     Size viewPort(100, 200);
730     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
731     EXPECT_CALL(rSCanvas, Translate(_, _)).Times(2);
732     EXPECT_CALL(rSCanvas, Scale(_, _));
733     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
734     MockContainer::Current()->SetApiTargetVersion(backupApiVersion);
735 }
736 
737 /**
738  * @tc.name: svgAdjustContentArea001
739  * @tc.desc: test pattern
740  * @tc.type: FUNC
741  */
742 HWTEST_F(SvgNodeTestNg, svgAdjustContentArea001, TestSize.Level1)
743 {
744     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
745     EXPECT_NE(svgSvg, nullptr);
746     svgSvg->svgAttr_.width = Dimension(-100);
747     svgSvg->svgAttr_.height = Dimension(-100);
748     svgSvg->svgAttr_.viewBox = Rect(20, 30, -100, -100);
749     Testing::MockCanvas rSCanvas;
750     Size viewPort(100, 200);
751     EXPECT_CALL(rSCanvas, ClipRect(_, _, _));
752     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
753 }
754 
755 /**
756  * @tc.name: svgAdjustContentArea002
757  * @tc.desc: test pattern
758  * @tc.type: FUNC
759  */
760 HWTEST_F(SvgNodeTestNg, svgAdjustContentArea002, TestSize.Level1)
761 {
762     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
763     EXPECT_NE(svgSvg, nullptr);
764     svgSvg->svgAttr_.width = Dimension(100);
765     svgSvg->svgAttr_.height = Dimension(100);
766     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
767     Testing::MockCanvas rSCanvas;
768     Size viewPort(100, 200);
769     EXPECT_CALL(rSCanvas, Scale(_, _));
770     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
771 }
772 
773 /**
774  * @tc.name: svgAdjustContentArea003
775  * @tc.desc: test pattern
776  * @tc.type: FUNC
777  */
778 HWTEST_F(SvgNodeTestNg, svgAdjustContentArea003, TestSize.Level1)
779 {
780     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
781     EXPECT_NE(svgSvg, nullptr);
782     svgSvg->svgAttr_.width = Dimension(100);
783     svgSvg->svgAttr_.height = Dimension(-100);
784     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
785     Testing::MockCanvas rSCanvas;
786     Size viewPort(100, 200);
787     EXPECT_CALL(rSCanvas, Translate(_, _));
788     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
789 }
790 
791 /**
792  * @tc.name: svgAdjustContentArea004
793  * @tc.desc: test AdjustContent
794  * @tc.type: FUNC
795  */
796 HWTEST_F(SvgNodeTestNg, svgAdjustContentArea004, TestSize.Level1)
797 {
798     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
799     EXPECT_NE(svgSvg, nullptr);
800     svgSvg->svgAttr_.width = Dimension(-100);
801     svgSvg->svgAttr_.height = Dimension(100);
802     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
803     Testing::MockCanvas rSCanvas;
804     Size viewPort(100, 200);
805     EXPECT_CALL(rSCanvas, Translate(_, _));
806     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
807 }
808 
809 /**
810  * @tc.name: svgAdjustContentArea004
811  * @tc.desc: test AdjustContent
812  * @tc.type: FUNC
813  */
814 HWTEST_F(SvgNodeTestNg, svgAdjustContentArea005, TestSize.Level1)
815 {
816     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
817     EXPECT_NE(svgSvg, nullptr);
818     svgSvg->svgAttr_.width = Dimension(-100);
819     svgSvg->svgAttr_.height = Dimension(-100);
820     svgSvg->svgAttr_.viewBox = Rect(20, 30, 100, 100);
821     Testing::MockCanvas rSCanvas;
822     Size viewPort(100, 200);
823     EXPECT_CALL(rSCanvas, Scale(_, _));
824     svgSvg->AdjustContentAreaByViewBox(rSCanvas, viewPort);
825 }
826 
827 /**
828  * @tc.name: SvgFeCompositeTest001
829  * @tc.desc: test FeComposite
830  * @tc.type: FUNC
831  */
832 HWTEST_F(SvgNodeTestNg, SvgFeCompositeTest001, TestSize.Level1)
833 {
834     auto svgFeComposite = AceType::DynamicCast<SvgFeComposite>(SvgFeComposite::Create());
835     EXPECT_NE(svgFeComposite, nullptr);
836     svgFeComposite->ParseAndSetSpecializedAttr("k3", "30");
837     svgFeComposite->ParseAndSetSpecializedAttr("k4", "40");
838     EXPECT_FLOAT_EQ(svgFeComposite->feCompositeAttr_.k3, 30);
839     EXPECT_FLOAT_EQ(svgFeComposite->feCompositeAttr_.k4, 40);
840 }
841 
842 /**
843  * @tc.name: SvgLinearGradientTest001
844  * @tc.desc: test LinearGradient spread reflect
845  * @tc.type: FUNC
846  */
847 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest001, TestSize.Level1)
848 {
849     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
850     EXPECT_NE(svgLinearGradient, nullptr);
851     MockContainer::SetUp();
852     auto container = MockContainer::Current();
853     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
854     const std::string gradienttransform("scale(1.5)");
855     svgLinearGradient->SetAttr("gradienttransform", gradienttransform);
856     svgLinearGradient->SetAttr("spreadmethod", "reflect");
857     auto gradient = svgLinearGradient->GetGradient();
858     auto spreadMethod = gradient.GetSpreadMethod();
859     MockContainer::TearDown();
860     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::REPEAT));
861     EXPECT_EQ(gradient.GetGradientTransform(), gradienttransform);
862 }
863 
864 /**
865  * @tc.name: SvgLinearGradientTest002
866  * @tc.desc: test LinearGradient spread pad
867  * @tc.type: FUNC
868  */
869 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest002, TestSize.Level1)
870 {
871     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
872     EXPECT_NE(svgLinearGradient, nullptr);
873     MockContainer::SetUp();
874     auto container = MockContainer::Current();
875     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
876     svgLinearGradient->SetAttr("spreadmethod", "pad");
877     auto gradient = svgLinearGradient->GetGradient();
878     auto spreadMethod = gradient.GetSpreadMethod();
879     MockContainer::TearDown();
880     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::PAD));
881 }
882 
883 /**
884  * @tc.name: SvgLinearGradientTest003
885  * @tc.desc: test LinearGradient spread repeat
886  * @tc.type: FUNC
887  */
888 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest003, TestSize.Level1)
889 {
890     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
891     EXPECT_NE(svgLinearGradient, nullptr);
892     MockContainer::SetUp();
893     auto container = MockContainer::Current();
894     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
895     svgLinearGradient->SetAttr("spreadmethod", "repeat");
896     auto gradient = svgLinearGradient->GetGradient();
897     auto spreadMethod = gradient.GetSpreadMethod();
898     MockContainer::TearDown();
899     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::REFLECT));
900 }
901 
902 /**
903  * @tc.name: SvgLinearGradientTest004
904  * @tc.desc: test LinearGradient spread reflect apiLess or equal 12
905  * @tc.type: FUNC
906  */
907 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest004, TestSize.Level1)
908 {
909     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
910     EXPECT_NE(svgLinearGradient, nullptr);
911     MockContainer::SetUp();
912     auto container = MockContainer::Current();
913     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
914     svgLinearGradient->SetAttr("gradienttransform", "scale(1.5)");
915     svgLinearGradient->SetAttr("spreadmethod", "reflect");
916     auto gradient = svgLinearGradient->GetGradient();
917     auto spreadMethod = gradient.GetSpreadMethod();
918     MockContainer::TearDown();
919     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::REFLECT));
920 }
921 
922 /**
923  * @tc.name: SvgLinearGradientTest005
924  * @tc.desc: test LinearGradient spread pad, apiLess or equal 12
925  * @tc.type: FUNC
926  */
927 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest005, TestSize.Level1)
928 {
929     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
930     EXPECT_NE(svgLinearGradient, nullptr);
931     MockContainer::SetUp();
932     auto container = MockContainer::Current();
933     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
934     svgLinearGradient->SetAttr("spreadmethod", "pad");
935     auto gradient = svgLinearGradient->GetGradient();
936     auto spreadMethod = gradient.GetSpreadMethod();
937     MockContainer::TearDown();
938     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::PAD));
939 }
940 
941 /**
942  * @tc.name: SvgLinearGradientTest006
943  * @tc.desc: test LinearGradient spread repeat, apiLess or equal 12
944  * @tc.type: FUNC
945  */
946 HWTEST_F(SvgNodeTestNg, SvgLinearGradientTest006, TestSize.Level1)
947 {
948     auto svgLinearGradient = AceType::DynamicCast<SvgGradient>(SvgGradient::CreateLinearGradient());
949     EXPECT_NE(svgLinearGradient, nullptr);
950     MockContainer::SetUp();
951     auto container = MockContainer::Current();
952     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
953     svgLinearGradient->SetAttr("spreadmethod", "repeat");
954     auto gradient = svgLinearGradient->GetGradient();
955     auto spreadMethod = gradient.GetSpreadMethod();
956     MockContainer::TearDown();
957     EXPECT_EQ(static_cast<int32_t>(spreadMethod), static_cast<int32_t>(OHOS::Ace::SpreadMethod::REPEAT));
958 }
959 
960 /**
961  * @tc.name: SvgPolygonPathTest001
962  * @tc.desc: test asPath
963  * @tc.type: FUNC
964  */
965 HWTEST_F(SvgNodeTestNg, SvgPolygonPathTest001, TestSize.Level1)
966 {
967     auto svgPolygon = AceType::DynamicCast<SvgPolygon>(SvgPolygon::CreatePolygon());
968     EXPECT_NE(svgPolygon, nullptr);
969     Size viewPort(100, 100);
970     auto rsPath = svgPolygon->AsPath(viewPort);
971     EXPECT_EQ(rsPath.IsValid(), false);
972 }
973 
974 /**
975  * @tc.name: SvgPolygonPathTest002
976  * @tc.desc: test asPath
977  * @tc.type: FUNC
978  */
979 HWTEST_F(SvgNodeTestNg, SvgPolygonPathTest002, TestSize.Level1)
980 {
981     auto svgPolygon = AceType::DynamicCast<SvgPolygon>(SvgPolygon::CreatePolygon());
982     EXPECT_NE(svgPolygon, nullptr);
983     svgPolygon->polyAttr_.points = "abc";
984     Size viewPort(100, 100);
985     auto rsPath = svgPolygon->AsPath(viewPort);
986     EXPECT_EQ(rsPath.IsValid(), false);
987 }
988 
989 /**
990  * @tc.name: SvgPolygonPathTest003
991  * @tc.desc: test asPath
992  * @tc.type: FUNC
993  */
994 HWTEST_F(SvgNodeTestNg, SvgPolygonPathTest003, TestSize.Level1)
995 {
996     auto svgPolygon = AceType::DynamicCast<SvgPolygon>(SvgPolygon::CreatePolygon());
997     EXPECT_NE(svgPolygon, nullptr);
998     svgPolygon->polyAttr_.points = "200 210";
999     Size viewPort(100, 100);
1000     auto rsPath = svgPolygon->AsPath(viewPort);
1001     EXPECT_EQ(rsPath.IsValid(), false);
1002 }
1003 
1004 /**
1005  * @tc.name: Svg Graphic
1006  * @tc.desc: test UpdateFillStyle
1007  * @tc.type: FUNC
1008  */
1009 HWTEST_F(SvgNodeTestNg, SvgGraphicTest001, TestSize.Level1)
1010 {
1011     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
1012     EXPECT_NE(svgCircle, nullptr);
1013     std::optional<Color> fillColorOpt = std::nullopt;
1014     svgCircle->fillState_.SetColor(Color::TRANSPARENT);
1015     auto updateFill = svgCircle->UpdateFillStyle(fillColorOpt);
1016     EXPECT_EQ(updateFill, false);
1017 }
1018 
1019 /**
1020  * @tc.name: Svg Graphic
1021  * @tc.desc: test UpdateFillStyle
1022  * @tc.type: FUNC
1023  */
1024 HWTEST_F(SvgNodeTestNg, SvgGraphicTest002, TestSize.Level1)
1025 {
1026     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
1027     EXPECT_NE(svgCircle, nullptr);
1028     std::optional<Color> fillColorOpt = std::nullopt;
1029     svgCircle->fillState_.SetColor(Color::TRANSPARENT);
1030     OHOS::Ace::Gradient gradient;
1031     svgCircle->fillState_.SetGradient(gradient);
1032     MockContainer::SetUp();
1033     auto container = MockContainer::Current();
1034     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE));
1035     auto updateFill = svgCircle->UpdateFillStyle(fillColorOpt);
1036     MockContainer::TearDown();
1037     EXPECT_EQ(updateFill, true);
1038 }
1039 
1040 /**
1041  * @tc.name: Svg Graphic
1042  * @tc.desc: test UpdateFillStyle
1043  * @tc.type: FUNC
1044  */
1045 HWTEST_F(SvgNodeTestNg, SvgGraphicTest003, TestSize.Level1)
1046 {
1047     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
1048     EXPECT_NE(svgCircle, nullptr);
1049     std::optional<Color> fillColorOpt = std::nullopt;
1050     svgCircle->fillState_.SetColor(Color::TRANSPARENT);
1051     OHOS::Ace::Gradient gradient;
1052     svgCircle->fillState_.SetGradient(gradient);
1053     MockContainer::SetUp();
1054     auto container = MockContainer::Current();
1055     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
1056     auto updateFill = svgCircle->UpdateFillStyle(fillColorOpt);
1057     MockContainer::TearDown();
1058     EXPECT_EQ(updateFill, false);
1059 }
1060 
1061 /**
1062  * @tc.name: Svg Graphic
1063  * @tc.desc: test UpdateFillStyle
1064  * @tc.type: FUNC
1065  */
1066 HWTEST_F(SvgNodeTestNg, SvgGraphicTest004, TestSize.Level1)
1067 {
1068     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
1069     EXPECT_NE(svgCircle, nullptr);
1070     std::optional<Color> fillColorOpt = std::nullopt;
1071     svgCircle->fillState_.SetColor(Color::TRANSPARENT);
1072     OHOS::Ace::Gradient gradient;
1073     OHOS::Ace::GradientColor gradientColor1;
1074     gradientColor1.SetColor(Color::RED);
1075     gradientColor1.SetDimension(Dimension(0.5, DimensionUnit::PERCENT));
1076     OHOS::Ace::GradientColor gradientColor2;
1077     gradientColor2.SetColor(Color::BLUE);
1078     gradientColor2.SetDimension(Dimension(1.0, DimensionUnit::PERCENT));
1079     gradient.AddColor(gradientColor1);
1080     gradient.AddColor(gradientColor2);
1081     svgCircle->fillState_.SetGradient(gradient);
1082     MockContainer::SetUp();
1083     auto container = MockContainer::Current();
1084     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
1085     auto updateFill = svgCircle->UpdateFillStyle(fillColorOpt);
1086     MockContainer::TearDown();
1087     EXPECT_EQ(updateFill, true);
1088 }
1089 
1090 /**
1091  * @tc.name: Svg Graphic
1092  * @tc.desc: test UpdateFillStyle
1093  * @tc.type: FUNC
1094  */
1095 HWTEST_F(SvgNodeTestNg, SvgGraphicTest005, TestSize.Level1)
1096 {
1097     auto svgCircle = AceType::DynamicCast<SvgCircle>(SvgCircle::Create());
1098     EXPECT_NE(svgCircle, nullptr);
1099     std::optional<Color> fillColorOpt = std::nullopt;
1100     svgCircle->fillState_.SetColor(Color::RED);
1101     auto updateFill = svgCircle->UpdateFillStyle(fillColorOpt);
1102     EXPECT_EQ(updateFill, true);
1103 }
1104 
1105 /**
1106  * @tc.name: SvgSvgOnDrawTest001
1107  * @tc.desc: test OnDraw
1108  * @tc.type: FUNC
1109  */
1110 HWTEST_F(SvgNodeTestNg, SvgSvgOnDrawTest001, TestSize.Level1)
1111 {
1112     auto svgSvg = AceType::DynamicCast<SvgSvg>(SvgSvg::Create());
1113     EXPECT_NE(svgSvg, nullptr);
1114     SvgLengthScaleRule lengthRule;
1115     Testing::MockCanvas rSCanvas;
1116     ImageColorFilter filter;
1117     filter.colorFilterMatrix_ = std::make_shared<std::vector<float>>(std::vector<float> {});
1118     svgSvg->SetColorFilter(filter);
1119     svgSvg->SetIsRootNode(true);
1120     svgSvg->OnDraw(rSCanvas, lengthRule);
1121     EXPECT_EQ(svgSvg->isRootNode_, true);
1122 }
1123 
1124 /**
1125  * @tc.name: SvgStopParseTest001
1126  * @tc.desc: test parse stop-color
1127  * @tc.type: FUNC
1128  */
1129 HWTEST_F(SvgNodeTestNg, SvgStopParseTest001, TestSize.Level1)
1130 {
1131     MockContainer::SetUp();
1132     auto container = MockContainer::Current();
1133     auto backupApiVersion = container->GetCurrentApiTargetVersion();
1134     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
1135 
1136     /* *
1137      * @tc.steps: step1. create svgStop node
1138      */
1139     auto svgNode = SvgStop::Create();
1140     auto svgStop = AceType::DynamicCast<SvgStop>(svgNode);
1141     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor(), Color::BLACK);
1142 
1143     /* *
1144      * @tc.steps: step2. parse stop-color
1145      * @tc.expected: The property is parse successfully
1146      */
1147     svgStop->ParseAndSetSpecializedAttr("stop-color", "rgba(0,49,83,255)");
1148     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xFF003153);
1149 
1150     svgStop->ParseAndSetSpecializedAttr("stop-color", "rgb(0,49,83)");
1151     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xFF003153);
1152 
1153     svgStop->ParseAndSetSpecializedAttr("stop-color", "#3456");
1154     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x66334455);
1155 
1156     svgStop->ParseAndSetSpecializedAttr("stop-color", "#33445566");
1157     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x66334455);
1158 
1159     svgStop->ParseAndSetSpecializedAttr("stop-color", "#3344546");
1160     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff000000);
1161 
1162     //invalid color-->default color black
1163     svgStop->ParseAndSetSpecializedAttr("stop-color", "#MF");
1164     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff000000);
1165 
1166     /* *
1167      * @tc.steps: step4. parse stopOpacity
1168      * @tc.expected: The property is parse successfully
1169      */
1170     svgStop->ParseAndSetSpecializedAttr("stopOpacity", "0.0");
1171     EXPECT_EQ(svgStop->GetGradientColor().GetOpacity(), 0.0);
1172 
1173     /* *
1174      * @tc.steps: step5. parse properties that do not belong to SvgStop
1175      * @tc.expected: The property is parse unsuccessfully
1176      */
1177     bool parseResult = svgStop->ParseAndSetSpecializedAttr("strokeLinecap", "butt");
1178     EXPECT_FALSE(parseResult);
1179     container->SetApiTargetVersion(backupApiVersion);
1180     MockContainer::TearDown();
1181 }
1182 
1183 /**
1184  * @tc.name: SvgStopParseTest002
1185  * @tc.desc: test parse stopcolor
1186  * @tc.type: FUNC
1187  */
1188 HWTEST_F(SvgNodeTestNg, SvgStopParseTest002, TestSize.Level1)
1189 {
1190     MockContainer::SetUp();
1191     auto container = MockContainer::Current();
1192     auto backupApiVersion = container->GetCurrentApiTargetVersion();
1193     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_EIGHTEEN));
1194 
1195     /* *
1196      * @tc.steps: step1. create svgStop node
1197      */
1198     auto svgNode = SvgStop::Create();
1199     auto svgStop = AceType::DynamicCast<SvgStop>(svgNode);
1200     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor(), Color::BLACK);
1201 
1202     /* *
1203      * @tc.steps: step3. parse stopcolor
1204      * @tc.expected: The property is parse successfully
1205      */
1206     svgStop->ParseAndSetSpecializedAttr("stopColor", "rgba(0,49,83,0.5)");
1207     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x80003153);
1208 
1209     svgStop->ParseAndSetSpecializedAttr("stopColor", "rgb(0,49,83)");
1210     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xFF003153);
1211 
1212     svgStop->ParseAndSetSpecializedAttr("stopColor", "#3456");
1213     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x66334455);
1214 
1215     svgStop->ParseAndSetSpecializedAttr("stopColor", "#33445566");
1216     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x66334455);
1217 
1218     svgStop->ParseAndSetSpecializedAttr("stopColor", "#3344546");
1219     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff000000);
1220 
1221     //invalid color-->default color black
1222     svgStop->ParseAndSetSpecializedAttr("stopColor", "#MF");
1223     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff000000);
1224 
1225     container->SetApiTargetVersion(backupApiVersion);
1226     MockContainer::TearDown();
1227 }
1228 
1229 /**
1230  * @tc.name: SvgStopParseTest003
1231  * @tc.desc: test parse stop-color
1232  * @tc.type: FUNC
1233  */
1234 HWTEST_F(SvgNodeTestNg, SvgStopParseTest003, TestSize.Level1)
1235 {
1236     MockContainer::SetUp();
1237     auto container = MockContainer::Current();
1238     auto backupApiVersion = container->GetCurrentApiTargetVersion();
1239     container->SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_FOURTEEN));
1240 
1241     /* *
1242      * @tc.steps: step1. create svgStop node
1243      */
1244     auto svgNode = SvgStop::Create();
1245     auto svgStop = AceType::DynamicCast<SvgStop>(svgNode);
1246     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor(), Color::BLACK);
1247 
1248     /* *
1249      * @tc.steps: step2. parse stop-color
1250      * @tc.expected: The property is parse successfully
1251      */
1252 
1253     svgStop->ParseAndSetSpecializedAttr("stop-color", "#3456");
1254     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x33445566);
1255 
1256     svgStop->ParseAndSetSpecializedAttr("stop-color", "#33445566");
1257     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0x33445566);
1258 
1259     svgStop->ParseAndSetSpecializedAttr("stop-color", "#3344546");
1260     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff344546);
1261 
1262     //invalid color-->default color black
1263     svgStop->ParseAndSetSpecializedAttr("stop-color", "#MF");
1264     EXPECT_EQ(svgStop->stopAttr_.gradientColor.GetColor().GetValue(), 0xff000000);
1265 
1266     container->SetApiTargetVersion(backupApiVersion);
1267     MockContainer::TearDown();
1268 }
1269 } // namespace OHOS::Ace::NG