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