From 5dfd1fef0ea4dde2e2cfeeec0453e56bf6da2604 Mon Sep 17 00:00:00 2001 From: Laurenz Stampfl <47084093+LaurenzV@users.noreply.github.com> Date: Mon, 12 Feb 2024 17:03:04 +0100 Subject: [PATCH] Add all remaining test cases from resvg. (#60) --- tests/README.md | 7 + .../enable-background/accumulate-with-new.png | Bin 0 -> 226 bytes .../filters/enable-background/accumulate.png | Bin 0 -> 226 bytes .../enable-background/filter-on-shape.png | Bin 0 -> 235 bytes .../filters/enable-background/inherit.png | Bin 0 -> 236 bytes .../new-with-invalid-region-1.png | Bin 0 -> 226 bytes .../new-with-invalid-region-2.png | Bin 0 -> 226 bytes .../new-with-invalid-region-3.png | Bin 0 -> 226 bytes .../enable-background/new-with-region.png | Bin 0 -> 226 bytes .../resvg/filters/enable-background/new.png | Bin 0 -> 226 bytes .../enable-background/shapes-after-filter.png | Bin 0 -> 230 bytes .../stop-on-the-first-new-1.png | Bin 0 -> 236 bytes .../stop-on-the-first-new-2.png | Bin 0 -> 249 bytes .../enable-background/with-clip-path.png | Bin 0 -> 226 bytes .../with-filter-on-the-same-element.png | Bin 0 -> 226 bytes .../filters/enable-background/with-filter.png | Bin 0 -> 2024 bytes .../filters/enable-background/with-mask.png | Bin 0 -> 566 bytes .../enable-background/with-opacity-1.png | Bin 0 -> 240 bytes .../enable-background/with-opacity-2.png | Bin 0 -> 237 bytes .../enable-background/with-opacity-3.png | Bin 0 -> 248 bytes .../enable-background/with-opacity-4.png | Bin 0 -> 246 bytes .../enable-background/with-transform.png | Bin 0 -> 2316 bytes ...type=saturate-with-a-large-coefficient.png | Bin 0 -> 876 bytes ...ype=saturate-with-negative-coefficient.png | Bin 0 -> 617 bytes .../filters/feConvolveMatrix/bias=-0.5.png | Bin 0 -> 569 bytes .../filters/feConvolveMatrix/bias=0.5.png | Bin 0 -> 695 bytes .../filters/feConvolveMatrix/bias=9999.png | Bin 0 -> 222 bytes ...de=wrap-with-matrix-larger-than-target.png | Bin 0 -> 244 bytes .../feDiffuseLighting/complex-transform.png | Bin 0 -> 3550 bytes .../filters/feDisplacementMap/simple-case.png | Bin 0 -> 175 bytes .../filters/feFlood/complex-transform.png | Bin 0 -> 255 bytes .../filters/feFlood/partial-subregion.png | Bin 0 -> 225 bytes .../feGaussianBlur/complex-transform.png | Bin 0 -> 15718 bytes ...k-on-an-element-with-complex-transform.png | Bin 0 -> 278 bytes .../filters/feImage/with-subregion-5.png | Bin 0 -> 2279 bytes .../with-x-y-and-protruding-subregion-1.png | Bin 0 -> 300 bytes .../with-x-y-and-protruding-subregion-2.png | Bin 0 -> 295 bytes tests/ref/resvg/filters/feImage/with-x-y.png | Bin 0 -> 265 bytes .../filters/feMerge/complex-transform.png | Bin 0 -> 7032 bytes .../filters/feOffset/complex-transform.png | Bin 0 -> 1871 bytes .../filters/feOffset/fractional-offset.png | Bin 0 -> 232 bytes .../fePointLight/complex-transform.png | Bin 0 -> 4905 bytes .../filters/feSpotLight/complex-transform.png | Bin 0 -> 3045 bytes .../feSpotLight/limitingConeAngle=0.png | Bin 0 -> 222 bytes .../primitiveUnits=objectBoundingBox.png | Bin 0 -> 222 bytes .../filters/feTile/complex-transform.png | Bin 0 -> 3857 bytes .../feTurbulence/complex-transform.png | Bin 0 -> 44842 bytes .../feTurbulence/stitchTiles=stitch.png | Bin 0 -> 35451 bytes .../filter-functions/two-exact-urls.png | Bin 0 -> 5475 bytes ...BackgroundAlpha-with-enable-background.png | Bin 0 -> 226 bytes ...BackgroundImage-with-enable-background.png | Bin 0 -> 226 bytes .../in=FillPaint-on-g-without-children.png | Bin 0 -> 175 bytes .../filter/in=FillPaint-with-gradient.png | Bin 0 -> 16422 bytes .../filter/in=FillPaint-with-pattern.png | Bin 0 -> 6790 bytes .../filter/in=FillPaint-with-target-on-g.png | Bin 0 -> 6790 bytes .../ref/resvg/filters/filter/in=FillPaint.png | Bin 0 -> 14725 bytes .../resvg/filters/filter/in=StrokePaint.png | Bin 0 -> 11190 bytes .../resvg/filters/filter/on-a-thin-rect.png | Bin 0 -> 264 bytes .../filters/filter/on-an-empty-group-1.png | Bin 0 -> 225 bytes .../resvg/filters/filter/on-the-root-svg.png | Bin 0 -> 4164 bytes tests/ref/resvg/filters/filter/path-bbox.png | Bin 0 -> 1261 bytes ...and-primitiveUnits=objectBoundingBox-1.png | Bin 0 -> 682 bytes ...and-primitiveUnits=objectBoundingBox-2.png | Bin 0 -> 682 bytes .../transform-on-shape-with-filter-region.png | Bin 0 -> 7177 bytes tests/ref/resvg/filters/filter/with-mask.png | Bin 0 -> 8439 bytes tests/ref/resvg/masking/clip/simple-case.png | Bin 0 -> 3049 bytes .../circle-shorthand-with-stroke-box.png | Bin 0 -> 237 bytes .../circle-shorthand-with-view-box.png | Bin 0 -> 225 bytes .../masking/clipPath/circle-shorthand.png | Bin 0 -> 225 bytes .../clipPath/on-the-root-svg-without-size.png | Bin 0 -> 1463 bytes .../mask/color-interpolation=linearRGB.png | Bin 0 -> 583 bytes .../resvg/masking/mask/mask-type-in-style.png | Bin 0 -> 951 bytes .../invalid-gradientTransform.png | Bin 0 -> 789 bytes ...p-with-opacity-used-by-fill-and-stroke.png | Bin 0 -> 248 bytes .../pattern/invalid-patternTransform.png | Bin 0 -> 1372 bytes .../pattern/overflow=visible.png | Bin 0 -> 1372 bytes .../invalid-gradientTransform.png | Bin 0 -> 2694 bytes .../radialGradient/negative-r.png | Bin 0 -> 225 bytes .../paint-servers/stop/equal-stop-color.png | Bin 0 -> 958 bytes .../resvg/paint-servers/stop/hsla-color.png | Bin 0 -> 952 bytes tests/ref/resvg/painting/fill/#RGBA.png | Bin 0 -> 227 bytes tests/ref/resvg/painting/fill/#RRGGBBAA.png | Bin 0 -> 227 bytes tests/ref/resvg/painting/fill/icc-color.png | Bin 0 -> 225 bytes .../resvg/painting/fill/rgb-int-int-int.png | Bin 0 -> 225 bytes .../painting/fill/rgba-0-127-0-50percent.png | Bin 0 -> 225 bytes ...alid-FuncIRI-with-a-fallback-ICC-color.png | Bin 0 -> 225 bytes .../painting/image-rendering/on-feImage.png | Bin 0 -> 9045 bytes tests/ref/resvg/painting/marker/on-ArcTo.png | Bin 0 -> 2284 bytes .../marker/target-with-subpaths-2.png | Bin 0 -> 2635 bytes .../resvg/painting/marker/with-viewBox-1.png | Bin 0 -> 1644 bytes .../painting/mix-blend-mode/color-dodge.png | Bin 0 -> 598 bytes .../stroke-dasharray/0-n-with-butt-caps.png | Bin 0 -> 276 bytes .../stroke-dasharray/0-n-with-round-caps.png | Bin 0 -> 2585 bytes .../stroke-dasharray/0-n-with-square-caps.png | Bin 0 -> 443 bytes .../painting/stroke-dasharray/em-units.png | Bin 0 -> 2803 bytes .../painting/stroke-dasharray/even-count.png | Bin 0 -> 2317 bytes .../painting/stroke-dasharray/mm-units.png | Bin 0 -> 3190 bytes .../stroke-dasharray/negative-sum.png | Bin 0 -> 235 bytes .../stroke-dasharray/negative-values.png | Bin 0 -> 235 bytes .../painting/stroke-dasharray/odd-count.png | Bin 0 -> 2731 bytes .../stroke-dasharray/percent-units.png | Bin 0 -> 1961 bytes .../painting/stroke-dashoffset/em-units.png | Bin 0 -> 2521 bytes .../painting/stroke-dashoffset/mm-units.png | Bin 0 -> 2541 bytes .../stroke-dashoffset/percent-units.png | Bin 0 -> 2452 bytes .../painting/stroke-dashoffset/px-units.png | Bin 0 -> 2528 bytes .../zero-length-path-with-butt.png | Bin 0 -> 175 bytes .../resvg/painting/stroke-linejoin/arcs.png | Bin 0 -> 2315 bytes .../resvg/painting/stroke-width/negative.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/cap-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/ch-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/ic-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/lh-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/q-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/rem-values.png | Bin 0 -> 175 bytes tests/ref/resvg/shapes/rect/rlh-values.png | Bin 0 -> 175 bytes .../resvg/shapes/rect/vi-and-vb-values.png | Bin 0 -> 175 bytes .../shapes/rect/vmin-and-vmax-values.png | Bin 0 -> 175 bytes .../resvg/shapes/rect/vw-and-vh-values.png | Bin 0 -> 175 bytes .../ref/resvg/structure/image/url-to-png.png | Bin 0 -> 141 bytes .../ref/resvg/structure/image/url-to-svg.png | Bin 0 -> 141 bytes .../resvg/structure/style/external-CSS.png | Bin 0 -> 225 bytes tests/ref/resvg/structure/style/important.png | Bin 0 -> 225 bytes .../structure/svg/funcIRI-with-quotes.png | Bin 0 -> 789 bytes .../structure/svg/invalid-id-attribute-1.png | Bin 0 -> 225 bytes .../structure/svg/invalid-id-attribute-2.png | Bin 0 -> 225 bytes .../text/alignment-baseline/after-edge.png | Bin 0 -> 1611 bytes .../text/alignment-baseline/baseline.png | Bin 0 -> 1675 bytes .../text/alignment-baseline/ideographic.png | Bin 0 -> 1611 bytes .../alignment-baseline/text-after-edge.png | Bin 0 -> 1611 bytes .../text/dominant-baseline/reset-size.png | Bin 0 -> 1637 bytes .../resvg/text/font-family/double-quoted.png | Bin 0 -> 1572 bytes .../ref/resvg/text/font-family/font-list.png | Bin 0 -> 1572 bytes .../resvg/text/font-kerning/as-property.png | Bin 0 -> 2191 bytes .../text/font-size-adjust/simple-case.png | Bin 0 -> 2101 bytes .../ref/resvg/text/font-size/named-value.png | Bin 0 -> 4359 bytes .../resvg/text/font-size/negative-size.png | Bin 0 -> 175 bytes .../text/font-stretch/extra-condensed.png | Bin 0 -> 1572 bytes tests/ref/resvg/text/font-stretch/inherit.png | Bin 0 -> 1572 bytes .../ref/resvg/text/font-stretch/narrower.png | Bin 0 -> 1572 bytes tests/ref/resvg/text/font-weight/650.png | Bin 0 -> 1590 bytes .../simple-case.png | Bin 0 -> 1530 bytes .../simple-case.png | Bin 0 -> 1568 bytes tests/ref/resvg/text/kerning/0.png | Bin 0 -> 3034 bytes .../ref/resvg/text/lengthAdjust/vertical.png | Bin 0 -> 2223 bytes .../resvg/text/letter-spacing/filter-bbox.png | Bin 0 -> 1092 bytes .../text/letter-spacing/large-negative.png | Bin 0 -> 551 bytes .../text/text-anchor/coordinates-list.png | Bin 0 -> 1213 bytes .../resvg/text/text-decoration/indirect.png | Bin 0 -> 1968 bytes .../text-decoration/style-resolving-4.png | Bin 0 -> 1893 bytes .../underline-with-dy-list-2.png | Bin 0 -> 5145 bytes .../underline-with-rotate-list-4.png | Bin 0 -> 7287 bytes .../with-textLength-on-a-single-character.png | Bin 0 -> 1342 bytes .../text-rendering/geometricPrecision.png | Bin 0 -> 2101 bytes .../text/complex-grapheme-split-by-tspan.png | Bin 0 -> 1104 bytes ...complex-graphemes-and-coordinates-list.png | Bin 0 -> 997 bytes tests/ref/resvg/text/text/filter-bbox.png | Bin 0 -> 1630 bytes .../ref/resvg/text/text/real-text-height.png | Bin 0 -> 2350 bytes .../resvg/text/textPath/method=stretch.png | Bin 0 -> 3189 bytes tests/ref/resvg/text/textPath/side=right.png | Bin 0 -> 3189 bytes .../ref/resvg/text/textPath/spacing=auto.png | Bin 0 -> 3189 bytes .../with-baseline-shift-and-rotate.png | Bin 0 -> 4699 bytes tests/ref/resvg/text/textPath/with-filter.png | Bin 0 -> 3321 bytes .../with-invalid-path-and-xlink-href.png | Bin 0 -> 1670 bytes .../textPath/with-path-and-xlink-href.png | Bin 0 -> 1670 bytes tests/ref/resvg/text/textPath/with-path.png | Bin 0 -> 1670 bytes .../tref/link-to-an-external-file-element.png | Bin 0 -> 2382 bytes tests/ref/resvg/text/tspan/tspan-bbox-1.png | Bin 0 -> 3112 bytes tests/ref/resvg/text/tspan/tspan-bbox-2.png | Bin 0 -> 1424 bytes tests/ref/resvg/text/tspan/with-clip-path.png | Bin 0 -> 2359 bytes tests/ref/resvg/text/tspan/with-filter.png | Bin 0 -> 2359 bytes tests/ref/resvg/text/tspan/with-mask.png | Bin 0 -> 2359 bytes tests/ref/resvg/text/tspan/with-opacity.png | Bin 0 -> 1973 bytes .../text/word-spacing/large-negative.png | Bin 0 -> 270 bytes .../text/writing-mode/tb-and-punctuation.png | Bin 0 -> 270 bytes .../resvg/text/writing-mode/vertical-lr.png | Bin 0 -> 2182 bytes .../resvg/text/writing-mode/vertical-rl.png | Bin 0 -> 2182 bytes tests/scripts/gen-tests.py | 119 ++++- tests/scripts/sync-tests.py | 30 +- tests/src/lib.rs | 3 +- tests/src/test.rs | 433 +++++++++++------- .../filters/feConvolveMatrix/bias=9999.svg | 19 + .../filters/feTile/complex-transform.svg | 15 + .../filter/in=FillPaint-with-gradient.svg | 15 + tests/svg/resvg/filters/filter/path-bbox.svg | 16 + .../pattern/invalid-patternTransform.svg | 14 + .../radialGradient/negative-r.svg | 13 + .../resvg/paint-servers/stop/hsla-color.svg | 13 + .../resvg/painting/marker/with-viewBox-1.svg | 13 + .../painting/stroke-dashoffset/em-units.svg | 10 + tests/svg/resvg/shapes/rect/ic-values.svg | 9 + .../image/external-svg-with-transform.svg | 14 + .../resvg/structure/image/no-width-on-svg.svg | 8 + .../svg/resvg/structure/image/url-to-png.svg | 9 + .../svg/resvg/structure/image/url-to-svg.svg | 9 + .../resvg/structure/style/external-CSS.svg | 11 + .../structure/svg/not-UTF-8-encoding.svg | 9 + .../text/font-stretch/extra-condensed.svg | 9 + .../compound-emojis-and-coordinates-list.svg | 12 + 198 files changed, 634 insertions(+), 176 deletions(-) create mode 100644 tests/ref/resvg/filters/enable-background/accumulate-with-new.png create mode 100644 tests/ref/resvg/filters/enable-background/accumulate.png create mode 100644 tests/ref/resvg/filters/enable-background/filter-on-shape.png create mode 100644 tests/ref/resvg/filters/enable-background/inherit.png create mode 100644 tests/ref/resvg/filters/enable-background/new-with-invalid-region-1.png create mode 100644 tests/ref/resvg/filters/enable-background/new-with-invalid-region-2.png create mode 100644 tests/ref/resvg/filters/enable-background/new-with-invalid-region-3.png create mode 100644 tests/ref/resvg/filters/enable-background/new-with-region.png create mode 100644 tests/ref/resvg/filters/enable-background/new.png create mode 100644 tests/ref/resvg/filters/enable-background/shapes-after-filter.png create mode 100644 tests/ref/resvg/filters/enable-background/stop-on-the-first-new-1.png create mode 100644 tests/ref/resvg/filters/enable-background/stop-on-the-first-new-2.png create mode 100644 tests/ref/resvg/filters/enable-background/with-clip-path.png create mode 100644 tests/ref/resvg/filters/enable-background/with-filter-on-the-same-element.png create mode 100644 tests/ref/resvg/filters/enable-background/with-filter.png create mode 100644 tests/ref/resvg/filters/enable-background/with-mask.png create mode 100644 tests/ref/resvg/filters/enable-background/with-opacity-1.png create mode 100644 tests/ref/resvg/filters/enable-background/with-opacity-2.png create mode 100644 tests/ref/resvg/filters/enable-background/with-opacity-3.png create mode 100644 tests/ref/resvg/filters/enable-background/with-opacity-4.png create mode 100644 tests/ref/resvg/filters/enable-background/with-transform.png create mode 100644 tests/ref/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.png create mode 100644 tests/ref/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png create mode 100644 tests/ref/resvg/filters/feConvolveMatrix/bias=-0.5.png create mode 100644 tests/ref/resvg/filters/feConvolveMatrix/bias=0.5.png create mode 100644 tests/ref/resvg/filters/feConvolveMatrix/bias=9999.png create mode 100644 tests/ref/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png create mode 100644 tests/ref/resvg/filters/feDiffuseLighting/complex-transform.png create mode 100644 tests/ref/resvg/filters/feDisplacementMap/simple-case.png create mode 100644 tests/ref/resvg/filters/feFlood/complex-transform.png create mode 100644 tests/ref/resvg/filters/feFlood/partial-subregion.png create mode 100644 tests/ref/resvg/filters/feGaussianBlur/complex-transform.png create mode 100644 tests/ref/resvg/filters/feImage/link-on-an-element-with-complex-transform.png create mode 100644 tests/ref/resvg/filters/feImage/with-subregion-5.png create mode 100644 tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png create mode 100644 tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png create mode 100644 tests/ref/resvg/filters/feImage/with-x-y.png create mode 100644 tests/ref/resvg/filters/feMerge/complex-transform.png create mode 100644 tests/ref/resvg/filters/feOffset/complex-transform.png create mode 100644 tests/ref/resvg/filters/feOffset/fractional-offset.png create mode 100644 tests/ref/resvg/filters/fePointLight/complex-transform.png create mode 100644 tests/ref/resvg/filters/feSpotLight/complex-transform.png create mode 100644 tests/ref/resvg/filters/feSpotLight/limitingConeAngle=0.png create mode 100644 tests/ref/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png create mode 100644 tests/ref/resvg/filters/feTile/complex-transform.png create mode 100644 tests/ref/resvg/filters/feTurbulence/complex-transform.png create mode 100644 tests/ref/resvg/filters/feTurbulence/stitchTiles=stitch.png create mode 100644 tests/ref/resvg/filters/filter-functions/two-exact-urls.png create mode 100644 tests/ref/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png create mode 100644 tests/ref/resvg/filters/filter/in=BackgroundImage-with-enable-background.png create mode 100644 tests/ref/resvg/filters/filter/in=FillPaint-on-g-without-children.png create mode 100644 tests/ref/resvg/filters/filter/in=FillPaint-with-gradient.png create mode 100644 tests/ref/resvg/filters/filter/in=FillPaint-with-pattern.png create mode 100644 tests/ref/resvg/filters/filter/in=FillPaint-with-target-on-g.png create mode 100644 tests/ref/resvg/filters/filter/in=FillPaint.png create mode 100644 tests/ref/resvg/filters/filter/in=StrokePaint.png create mode 100644 tests/ref/resvg/filters/filter/on-a-thin-rect.png create mode 100644 tests/ref/resvg/filters/filter/on-an-empty-group-1.png create mode 100644 tests/ref/resvg/filters/filter/on-the-root-svg.png create mode 100644 tests/ref/resvg/filters/filter/path-bbox.png create mode 100644 tests/ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.png create mode 100644 tests/ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.png create mode 100644 tests/ref/resvg/filters/filter/transform-on-shape-with-filter-region.png create mode 100644 tests/ref/resvg/filters/filter/with-mask.png create mode 100644 tests/ref/resvg/masking/clip/simple-case.png create mode 100644 tests/ref/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png create mode 100644 tests/ref/resvg/masking/clipPath/circle-shorthand-with-view-box.png create mode 100644 tests/ref/resvg/masking/clipPath/circle-shorthand.png create mode 100644 tests/ref/resvg/masking/clipPath/on-the-root-svg-without-size.png create mode 100644 tests/ref/resvg/masking/mask/color-interpolation=linearRGB.png create mode 100644 tests/ref/resvg/masking/mask/mask-type-in-style.png create mode 100644 tests/ref/resvg/paint-servers/linearGradient/invalid-gradientTransform.png create mode 100644 tests/ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png create mode 100644 tests/ref/resvg/paint-servers/pattern/invalid-patternTransform.png create mode 100644 tests/ref/resvg/paint-servers/pattern/overflow=visible.png create mode 100644 tests/ref/resvg/paint-servers/radialGradient/invalid-gradientTransform.png create mode 100644 tests/ref/resvg/paint-servers/radialGradient/negative-r.png create mode 100644 tests/ref/resvg/paint-servers/stop/equal-stop-color.png create mode 100644 tests/ref/resvg/paint-servers/stop/hsla-color.png create mode 100644 tests/ref/resvg/painting/fill/#RGBA.png create mode 100644 tests/ref/resvg/painting/fill/#RRGGBBAA.png create mode 100644 tests/ref/resvg/painting/fill/icc-color.png create mode 100644 tests/ref/resvg/painting/fill/rgb-int-int-int.png create mode 100644 tests/ref/resvg/painting/fill/rgba-0-127-0-50percent.png create mode 100644 tests/ref/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.png create mode 100644 tests/ref/resvg/painting/image-rendering/on-feImage.png create mode 100644 tests/ref/resvg/painting/marker/on-ArcTo.png create mode 100644 tests/ref/resvg/painting/marker/target-with-subpaths-2.png create mode 100644 tests/ref/resvg/painting/marker/with-viewBox-1.png create mode 100644 tests/ref/resvg/painting/mix-blend-mode/color-dodge.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/0-n-with-round-caps.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/0-n-with-square-caps.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/em-units.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/even-count.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/mm-units.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/negative-sum.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/negative-values.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/odd-count.png create mode 100644 tests/ref/resvg/painting/stroke-dasharray/percent-units.png create mode 100644 tests/ref/resvg/painting/stroke-dashoffset/em-units.png create mode 100644 tests/ref/resvg/painting/stroke-dashoffset/mm-units.png create mode 100644 tests/ref/resvg/painting/stroke-dashoffset/percent-units.png create mode 100644 tests/ref/resvg/painting/stroke-dashoffset/px-units.png create mode 100644 tests/ref/resvg/painting/stroke-linecap/zero-length-path-with-butt.png create mode 100644 tests/ref/resvg/painting/stroke-linejoin/arcs.png create mode 100644 tests/ref/resvg/painting/stroke-width/negative.png create mode 100644 tests/ref/resvg/shapes/rect/cap-values.png create mode 100644 tests/ref/resvg/shapes/rect/ch-values.png create mode 100644 tests/ref/resvg/shapes/rect/ic-values.png create mode 100644 tests/ref/resvg/shapes/rect/lh-values.png create mode 100644 tests/ref/resvg/shapes/rect/q-values.png create mode 100644 tests/ref/resvg/shapes/rect/rem-values.png create mode 100644 tests/ref/resvg/shapes/rect/rlh-values.png create mode 100644 tests/ref/resvg/shapes/rect/vi-and-vb-values.png create mode 100644 tests/ref/resvg/shapes/rect/vmin-and-vmax-values.png create mode 100644 tests/ref/resvg/shapes/rect/vw-and-vh-values.png create mode 100644 tests/ref/resvg/structure/image/url-to-png.png create mode 100644 tests/ref/resvg/structure/image/url-to-svg.png create mode 100644 tests/ref/resvg/structure/style/external-CSS.png create mode 100644 tests/ref/resvg/structure/style/important.png create mode 100644 tests/ref/resvg/structure/svg/funcIRI-with-quotes.png create mode 100644 tests/ref/resvg/structure/svg/invalid-id-attribute-1.png create mode 100644 tests/ref/resvg/structure/svg/invalid-id-attribute-2.png create mode 100644 tests/ref/resvg/text/alignment-baseline/after-edge.png create mode 100644 tests/ref/resvg/text/alignment-baseline/baseline.png create mode 100644 tests/ref/resvg/text/alignment-baseline/ideographic.png create mode 100644 tests/ref/resvg/text/alignment-baseline/text-after-edge.png create mode 100644 tests/ref/resvg/text/dominant-baseline/reset-size.png create mode 100644 tests/ref/resvg/text/font-family/double-quoted.png create mode 100644 tests/ref/resvg/text/font-family/font-list.png create mode 100644 tests/ref/resvg/text/font-kerning/as-property.png create mode 100644 tests/ref/resvg/text/font-size-adjust/simple-case.png create mode 100644 tests/ref/resvg/text/font-size/named-value.png create mode 100644 tests/ref/resvg/text/font-size/negative-size.png create mode 100644 tests/ref/resvg/text/font-stretch/extra-condensed.png create mode 100644 tests/ref/resvg/text/font-stretch/inherit.png create mode 100644 tests/ref/resvg/text/font-stretch/narrower.png create mode 100644 tests/ref/resvg/text/font-weight/650.png create mode 100644 tests/ref/resvg/text/glyph-orientation-horizontal/simple-case.png create mode 100644 tests/ref/resvg/text/glyph-orientation-vertical/simple-case.png create mode 100644 tests/ref/resvg/text/kerning/0.png create mode 100644 tests/ref/resvg/text/lengthAdjust/vertical.png create mode 100644 tests/ref/resvg/text/letter-spacing/filter-bbox.png create mode 100644 tests/ref/resvg/text/letter-spacing/large-negative.png create mode 100644 tests/ref/resvg/text/text-anchor/coordinates-list.png create mode 100644 tests/ref/resvg/text/text-decoration/indirect.png create mode 100644 tests/ref/resvg/text/text-decoration/style-resolving-4.png create mode 100644 tests/ref/resvg/text/text-decoration/underline-with-dy-list-2.png create mode 100644 tests/ref/resvg/text/text-decoration/underline-with-rotate-list-4.png create mode 100644 tests/ref/resvg/text/text-decoration/with-textLength-on-a-single-character.png create mode 100644 tests/ref/resvg/text/text-rendering/geometricPrecision.png create mode 100644 tests/ref/resvg/text/text/complex-grapheme-split-by-tspan.png create mode 100644 tests/ref/resvg/text/text/complex-graphemes-and-coordinates-list.png create mode 100644 tests/ref/resvg/text/text/filter-bbox.png create mode 100644 tests/ref/resvg/text/text/real-text-height.png create mode 100644 tests/ref/resvg/text/textPath/method=stretch.png create mode 100644 tests/ref/resvg/text/textPath/side=right.png create mode 100644 tests/ref/resvg/text/textPath/spacing=auto.png create mode 100644 tests/ref/resvg/text/textPath/with-baseline-shift-and-rotate.png create mode 100644 tests/ref/resvg/text/textPath/with-filter.png create mode 100644 tests/ref/resvg/text/textPath/with-invalid-path-and-xlink-href.png create mode 100644 tests/ref/resvg/text/textPath/with-path-and-xlink-href.png create mode 100644 tests/ref/resvg/text/textPath/with-path.png create mode 100644 tests/ref/resvg/text/tref/link-to-an-external-file-element.png create mode 100644 tests/ref/resvg/text/tspan/tspan-bbox-1.png create mode 100644 tests/ref/resvg/text/tspan/tspan-bbox-2.png create mode 100644 tests/ref/resvg/text/tspan/with-clip-path.png create mode 100644 tests/ref/resvg/text/tspan/with-filter.png create mode 100644 tests/ref/resvg/text/tspan/with-mask.png create mode 100644 tests/ref/resvg/text/tspan/with-opacity.png create mode 100644 tests/ref/resvg/text/word-spacing/large-negative.png create mode 100644 tests/ref/resvg/text/writing-mode/tb-and-punctuation.png create mode 100644 tests/ref/resvg/text/writing-mode/vertical-lr.png create mode 100644 tests/ref/resvg/text/writing-mode/vertical-rl.png create mode 100644 tests/svg/resvg/filters/feConvolveMatrix/bias=9999.svg create mode 100644 tests/svg/resvg/filters/feTile/complex-transform.svg create mode 100644 tests/svg/resvg/filters/filter/in=FillPaint-with-gradient.svg create mode 100644 tests/svg/resvg/filters/filter/path-bbox.svg create mode 100644 tests/svg/resvg/paint-servers/pattern/invalid-patternTransform.svg create mode 100644 tests/svg/resvg/paint-servers/radialGradient/negative-r.svg create mode 100644 tests/svg/resvg/paint-servers/stop/hsla-color.svg create mode 100644 tests/svg/resvg/painting/marker/with-viewBox-1.svg create mode 100644 tests/svg/resvg/painting/stroke-dashoffset/em-units.svg create mode 100644 tests/svg/resvg/shapes/rect/ic-values.svg create mode 100644 tests/svg/resvg/structure/image/external-svg-with-transform.svg create mode 100644 tests/svg/resvg/structure/image/no-width-on-svg.svg create mode 100644 tests/svg/resvg/structure/image/url-to-png.svg create mode 100644 tests/svg/resvg/structure/image/url-to-svg.svg create mode 100644 tests/svg/resvg/structure/style/external-CSS.svg create mode 100644 tests/svg/resvg/structure/svg/not-UTF-8-encoding.svg create mode 100644 tests/svg/resvg/text/font-stretch/extra-condensed.svg create mode 100644 tests/svg/resvg/text/text/compound-emojis-and-coordinates-list.svg diff --git a/tests/README.md b/tests/README.md index 074c1352..b1d468a7 100644 --- a/tests/README.md +++ b/tests/README.md @@ -30,6 +30,13 @@ that are part of the test suites. SVG files which don't have a corresponding ref will be skipped. To regenerate this file, you can simply run `./scripts/gen-tests.py` and it should work out of the box. +Note: The aim of the test cases it not necessarily to check whether the SVGs are rendered +correctly, but rather whether our SVGs output match the one from resvg. In most cases, if +it matches resvg it is also correct, because resvg is pretty good at rendering SVGs in general. +However, a couple of features are not implemented (e.g. `enableBackground` in filters), thus +they are not rendered correctly, but we consider the test case as passing anyway, because +it matches the output of resvg. + To run the tests, you can then just invoke `cargo test --release` (make sure to run it in release mode, otherwise it will be very slow). diff --git a/tests/ref/resvg/filters/enable-background/accumulate-with-new.png b/tests/ref/resvg/filters/enable-background/accumulate-with-new.png new file mode 100644 index 0000000000000000000000000000000000000000..61a0be9675c03cb94d389cfebe4c7364f5df848a GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzK)H6I^*|Y`7XDJEt z3vOU=c)+)__70F==jq}YQgQ3;9Y@{+3L-8CeOE8w(_$3-alM7f;-lq+N;bCxYP0R1 z+Exa~dGGtg)aalfz`=q}y>a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7 zN`m}?8yFlO@a?R<1LU`Ox;TbZ+#N{Bb#tLQ?1t#tv+nX3~1=mkj`^?kR z;A<9s%DQOT9_!4ftW1p#3IZG~Xw=N+J%?}kpEtme0II(0BaNv6C_bTfg6Z*GZM_$E X(yJYlBQ1TFfSl~<>gTe~DWM4f9Irk5 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/inherit.png b/tests/ref/resvg/filters/enable-background/inherit.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ac6ede7e5cfd8d0c2cdcf7cdb89d8d0469f3c6 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzK)B~CSx2@M!978H@y}jee+h8E#a*$W!0HcsVBkP}NN5|?{`Ik!OH41Jx z`OL4<{oIuAD&dul4hjMsDXvf6vVmDFOvu!dnO7N+1SY(luwEKf1(-J>EsUK5#A2Ij ec|6xx??v6Z9LMDC-a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7a|ygemHvaCr?M7S#?46J}2|KAx+t_kwM1N3v@8wx_#6 OF7GIWQ@GSkK8?pv`&GhPgO@_Oj)B z^mU*1KGD|~;9y~D+|zL;8O(4{K%utXv_ckn^z7UXW~N4DAu!Lp9IPwGE$Wo?&W}xb YjBRBn&y;2)M1x%G>FVdQ&MBb@0CuWBNdN!< literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/stop-on-the-first-new-1.png b/tests/ref/resvg/filters/enable-background/stop-on-the-first-new-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ac6ede7e5cfd8d0c2cdcf7cdb89d8d0469f3c6 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzK)B~CSx2@M!978H@y}jee+h8E#a*$W!0HcsVBkP}NN5|?{`Ik!OH41Jx z`OL4<{oIuAD&dul4hjMsDXvf6vVmDFOvu!dnO7N+1SY(luwEKf1(-J>EsUK5#A2Ij ec|6xx??v6Z9LMDC-b`HATQEMO)Fn3^DTM2Qh3!;!*O$?gcG;j)^J rIzkZcvI*7LHF;D<7T?+SsOcSZrbCsCuKw|zAP;!D`njxgN@xNA$&p6N literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/with-clip-path.png b/tests/ref/resvg/filters/enable-background/with-clip-path.png new file mode 100644 index 0000000000000000000000000000000000000000..63275b834f762a4146bf82ec4c86d53485c8aa58 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzK)H6I^*|Y`7XDJEt z3vOU=c)+)__70F==jq}YQgQ3;oj^_oMG=>aiM|_ndlEQ)ryDi?vvsuCet^@!;HBn! zZ|_RwpQpK5m>L}v^p!qKfEfZD$kc?~Fm@CHRB2>hj9b(x>79j++Zp(#B&&YicI;sEw literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/with-filter-on-the-same-element.png b/tests/ref/resvg/filters/enable-background/with-filter-on-the-same-element.png new file mode 100644 index 0000000000000000000000000000000000000000..07ed93fd0df9e8472782e24cb312dd78d3da2107 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzKG%%F()*l1%SxSQZ zf*Tkd9`Nm~y#wUedAc};RNQ)d$C3Adf{4pO-_;BFv={|{TyJ68QOj}ChFLjb^4a;H z=Izm3uNq(3=%66L!NP=2`6<>)Vu~tE$P8o0qFO=VgzbrWkGIK+moWG5OIA(1SrQC# Nsi&)-%Q~loCII!1J8}R3 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/with-filter.png b/tests/ref/resvg/filters/enable-background/with-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc17a5531c69d31321737f428a9e56de2c22654 GIT binary patch literal 2024 zcmZ`)3pf*MA73WS7qjDL)>mRSvrR6!6>|9) z3Yj5aY2_Lr8KQ4RD%J#oTK*-Mc8uvNIT^Og zQsfS}4RDOGGqVFDY39bC(7DP#8YzqhJE?Q3Cp|CC#9q()&;bHm6qIl+xxRoTuJgsQ zS)VCsB!LB007&fG3BIGRu_V&O=X~mDB;5VYO;A+88g8IdBFOje83*i}PlsH7Coqk@ z9rK_Msq!MiqSC$hAM&aW(U(GAkk0HT=;EXhp^C)$!8P1jT}7QZ#t?_z`ZbBq2lB?; zxk6s*M+@LD-R2E>7iKQB%NEAAh;O3hC*kQik?;8+cV-CzE?)&#a)LZb;lv0AHS;hQ z)kB;Mh^SkF6pzEQv#{(>f_sT<-C7?gA}et>tw*uMnw0ZE%$wqql%F#XDLLx6LsBi} zCeiEYhyHp$ua~*~9QOFqTf99cj&^|IZ4otxoviZoP6;6Qh1^=VUZqxTek3$Xw{3af zALa$so%GpVQm^Daz!@D^BAiG+=rG@m$2aqid%Q=Y{^WrIR3_O4mQ z!Ih8Gt*|t|1`)g47fqC-Q<|lIl-U>cObG#*ger{IJ!KjG=hq zc0Y_cJzkdV_2OKvslVwn6Q0jZ(sW=u`>Oqw_K9bx8l#LaV^YE#Q%o63$2NS3R zLc?dKAnKmC1c{at1dmDLmaM}K=gXKoI@(#}K<{b%9cI{pp(eaIvkmMDCz;v!a2KMX zkst4(YBu$cOJ5H-YAR3dQb1E{eH@sa;Db3C7i9T}e2cO&e{*qtO8qy zX9n7!S)OWS5i3Ir^{>9FK2=`z1g1=gxv~AuJU0}p7Nd??<#eY9Yw9UUAhgJ{5oLO~ zu$$v7)UT;(G7cKr(o|q5pFUCrM#CkA;3v9_q&y8t2_zJ-J^qN_!T+HpC3aNrOedF| z@2}Yk9}u{e%9H?PT}oE(8m~iTIHdH!n=(eoq){fg0UW#ch?<#t|9~#mG_TJ~TlKvg z$t2b8{JM1noT|1|F5g_eG1Sx;g3^rd-`DtheMY?CFA{E!vc;6?s}=Fh@pbVXt9Mr` zSL>M&e(CDQ#&UEVZ~AS2xm_T7_XQ=V2Nx z2+|KV=n_^@dCvKKX07j?x&Rt1tRl_ObP1`_oe=#vSH)#0#A?5m3i#>PjGuwP0Q|I* z`G{xcUEYs4E1>pj+vrr$VHh%xYk9cR^)sFrtfBQL%*`OpP$yFzRip)RB63lY&8v*n zCZ^)Ai+zQk@IJlaJ`=X`dM*&^9;3{D@!cX|SOuy`Bhfr7^}b7-yINubth@`5EY~3`b$D^H_=P7|i-C|qp z_#tPt!^%DHrG;Ogig~9ua&P;KGCDiu{g*>l=(oPGg!n1(^8V@471eQS^}eplk$4V5 z7e(_IY56Y81$W#!Si7ncmE|w8h%}q0Fu0F25u`(1`CL95&J^T)u76?t{wQDFZ~pkY zUS!?W7`fA`?5J_L@3LdN(@@G#1A-KBg*^igS1z7N1O82StdAc2VCh{^U|8YhInEE~ zIuM!0P9}(?73Nx-%x|y(;zwe7)AKJg4CQE>mhAR6)q$lpBi8C~1j!%S2JF)p;S7FZ zt2oi0Z8KKCB`GwRl1EQqpx2N90zg3qs(}1+DX~jZLPqi%u>#zYCTzE%|49CuvqL%( zx`Xc9AN-@@U-$mU?;Ej$4nX+xXy2J^-{7x)*8(Jk%Yk}(NA;a3Z}&u1QIdBB!+IDY T)mX@O2M3@Xu@1F%XRiMaadTtu literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/with-mask.png b/tests/ref/resvg/filters/enable-background/with-mask.png new file mode 100644 index 0000000000000000000000000000000000000000..beccf4f77519e8d21a03ec5b4490b1f25b767e3c GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pv_6GQbxB_V~_|L#VBLp_So`E4> zfgxX>Ay0`RSA`*0nIT7wAxD)VTZ17>iy=#sAybDTQ=1_}k0C>sA>Du>U7sP%h#}38 zA=QK-)tDj0j3LF8A=!c<*_2*(K>Se)3ZS1l}dvAf*Tm*6_k`!RMj*z zwX}6~_4Ex4jf_o9&CD$EaktaqI2v+nk3SL|iWxZ=LA# z-_>`+#0)u?zoIQFYYwM=i%$@pAayJz(Ru0DIrVG9gDn3qYd{8nm@j?$ZN&iwClVF6 zYi_?@96xF2Z{3r(?o56wyPZEwPJt+(-n=J#s@K(7XYS^EUVHY~0Rr|Z)ZJ%hq&l!v iSOW6Sb%SSI(({rYpEWzY`_Vj5^mw}ZxvX)zyPzY8ib3>Cr mRR-amIPY=3F#0&_UG7<1)|C2kZLR@2iNVv=&t;ucLK6TumqKO$ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/enable-background/with-opacity-2.png b/tests/ref/resvg/filters/enable-background/with-opacity-2.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd6ccd28881eecfd0ee1fa24a59e4877cbfbb0e GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzK)B~CSx2>8el(Yd-%lfEaktaqI0JN8Sbl29|@|2O0Q21TfDy!1Pa5Aa2j8 z^{lfZnUx<*Iz8)|@65}4bR%bpbFeTqI{fQ+)94-l2%PJS6JH`6x+?_%9X7_w5T4Kk+!qn&xrhML{*ik`RDS6gT1p%-SjG9pPWOkY! vM+)a9&ENZU1enxC?)^JM?$D_3>EZgn$Xj2=a_&l7L#Y0etX~*Th7L3c>;_Du_0Qw%`f|M3R8Q5Y!PV zjMzolu9PZ>@r_lZ@=)6W!irD?#md7Prq%kwL=YpC-3grCzxJFvbMKk^`F(%i-<|V2 z=N^n%7s0Y~v!hTbtkqIUEII2f4}(s=&u_R;MWHZyR!cUwFxIVla4Y&v!#bkS@Pe!6J(noXy_ zLKc@4;cLG6XQrBeEFfj*z|-)YsqvvFK|6;!?mo>+p7a?HW5Yf_kKBC2du{#Prg=R4 zr|bh0J`O+SOFuP6A3y9>OZZ=cZy_!v+ada}8(M$;H^9$cqhR4%lc;`9x-eMcVThC* z_%g%ys&(w_(jHFg^IZLey)v(!qz2aR8GfYZ-m z3)G-Ph)SasV4tB9^I+K{bVFg_ld>aU*M5ZYZd4>m6X)=%B1U=Zj0EdcF)S3<6pyaO zz3~v-GkR$284BSiIkT0`zsCOvE&+!_Rhm>AtPIrB2M;M76gCF#zxVo8m=H8wawav0 zUnLqSeEyzDEJh|X@F=tw+gq#z6xOm6^Pj{rX%wR)f7vAsssq`OP_#>B`pgUBbR!?E z4g;gk_;$3P(=$0yTU%t6>BP5w6&4P(E1N=+wee2+%hhnznCHUd|DvdT7GQ~?cQ)0sV7wj;*8oB7N6zkO zW$Fj21H<0oZhyaDaE@t5td2f&*fksa&c-^kHb)M%fN_O}4^&0T^!l9!P_?-)#`17D z24btlbimx#pKoVJ#AfK>Vu6}O=lFG!fB|hF(ZLBn65U@7r;qPt)&v?Dcr$78tz|7+ zAHxlvR5u`mpu)!ba%aDVv=Jc#zrJ>nDsTn*JqqVpY02#i_Ql&8a<)Nc^nnOD_copB z>0!){fwCIish^exE?ZDaZSER`P2j9T;FnkTT%=)!mTI^{y@Vdi?LPP+XaV-ePzmA~ zk>ujomM*Ca*hZE#PPaCdkIP8OC=s$~G}+=!ijRnp$T7=WwmXLVM7fY&Zo~hCWhehy zCxcXw;bb*@!ML7Tu>GO1O=z2JjK4}bSY_>fe_p2?sVSYl&n zsD{;{&eV3RN+-v*y*RC_1@^IN0mZ)xm9`7 z^(>(*MVxVLc~_Pn*4;?|D96e3re2Ud`mM)-Rg(f$&fgM>HgMe2l>0}rs@6!kUO>CY zuFzTaT;pDr{qdLYl9)9~kokz~#TDmP<^5Fz#f3OiT@xYm$s#8x`Sk68ku6GZ`u$|c ztl0E;RSUvF5M9Lzu{%@<+S__>8#%cp7Pp?hE&6g_F{&}e5;F=S#@61u|E(pbU>Q}T%K+6B3$*#=-af| z5nnlv5bMPlFZxG2E|pd@B-DFgI-V|<4}kg`I?xnKe9^TM0#Zi`whTI>@QZt6@i-4t zF9~r*7&SwCst&=l`$M~LtzN`IdM8@qzyt7$rl&U;5~yXeUu8iyMU&y$fd1*NC}R?h zkG(H7Uqs1Sy*6Zyf<)>pDzO>m&-fhViq3iQ!z>VmA5Zkngp6B4)H%6A0F>q?{;6)T zu%&f;d!#q_frWfAXs{%FeclvrA%B<={b9x$_$1zow3bL{Q86?YW||gb&xkebG1ie{ zBRTUat} z^}W+f414B?G&4Sgdh8h=vqu_rO=Sg>Z?x#iZBWVWw|!Uw6fU|p>Wk?}e3!j^*U1zn zA=C$B`B1K!p_h>P66n&6tt&p+mj`TQ2C4V${M*}j+WjT)i%cq^(g$G6<^txEg1q0g=+{IefEsc zGpD|rKI!GO{wI@r?oaBxHKFZVU-QMDhBMu@$2+SJwU_U0E!o*pxTP^~eM8o&y7Z+r z$qT9z=Tyc|FN>a38qr%4+EEzXT;Nx))UKq~qGnWWq|v0I)TU%mV_;rxu3fL~P~hN_ z>ta!AVN+z|p5^YD;i=TD6dE6z=UwHW?C+iG9T^=N93QOIsFW6%784PZ5SmctT9y=? zRO?V%>|R{pS&-|U+icyO>6@ADSz75>*=5?*VAG&fr_g5J)@#(eSZVQGwYd}YCmi5C zuvu)gN{!4anN`!YrcKtFoaJ7yKxx4&wOM<4_ihl|pjIifOlH|G-d$?tGTZsLuN7N+ zis6)6sZ54T_FspZP3XUU}4CTV5JBwNR7rAlcfi)kf@C7Oq8 z#fxdhh{c-*YekCbg^9%(`Rav==>>_!=zHqhbzXX;^6Snrib}sPp=YDO;%U zdW*?eDDhe-@LI|6TFY>F@{4=$idl;@*oZN>^YUAZF}QH>+VV2kaxgeCusAR<{Eyjv z4;Z^FB|(0{4Gazs_;%Lb0Y1Sbju%PNG?6Xr?9yJ8T?^=QaIE9bx{2E-KT#Q?V49r zlal|w{q@INO0RAkrM++O$$gd+pS`;F%+r#Z9r3p}x%5UUzdC>BTkM@xX0P9htnFPo zMQH1knaa=2e!Z|P%9(l7J#YH+&z1jXu`muC_-H84f&fqKoul3{Trzs4QSI@U#dqJ^ U7ra^hj-Wi_>FVdQ&MBb@0IX3HjQ{`u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png b/tests/ref/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png new file mode 100644 index 0000000000000000000000000000000000000000..de7d25dd384f70f1be2e8da54159da706c6d1b63 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pveg^o2xB_W7Shj50k|j$PE?hWo z-n`kfXU~{1W9rnYlP6D}FkwPZPfurOXIooaOG`^*V`E)iT~$?8MMXtvX=!nBaZyoG zVPRoGK|y|geqLT)PEJmCc6L@)R%T{qMn*~w zva+(0l9H^ftc;9|l$4aXxVV^@nD)AR+(4hRlmz(&H!wIn;M-Yyhk=1n+SA1`q~g}w zyBkXn8}P6MFvuwVelN+iaLT#8+&BMMJP1}4sb@+nt#Q&yep^v@?OaFC^K>Q_B=AIb z!u&ORq9X$<|9`IcpJ#m2u-K})>Y2~{w5O|V(x2`MdmOj!%$n@o=Tcl!@60b$)lS-V z-sSt9mv(P$um8Qh_xqfEY0V7-2PzEZkv%h8G5h%E&1GT7)tCHZDBYS{FE@SNR8WHP MboFyt=akR{0H6`?)Bpeg literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feConvolveMatrix/bias=-0.5.png b/tests/ref/resvg/filters/feConvolveMatrix/bias=-0.5.png new file mode 100644 index 0000000000000000000000000000000000000000..87f58ca5b79ef9fbcb952783ed64b396815a915f GIT binary patch literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pvk^_7~T!AzYNK1o=kPsjl(%H#y z>=;99>#>%WW5O<*t2Iq#SDRSs-u9EVo8u+a03Gyo2aOytgNh>nwp`Zm4kzWlasrMwVKmrqHJG?Rr3*UHf{l+P~f1RK3&GK3pgd@fR1S+gX zv&9$vk5YhujmxChoZKbN`ZA8~^`>_~r#U#N@l@WHP4f3F=TEk?i;>&$+u~^7={dWv z&N%Nlon6lF{>JsS=kBtB%u1=6u&mow&OZ75?K!)@PW^SFNdES|XLoc(w88F~8=KC~ z2nH8#io%7$*MKZ3DTB#gyjfZXb^hGgjZ7f*AfcmNARAoLuS2y0m0x!U=>+LTmz+?) zM_{&I+5THcu657ZZ7nYkQ3xgLn&+H8BHpp@OwwQe6%%dUpKh)P#Sw$2tDnm{r-UW| DT?Ex_ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feConvolveMatrix/bias=0.5.png b/tests/ref/resvg/filters/feConvolveMatrix/bias=0.5.png new file mode 100644 index 0000000000000000000000000000000000000000..3c27ec873c7cd45dccba8f0fd9c506dd5550dab2 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3PvrUm$fxB_Vi*u8uA(W4;Z(4pN| zuL2oY&z;+I`!(}{@ zAMZVW{Qus)|F>@aym|BI<;(vsUHW$M;6Cc~=MrX`l? zE4f2<^Dp1|duK|;Pl5d(e%SHOUVHh@+xOmk_`2dNX6$P_E1vnT%vk^kCaiLNr2PDN zj@-9xKE>PjYBP4~GtRr#z2T|W*}G{AA{s$9zj$M{JBgJE2o`OA{iaKlgM*{v+&WYy z*nX?s=hjg{OVLOEq?#vx?!7;>ZMI3d{#~K^z(?KpZ;)S9vuU~U8DEWE1`njxgN@xNA<{514 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feConvolveMatrix/bias=9999.png b/tests/ref/resvg/filters/feConvolveMatrix/bias=9999.png new file mode 100644 index 0000000000000000000000000000000000000000..76c35816476f3825579586f0adad65e795e5c0b2 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!Azk{Qv*of5XA~Kt4-J zkY8{EgTn*9owav>{3=fu$B>F!Z|^t?GAQsIIUpU-z^tOc^nX^sMY|cjjinRbOffeK zzULWM`O+z`P=JGlsnJ1!Z0dyh348TT^9rMnH@#!ruNWHOaO%H5$d#V1elF{r5}E)) CZ9JF& literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png b/tests/ref/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png new file mode 100644 index 0000000000000000000000000000000000000000..c81f831f0890c9735bb20b3f123c0e2a5e9887c1 GIT binary patch literal 244 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 TUt`F>SDNZ$4RocVW!V1$xDdC) literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feDisplacementMap/simple-case.png b/tests/ref/resvg/filters/feDisplacementMap/simple-case.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feFlood/complex-transform.png b/tests/ref/resvg/filters/feFlood/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..de8580339da2b6da03120fa22c82ad341f56594b GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcQseV4L&y5(O50S*?XMh6(Bnqsy8WtHo< z{-O#Laa2`MUhAGGPB4vNp+7Q`#&^t;n%*(`Uof1V7&V&*=q3hFS3j3^P6mdKI;Vst0D@sWg8%>k literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feGaussianBlur/complex-transform.png b/tests/ref/resvg/filters/feGaussianBlur/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe1a18921a79fd9e3ce2ee29950e30c3d175dc7 GIT binary patch literal 15718 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 R%ubM(JYD@<);T3K0RZ7+Q_lbZ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feImage/with-subregion-5.png b/tests/ref/resvg/filters/feImage/with-subregion-5.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb3121bfce5072b9a7ae0a6edc09941fde8c1dd GIT binary patch literal 2279 zcmZ{mc{tRI8pnS#V`hFcW`<#w-%Ke)iCZytAu~peVa8Y@%5uuukra{SC~HwdI;E0i zmsFHPc9CW5HDs41R46AUOU|5s?sK1W?|q-oyZ-h5@jl<@y)57#z+>rH008jj9JY-( zH~;M*LL6_$xD)~ayjWmqXC`j{ZS+wM`UrzQqCp>K(8LUB(uNqcK`q*#CT&2QHlRi8 z*P-=m)86XR-s;f$^k{v$v_2hLuO8H^5B2KNMEW$59wah=#Kju}=*?b89AEE+UK>C? zMo^C-)MX5H89|-Tc@OxgQb&$q~gy@#a@((jv_=yNJT|SMMe`MVhEw}gmYI3 zAqj-D*YIM36Y)Vw_%lhkz$Ez<_NeaWMllD}kO z#kgf-U30L`xmc$HjKd?0-4l%6V~lMv#-;*BhJC37GQ)gFv4dTei4TM0>k|Y!!5!j|Ab+eVA!uP%n}Uz z2175yP~QR6G7Py4h(W9Zh!p_72EbPV*g61g0KiX}lyv&Uu$%Z~B?4{uwif`CF+zFR z5C9;@%-Kx4vjcO(!sJ0V2{rbb+EP4U%=5g3d-6-uZS5%45ugAx+#02N7Eu5eI+h$m zSk_w}Jsj-#`%1)Q3qqjWVvV0}?&UvP37m8(-`H+fXR5-z(1IRwO9m3rK=%ddD0vA5 zkO{J+BmP<1n*NN?7p;OJZqo4kFD6cq=LlWfOtif7Q<9yCi9qex<}=|tc$mx-2Hage zN@bT*H#h&8Ocy!Z%U?y5uCJV;5xMEEzz9-o{33rlhuD+=CpD+Ow?)bwtK+?%6e7J| zD)4MeV+#r`c1EM*Ez|3m?%`@3w~pz5>+!b?P-p9&aa1-x<(*}4mEWRIf57j&!U&j+ z$(TE|orcR7Du&*;!OPD|G3h{c*Fu>Iv&+}c_dP|Kx;tl8R2Z(!yv?(ReN8Cg0C~*z z#)ZqlPYFlj@iCi=*FRP)w#3$m##JuZoriZOKe)GL~1FeqduRfe~2T?B;ID@r4U;3=p(<4O{4i|Od?!m#b zx#`SVaU;npl)ZN_0*5L^)_c(=3ZO9ZA?cR1WW%j#S^7-VoGK*Fxx&>c5lMc;V_uP3?(dCu&p8ni zsE6A1{UD_5}?(h8C5wbwpJm=yg1jhxa#jY*F9F>Gv z)sDDNdAPweT(X+yO7&KQ(y5TTf#+vOi5kng^{WY&UcAi?adGfS_Hf*muPc}3ok~0R zu*)T;I{Zts3lw%BY73}Pxxfi6bQ$(=Je`*uc2BFve@A4)4MqDIGqt9;wWTG`SsLk$ zid@G1fwd=9{T`>B=O+yFwV!9s%16+;Rk22DSe>nf2+3E42E*&+ya@xV@vtGTu`;`d zP)so3=&o#c%VfE~nDY}cdz{hMzQ;MwFqKoPXBQTetoBFGd=kx#&i+iy9fTA%{&28( zBHQrP;iqWgO!I;0OYYytJxU+9%CZ+V+nf^Q*w>2s-Zhul7gvOka}TCActswvepWsr z@hvY=b$G;gqRe=Y(vg~du*t{H|0PQQTdMy5)DuzXK@D&QBQ37`%PAI_Hk`RsHnY5I z7osWpM?gHc_H$f+<7Ky6;gDjmx`fYfPwgO*PT!0U?)4pqN(B_ZV-K8U>Nrig9$(iO z5TE?Yf1$te(J|oXP^nTaPtmjV1lli)QSs=6e@RBjiH)dDrxo0}px?Gj|J2g|Sa5?_ jKZ&@YZk`trEBNZ#S+TXM`728F_q$?l#%C9?+#>!0Hv+~P literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png b/tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3653cc25c9a0bacd3c87530b8d36ac327c327c45 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc6a#!hT!Azg{D+ZXMgvfh1A~17 z1OJ2W%U}3_a_l8Re!&e44h{_u9xz_vIt3Kk?CIhdQgQ3;osFD_5(FA9G9R>4#=S@Ow8iS`^5U4 sA}mZdr=3nm7~Lo%eDitXZ8`lHb}yE0Eecz;>?6pxp00i_>zopr0N;yVUH||9 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png b/tests/ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a72f4c871690e1b192e463fd24fcbd76a4ec662a GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc6a#!hT!Azg{D+ZXMgvfh1A~17 z1OJ2W%U}3_a_l8Re!&e44h{_u9xz_vIt3J3=jq}YQgQ3;or9c*90VLLG9KJLiS1IO zF2`&>odbGTyp9OHF}nU_%9%v-#y$1&a%U=M>~Q_+SJ?N;R$1>VHwOz-ql1C~nEKYf zCycGpK}zBM{i4*k`EGXqb&T$OK4HFl9UnpwSgobpCL1GuG{HunS8}R1C%CUujeY+~ k5>;}O;iYGV(cR)D%0E9cYJ|r490hsQ)78&qol`;+0D=o#&;S4c literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feImage/with-x-y.png b/tests/ref/resvg/filters/feImage/with-x-y.png new file mode 100644 index 0000000000000000000000000000000000000000..88975937bf171e748b7bc0f5a5dc73a8532a2c0c GIT binary patch literal 265 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feOffset/complex-transform.png b/tests/ref/resvg/filters/feOffset/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..0c894e7e22cd4d644bc22f4d517a4e09d00505aa GIT binary patch literal 1871 zcmbtUX;f236b?zuzK{UfNJ18pkOYD#i;)D12|~cIL)hGp*p`Yw5CS3*3xojbv#8O6 zr>nGRDHYp;TBJP~ZCYEcw$*AaNVKaJd7$>SO6^4c^iO~E^q!gf?tJsz@6NmDy>Vt` zq)%P59GbWQjl=q3(I|`` z3hjsT1Dhy3#~;t4FYqT}X+#VKkH%yDa2UYx!=R~QJc^u4-~j>^7eEF&fqEr#i5!r@ zzz}idP!5sLB(P}<7-TGsfPGqpuHn952BKU z0VDyF7|bAW{aMSD^vDpJT0jy70Gz#C%~%vdmIRSRfp`v`87pB%i-0Uy8U%FMDH?9( zV*e87B!@spqCea!iqddPPv8 zLbNs!6b)D!%FBpi8P#0#B9H=#iZ>()OSHVq#eoS5P#5$^R%sHg*N3c(=jX-9Ytkhf z6N8eJ;<6;s`UKHx9oHNsC|n|1o4_xK3EgDi=f?!+M$4^f^6E5cxq)Mf5U)=RYe*Mw zNaUnPN;f76EOE*vb7;9iP_#r*lPZ0|D0zOFrmI9&kt|#lFD%u9>hdinS>qO4z` zs7(V3DtoqgLxQHW5a61Q0uZRSWoSB!!WzsV5iI33Ca?s7rqiO_o~7Js28jSsHD@b* zOu(^3IP!s4znJawExGfc&vz84?3weq^I&*Ou4;SMe5`EB2ye>^Z}agZI($05zzNPU zubBrLJ0JhkN3{ED{p;|(!oTl!T81y*?*Y0hyq87zON5{r$wM%t+y-xqk^5rR}^t7}UX0tgnE8k)%C@d-}EZ$gF_H6m4ip`Z( zRaR@Y)w-q52F$)=_wL=hcJ1EN-QB%!?_Sq|13f*5dS7|9@5qsXfq`Sk-g|Fo=!4XmEPzMq)5IeGJ@_txzne*ER<-|kM`n}%oZ zKX~x)cjS*hA3dJ?>(MX4b0`!h*knw~vt7UY-8Z#?I8O59bNzqC{5tj2D*8WU*UcLl z>u7-+x0l!<{=+HKGri!qHFsb zPEO}+s!#2W&u=`tc^X3cvup>OufkAgd|#`jxYgnAEOE#E&KELw=8heGwo*c`Z`hBp zPM<>z;D-{zYA=aJ6bQ`63K;-1V|7V;vmP*x@jmorCq$(9yS?n{VNDw|};Gw78~f zl{Dv9TiYZ5z|ftpba&hwXi3@|Z%#jq?(Z^quW7v{4=Hr#>dW3c4Sf2^${{4y{+Yph z91ZV0`J$tDVrAook7l70)^22fqT8_RxkAmzOxeas$X3~lT-oL^c;lUeb<+?BVvJu% zRKZZ@Osh+_aEPczVUdIi+N<9*BZ|lTjx4(fB^*@}} k=4mt1-VfR1@;GN6`bleC-nca~neT2eC1)7lUAAV&-$fa#Y5)KL literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feOffset/fractional-offset.png b/tests/ref/resvg/filters/feOffset/fractional-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..20a62d311bd8962de4aa112ee446f4b54f342ce8 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzM@axF{8G7B}IlK2w z0J2z1g8YIT7#u<#)ShxY4HRhbba4!+xb^mqBkutN0cJ;Stwy62T`GS9TV38Mxo&28 z_Hh5_rF$l-KRx?IS6}(7qk;ej3sa*55;f^hbhaZ8KZ+Qt3Jji~;&+>gUuCwJ#$3=n XFjIwhWBJsnAoqH@`njxgN@xNApYA|v literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/fePointLight/complex-transform.png b/tests/ref/resvg/filters/fePointLight/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..51eca079c552aef911c41b1cf17d20750d74324a GIT binary patch literal 4905 zcmV+^6V~jBP)+9<3>gnm}=;-L@=jZ0;=H=z($@($Ue;(9qD&&(F@z&dtru%*@Qo z%gf5j%E`&e$jHdY$H&IT#>K_O#KgqI!^6VD!ok78z`(%2zrVh|zP-J@yu7@-ySuu& zy1BWzxVX5tx3{*owzajjw6wIdv$L|YvazwTu&}VNudlAIuC1-DtgNi7tE;N2s;Q}| zsHmu?r>CZ-rlqB&q@<*yqobmtqM@OoprD|ipP!zdo}HbYoSdASo12=NnwgoIn3$NC zmzS27mX(#2l$4Z{larE?l97>-kdTm%kB^Ryj*X3tjEszni;IeiiiwGdh=_=XhlhrS zhJ}TNgoK2HgM)&Cf`Ng7fPjF1e}8^{etms?e0+R+dwY6%dU<(yczAescXxJnc6D`i zbaZrcb8~WXa&d8SaBy&MZ*OjHZf$LCY;0_6Yinw1YH4X{XlQ6>XJ=++W@Tk%WMpJx zV`E}sVqsxnU|?WhUteBcUR_;XTwGjRTU%OMT3K0HSXfwBS65b6R#jD1R8&+`Q&Un> zQc+P+P*6}$Pft!xPEAcsOiWBmOG`>hN=ZpcNJvOWM@L3RMny$ML_|bGLqkGBLP0@6 zKtMo0KR-S`K0Q4>JUl!*J3Bf$IypHxI5;>rH#asmHZ?UhG&D3bGcz(WGBGhRFfcGL zFE1`GE-fuBEG#T5D=R80Dk&)`C@3f=CnqK*CM6{$BqSswBO@XrA|W9mARr(gA0Hkb z9vvMW92^`Q8ygxL8W|ZG7#J8A7Z(;578Mm06ciK_6B7~=5)ly*5D*X#4-XCw4h; zFA8{L${so7Qy@LmmK!wuFrx z$b?LY{CPa?kN?;GdEIu~-uk#*UERO)Ed_bV>GIB&KH{reOcLUuta=8wyaVI)*SJU#Fk3#uR<3cK84S7XRWqXH5#;L$L`bq)$32}jswC|St;8pB_k6L3u$!W^EM6V5>$gfP+vG54Sr zaw(bOVMiUrC7Dd5@d>FP_I^Eng~7uCqa-1rWOA2oFC1-uyKt;stQ2>1p{xac$0(N`i_;M)|OSE>jG3^_D`e$8J5A; zs+^HqKM$zd(hLgOz76t~(z*^}2{1%Uyh9Bn<^f$=Q}|XEo~njwYo=`A$I}qxA<-ea zEUMx-{XZ5kGf)K|^Qsw%4r`0RMGyx8PalS^79W^*giW;k%0Yqyw%Acw*tWpe#T0^} zRB%W^31sJJO?UN>_l8H1kV9*DOfIuAoqIU0T7;3&B`G3 zj?FN3@#UCHBKaFZ@Q7(~TugBQvltqhj+j$H{z?!$076aSql_`=R70AC!rgT_baU{O zI|}TA{81BUE@WIuVv$8WlOHRfDF9x0xk#P>VF!^zI2x`98I@6^d&-R>a43KGL3r9j zN?^2n!Cd?=D%pJ=QIXYc8$@$DK-8PVt=2xs#!rAgrMDBB=fyb{E4WVM>cN0wGefIbMwy$NJ;?HdBx29YP=!@C8+ahdI9gBD&H zGYioS9rG==G!fy1vJFBNdO-(u__97KJoRYR5-xTcGtEm975Vqrc2I%0f25(`nzUH8 zk~PAsLTdQ|n&aqLI`=^owtOvdV2P`mX1_Ktww7`f1#i9#(n%7|O%Qr-r}JdptWwh! z#ss7I6%GJq>P_cUrbX{0j4akd$+bXXYk>A6;WmYGYGMc&*aZ0;C!P^8ddJ#4b*GLr zF}w#ft`aht`hqx{|F=ODFw0z)@XXm}L5Q_^nYnL!j-ueyL=bxJgJ{{hllTii4KpdR zeoB+E^5+zUo0H^eMU(>b+Eu$EUWo}tcjGtj=DO{;2}5B-=7l@&(&=T|=WJpdsTPvf zMkee0F&Tj|=Q6YSvUR~Er(Vl{+#bwO0b z5b&~_Ala3vmJAVdVi_YC6bUK1h~+M45vWWh)kU=1ilhu>k_b@HrDXt_+eqI@-abE4 zVFm}MlECLZ^ddhHNSg-Rr)Qr-*8eKNPNfJ{dG@-j7GIU*@~>wr;WBDMH$lFSYG6VmmJt*q zFo0>{h2^ac#XU<;f+(@;K8Q>iN~Ds&7gFYe7XD>a3O*au2rys_XTcPwLqvhGND;}S z2oWM(d*}d^OP1o^)PUkzc5{wYOOm_MZ4gN;fr4TpNh>D`d0+(u391kT%rH$H!W8-I zz9O@s0)!e+p%l(R9g5(~k>r8_7Lt|}SqFlc&(#EZN^ROvWhS=9j+Dv^o^b8rLS%ZZ zQbfFGO=`l>OX9aVue~q;>;^>wqexPO;9H8bS`h%{Fp2Mm29AgfhJbgoSW&}y5xFD* zB0RGFeG>#LhlL1LMljgbn_Q1re`5#oh;jI=3)u-OxfQw#5;j$FXfj8uT-C6pCq+UN zf3x1ri-?5^V^MS$WKO=g2~$)Ppdc3^KN*BsYwT?d6eKI55ag18mni}RmsHA*hcYQJ zOHz}$LXo#DRi%eQW`kIv$ooK#cxK1|EuaXzDy)Sasz~cJk?v$TT{I+VMyFPOF59AH zLphPW)j};vKpjI{YkpHg9VA7#A8=Hi2^1-G59GJ`v#(Q$C!eK*A!IF=0vJa-&dx{k z&#MSadKmPMb0O;Xb8%&#d`;?r)dwhIUKJBvxf`1DKy+jVIBeuQg@xfLWaf+mKcUo8faS(@-J&?ORQFqY$NI(C}vU}pa(gA!DW zT|`YN6uAq65Sb01H7gYR_u&`6p4{Y==aNG0luR23j-m@Bz!-39r&jNm6M1WI=;#xqDaB{{o_vYms5OQ*1vSJj~E zy;O^oT2v8tyVZ)!B+w*-K#_2*)7mM@zI8nmh@Gx}nX$y<`)5IBlh}I+;Y^;bar?iWbIolV27)kmCAqzC&yl|K zXxiSiuFHL4vRK*rVJ0a84JC#Y9DpB&LrRA2qvzdplwoqmSeAo=C<<7Z)69AW5KW5I z^-kVyd_}hK(j*vC`ri)1>>wKV)2o9t-Olr~yp!lEEb4g7JTHgC;axwM4x*Ouqi4=7SAL(g_YSX!6ugC3EC$QOHPA#BB+_fdi_@e>0 z3ynm5yb|`nSUOg0h^!G32FK8|Ju?WQVGubb5td`u$$CVMd6K9bhh|++jDx8A$124b zni1OI$O~{ZL|A|&EwVK<9hXn7MGie@i#ky|#iOD-@{Ci9q@2wT908g34aSx%(PAXM z%${^6$&Wu|F$Dw<1|j^Z-SxPGOJyvw<+H3>GJd(s0!70EZ;JYWj9_W1qS8qz0T@Ko z51n%UkZbWKz0T5$hea$~#N*zLhv))BO^J2!DjTpzphXgxNz?CGFeM;HgCHVNll5y# zDqvuA*|>S0d@tA9&9DtoietpthJsM((wWIsrWaXJan}?Ci#}3eUytW@1bxKR`cU?7 zDk#O1b##its!37uTMq`}FwZizXnRMzkP`@w7zhM}iBdkyk+D;Y(ngMEoExx~5Z2QM z4H%xa894_C9C;iDQb$%3QUm`K9~jvZmXhTdKxtQkP#Sr3K!Ix06H>8(WEO8afYbmP z=}1XCEJ43|f?&jgt-`v+Y!KdarG)UX57op_3q}e{K`D|E1q`#EVnYy22_b>l{|x%P z*2V;))ea)wyqFLaD5oS|1GNz#$rUuLz!l0_$~68eCQ$_`5OxA%@P{+$Yzrubz=i@> zxY^8#356C=z%bB}^>vF-kethVJh>-Wx=2rma>U0vQe7Z4^MyLO;0HH49}(iL1mX3= z=vx$ElyB9ZccsLg6^9*(3PN?{T99fd%y*nI`}Fq@X6a*oAlDlx$r< zx*zOF#weCl6d*v%QNa^E^vr(5x_vDO<&me9z>b=g0)tp#kcM(mZL}lx=CKOKWM{&U zoO9;j$e!ew4|4=cemso@RY!7Ksvj9?!w(wq71wgT?(tL|$la`U9TL-2uwl1;m0UPk}XtRiB@GPrGRV+K(`})U#kij zsk>Pa^^y{k!`5;;WM{7_fjv^H1)Ct-8v1i0DeK7qbXKzxN?@R9NJy$10YNqD2VTl$ zs*x`X@tQ9w9=;Msqea_$HDOmzt(%*hkFHOy&#Et~uc~jN@1onTJJEgDgXl-sW7kjB zFV}AR5N7vKnO00000NkvXXu0mjfD&YBp literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feSpotLight/complex-transform.png b/tests/ref/resvg/filters/feSpotLight/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..2099db5e1d57080bafa2afa858114a1a46e4af72 GIT binary patch literal 3045 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png b/tests/ref/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png new file mode 100644 index 0000000000000000000000000000000000000000..cb47a8a887492a6fa79615e923aa0c533e73bb7d GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!Az)@aKEp3*@tu1o;Iw zFgQHm+gW=D$glEraSW-r_4baVAcF$Wkpt2J4a_PEO#f#ET(q0f+gLi`%@lK^;Cr57 zl`oz03I#Y=m>L}v$fi!1pRiZoG_NrFc+)$^{feOh4yXS6gIww9>gTe~DWM4f@US@z literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feTile/complex-transform.png b/tests/ref/resvg/filters/feTile/complex-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..c80182524c9a4ca1576ce7e5bd2362c3d29d1ab9 GIT binary patch literal 3857 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 Xk`#Ayx|Qz;_-tQgl%=b`m<0bnoutW& literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/feTurbulence/stitchTiles=stitch.png b/tests/ref/resvg/filters/feTurbulence/stitchTiles=stitch.png new file mode 100644 index 0000000000000000000000000000000000000000..ff70847cf46d6f096f67eeaec7d9c9a90738ac33 GIT binary patch literal 35451 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ⅈ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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png b/tests/ref/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png new file mode 100644 index 0000000000000000000000000000000000000000..1364fa89fed9b5e95c347431becb5612fb722b52 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!Azk=yivwFS1kv@>xoP z{DK=893JrPti1!|*Lk`)hE&{od&iOYfP#q2LEqI2__P=We_U^2viN8@p_0w*fZA;P zr?!>Bao+nrF*Q0U2yn2VQ*Ru98DWY#C|q8{hefr6!i3oqjgRN5>%Cx`+mWmqzU}F5 PkV`#X{an^LB{Ts5*iJl2 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=BackgroundImage-with-enable-background.png b/tests/ref/resvg/filters/filter/in=BackgroundImage-with-enable-background.png new file mode 100644 index 0000000000000000000000000000000000000000..1364fa89fed9b5e95c347431becb5612fb722b52 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!Azk=yivwFS1kv@>xoP z{DK=893JrPti1!|*Lk`)hE&{od&iOYfP#q2LEqI2__P=We_U^2viN8@p_0w*fZA;P zr?!>Bao+nrF*Q0U2yn2VQ*Ru98DWY#C|q8{hefr6!i3oqjgRN5>%Cx`+mWmqzU}F5 PkV`#X{an^LB{Ts5*iJl2 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=FillPaint-on-g-without-children.png b/tests/ref/resvg/filters/filter/in=FillPaint-on-g-without-children.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=FillPaint-with-gradient.png b/tests/ref/resvg/filters/filter/in=FillPaint-with-gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fda62896a35dc85c2770f4ec08937d8a45d2fc GIT binary patch literal 16422 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 A%K!iX literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=FillPaint-with-target-on-g.png b/tests/ref/resvg/filters/filter/in=FillPaint-with-target-on-g.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1b8e04af7a404e864bca942abad35a4083b403 GIT binary patch literal 6790 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 A%K!iX literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=FillPaint.png b/tests/ref/resvg/filters/filter/in=FillPaint.png new file mode 100644 index 0000000000000000000000000000000000000000..4658e22d942611a34acc6b10cac5c52ca11e6e4c GIT binary patch literal 14725 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/in=StrokePaint.png b/tests/ref/resvg/filters/filter/in=StrokePaint.png new file mode 100644 index 0000000000000000000000000000000000000000..8859631f41bdf7be79e1356471528152ed8ebf60 GIT binary patch literal 11190 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 Uz!wwtf7}-eGOBN@rA!0<4;m7Kp#T5? literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/filters/filter/on-a-thin-rect.png b/tests/ref/resvg/filters/filter/on-a-thin-rect.png new file mode 100644 index 0000000000000000000000000000000000000000..64ed67d92e50beb003ffa3d5417219454f4e7f88 GIT binary patch literal 264 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 Vsc>(F{qvy#pr)j)Sc|lb_%G(QR&)RW literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/clip/simple-case.png b/tests/ref/resvg/masking/clip/simple-case.png new file mode 100644 index 0000000000000000000000000000000000000000..02e2be63d60630c0557eeffbcbc6194da019114f GIT binary patch literal 3049 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 rNdgm{l@00000NkvXXu0mjfDu2|8 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png b/tests/ref/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png new file mode 100644 index 0000000000000000000000000000000000000000..09929862ea9bea3a0e7f6fef0b0d530603bd0142 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzK)B~CSx2R%aNG)0_)g{jd&L4YHL=}D##m_4Cz;_q?+m^f4#gVJfR2y6jsEIqPX5hnd< fs@>sSTeTN)-;UhjJ08953CPi&u6{1-oD!M*?YcQgQ3;9Y@{+3L>lrr-wPphA=68SkK8i=fUI&XQU+9XWKuu ztqhLy-uH>A(Lq7rM6btv85S^;gG8$PCMVDU4i+QFzMk8DIxpBvu6|~H=9-lYa;T@P KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/clipPath/circle-shorthand.png b/tests/ref/resvg/masking/clipPath/circle-shorthand.png new file mode 100644 index 0000000000000000000000000000000000000000..2584ba0a345bc6b98c32ef6f468b490fe37ccea7 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzK)H6I^*|Y`7XDJEt z3vOU=c)+)__70F=>*?YcQgQ3;9Y@{+3L>lrr-wPphA=68SkK8i=fUI&XQU+9XWKuu ztqhLy-uH>A(Lq7rM6btv85S^;gG8$PCMVDU4i+QFzMk8DIxpBvu6|~H=9-lYa;T@P KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/clipPath/on-the-root-svg-without-size.png b/tests/ref/resvg/masking/clipPath/on-the-root-svg-without-size.png new file mode 100644 index 0000000000000000000000000000000000000000..e669b41d6a6bf4bb16617201114660abba8cad5a GIT binary patch literal 1463 zcmd5+`%@DK5I#r{3=lBB!b7-&Fwu%)41uN3=8$^4Y}Eb{o!Q-QXLi5c{bA=*@*+ZQ zNsc4{0BpnHAifFvKDrgb6sr{R7fn#l3y%&qA#nVEZRClVFw>E&41Pou0GJV$Sds0h z4sPyruT8%Gp*vy{lSCOuG7FRyHK)$EUAl3%t5-KPjE=p0HTiaG<{x}+{>s>nYycpt z!h$%_S$|IaRZ@B~gxWLZvM(|&Zr_3N{Htq=3I%Ithd;DvYYzI%9ZFc@vYF|n{jg@9 zlIhCy`ehNtaH)TtZVbc80|!Pl&#p?!!IW%!cxVlQLYRU;3!byN-h5&iI6w>^Faz1Z zGs|3W;89 z*fyXhXCBc&j5jN-6)W0fAgcape9Jem_h@_+ZI#Bzxfu(~ELnVLw9vBTG!IsUrUXJP zmz@vgM1l*8=mxE;Eh~~oXYoBKdSlq_AUNOJ!yNM17)_FAwDah86l2omFX6l&S3U(d zY#iJs3tGO>C-@%77Ctz^aYP>X<;&fLj@(GK&6SjTkR`m}!O1tfVw(rTMJM2)X9a7cerKKC(Eds9Br^M00P)s*cC$M(z&82MBQHVQe{h#wc8{ zn|r8AZ&i8Sm>zsoq_Q*(ae&hA#jKYaKpyG0-Jo zH^NNr=N4+|J;Q*!GF$j*R(GXS?nffq&eThl5KKg^X=69CJUJCGjc1@XL3hNwy&aO; zMVtB^bP>pCOcH?>jU*Acp)oGT^i0j`4ihyp&rG5|_u?S}r4)4H(m{t8o9Q6y#kZ@$ zF5niF4rt7!O$0UR$pz=!X+V(Xs!6Dzyi!v-qT>oOem~pqL+gpSUk+IuZN6l4;Br*U zUf4VF{JFj_XuYY=cR{vCFI--_H1zc#HBP=SNB25MHKPrNTQH<`Zoj}FBg%T19W!SZ z>|DG~psP5}LL_f+E0CY!L;y*2NNUM!oY!D75h z+h)VfSzri!vD>@h`T$fc@@J6NUF(&;Ln=a`Q*SEU>hOLVZO|Fp&UAH>ugFR6{0_C2 zsdtGH-+rl>Oxf<3+?kD@@1xR&sFEa9lB^E#LlMOH95~wOC`m1fr(7r=|{nY}LRoVFzF*m-XE#VvKd%VgQHSKG3Is_$(m*>4?;F Ze08&uOuF0FQ~ObY!-6A%S_2dE{{_Z(ZmIwP literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/mask/color-interpolation=linearRGB.png b/tests/ref/resvg/masking/mask/color-interpolation=linearRGB.png new file mode 100644 index 0000000000000000000000000000000000000000..045ead362e767b929721849d681f2791a9219911 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pvb_Mu^xB_X0`k{tEj%M)9`p*NT z>`H?Cf*TkZnV4Bv+1NR`xOsT_1O$bIMMT9VB&DQf<>VC>VC(h;Xw3P5S5Q;uunK>+RixyoVJ8SPrO`I(}WEC#?MBNYK5? z8#A9qyt5V!cx7Dfp_^%Y-T$?!=FU1d2V_vktod}~e9O)ICS9I9DfsD%((v^?<^87f zH>cg3+LLqhTHT)8cfQq%aSR;jkpJw6wQIbJqO1A(Kw<0Y L>gTe~DWM4f|1Nr> literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/masking/mask/mask-type-in-style.png b/tests/ref/resvg/masking/mask/mask-type-in-style.png new file mode 100644 index 0000000000000000000000000000000000000000..1ac1de8e9bd3167e583b3478852979f9672fd8cd GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1ye{C&U%VWvCxeG~f;xSnrc+ zJ6XZC$>hy!pvFZdL4Lsv3{1?dY#dzNynF&e!lGglQqr<=3QEeVY8qPFx_Smi#-?T# zme#g*4vr4au5KQl-oAbTfx)3+5s}fcaS4gZsc9LR**SRyg~cUh6_wRBbq$TpEo~j0 z-93F1CQhC*ZN|*mbLP!oxOmC3(7fjbxc6l-t%;E45_&F_R>bq0|q=U z7dM|Yi_%iAd@|vlYgbD{#r^{ w1qKRC_%@+-vEwpUCItB8w3>6#rA50K*kaj!7esmjb0PzSr>mdKI;Vst006J%`~Uy| literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/paint-servers/linearGradient/invalid-gradientTransform.png b/tests/ref/resvg/paint-servers/linearGradient/invalid-gradientTransform.png new file mode 100644 index 0000000000000000000000000000000000000000..b89d8ef7db3f19cfc7aeb3e955d8b8636eacbb4e GIT binary patch literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1yM>C&U%Vg@gb9|Nr~<@6X>q zzyJRJ`RC`4-#@xfBfe^^$qK;ty_C-?dq$mS6*4U;_`}RmzFKPv~=;s#S1SiTyTEDymRyBo|`-S?ChCm zX3jW0W7?@{Q%_Bud~))n6O$$!pU`)#ulHDQ_tEaIBV8SbJK7GlwH|71KG@uJps8Vh zL*4$m+I_Xvd#kJVR#oh&DBE3Dx~sH!XK~TaqJkX-dE4`Hx8-JU&Cc4Im9ZrwZF5@c zrqtw($w?cN5;i2nuaA#i7aP4cI%;iH#F~ik)#0J5LW5TZ2dxYWSP|gA+~0SZulG`K zuccldOFY~cySpxObzbP~w9v_6frI^gd)s-o)^n|`=2}_Iu`r))ZaT}LgW_Nh(Scl@ul@$oI?3_Q}fh$w>7|N%TmFcZ-X5 ziHdZI2z3exbO`Xb^Ygax^0e`AwQ_N^aIiPCvo^7^G_f!>GMyC&JOzwwmXaX9;06YV z2Yfqg?*RE%JY5_^DsH{K%P81jz{7IT|FQ6YwWxrDJi66$ly%EUPa4s;~jAz6N6zM}2sdfV(Zb1qacRK;c8x$0Vb2$Z-zUHx3vIVCg! E03usjh5!Hn literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png b/tests/ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..29c42c0459ceafbf91938bf42f98079f810af8f0 GIT binary patch literal 248 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 KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/paint-servers/stop/equal-stop-color.png b/tests/ref/resvg/paint-servers/stop/equal-stop-color.png new file mode 100644 index 0000000000000000000000000000000000000000..8f944783b92117a13b65a10a2c1cabd3a782fab2 GIT binary patch literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1yM>C&U%V1%dhjLIY^^KzW%$ zdnpJpZk14Tp!UTjL4Lsv3`{Jn>>OM?y!-+}BBJ6FQZlmg3Q8)f>Ka-)y7~r2#-`>L zR@S!m4h~MvuI?UQ-oE|;LBXNn5mC{x@d-)Esc9Km*|~WIMa89M6;;)>bq!6;t!*7$ z-MxJiCQY6?ZN|*mbLTBsxOnNZ6)RV-UAJN5=B?Xy?A*O~-+_aNj~+X5^7NT=7cO4D za_z>=+js6gc=+J)lV>kpzJBxW!^h8GzWw<5`_I2W9A9q%oqNyI#WAGf*4w*|q74QD z&Ii}bUA1~jmV-!<29pI-`=J`<%Eby-ztt=ZleB$pUZpzq>ug43P|3XMtoQMnJ<`ew q0|?|kJ31i1KOV4Kx7x<9nA_8P;b-~`CN`i?89ZJ6T-G@yGywqHh3Vt~ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/paint-servers/stop/hsla-color.png b/tests/ref/resvg/paint-servers/stop/hsla-color.png new file mode 100644 index 0000000000000000000000000000000000000000..fe45df263e59ba721ab5aad8a52ae8ae24142021 GIT binary patch literal 952 zcmc(d=}!{|7{-4S*$k0vGaAvj%q%l5OsBz^nQczS5y3fRsB!a-#%P}vZr|lQ*vaNN*;s2~{JhjU+dqtS7OKgj(Wj ziPaNbL)3jDt5H-FQH8vcunJ`5gq9OhhP0I6dq_$MDj~2K@m>6j5EbHEh>s3o0fKza z=Hs2m|62aja^?=FbNS~se{1+l!=E|)ev6aYoKSOI&2L%!lF6|Qj;3=Yox^Dyy2$|* z`%>AP%1ah($0)X3XLBT9EBHz= z*Zrnzd>O&Ua5l(skh4CFbyry{V~q^^P(HiD>JU~*`Bcg$msuIi$Cvm>!U_q?gRr~E z(m0X zT<{f%{QLvN;=qeR63M0D%Tj5`l~9@NYM4AcJmQ)nGV*#pjYMTqQgTYF zN_8_WJtHGCORdhnm7~$z&b_16=H(aYbcIECi;GL{m6ny2S5#J2Ro}1C>uc-k8yXs$ znp;|0+uA!iIv;d(cX##l_8APuhyDEnj|NSqq2b3PBco5o#>XcnpH59pKbtX|XYJkp z5LoVQa(DS|*O}I#jvqf1I4*S7WjX1+30f9?GN6sYrbaSW-r_4bYi_2BenY_Ar`88p;~YCK?>-;#3efW?hJ zn(t4}{#5m8syGJ=Q=>zk%dKY$0$?VIROA^y2A}~76F7@f?vy1tnlnrfTJYHIWS#S1@`N)|66~|>pW0Ri z$9eDj#MJ1ZAaJ7B*?YcQgQ3;9Y@{+3L>lrr-wPphA=68SkK8i=fUI&XQU+9XWKuu ztqhLy-uH>A(Lq7rM6btv85S^;gG8$PCMVDU4i+QFzMk8DIxpBvu6|~H=9-lYa;T@P KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/fill/rgba-0-127-0-50percent.png b/tests/ref/resvg/painting/fill/rgba-0-127-0-50percent.png new file mode 100644 index 0000000000000000000000000000000000000000..759c4576eb3038501fc167c4738b9184d9a82df1 GIT binary patch literal 225 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/marker/target-with-subpaths-2.png b/tests/ref/resvg/painting/marker/target-with-subpaths-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a505bbe50a2aef186fee6f4d1a97df0b93b3306 GIT binary patch literal 2635 zcmbVOdpJ~U7vD@pBSyL3azvC8LXtuTxtmaKUF1?T(}f~&jMPl&?h;Q#=L z+E`mSL+?)B7KTCoVeGkb01ymA*}GaoDFE_Z9Cc+KL~X?DkcU!Uyb?rtQ|F)C{cY5ZoB7G)&l%Ip z{+kGd#PqVbpcAi)z*;nA`3_}q6?EjKf}A@&3sK#(z@{ZA1-qtQDzlv{ALM{Kz?M0D z=M-NP*GZoSZ6QKv8x0Wsa;tR&ibGn50mN8v%LljWC(tJt0WBdA;s=q3fbE~5d$~>; z_y8jLAmpz#^#C&ce8JdW&XvYaK#mgI%ZB(t%T_`fFdQ(z|v-^uWQ{RXlo(Aci@u2#0IVv2!6 zvK}H%Q7ldY1_A=0Adjrv1lcZQ89QjufnaAxmq-Bs1`~vB+9I@dn<#G~#3dvoW##1M z6_t2PRc(*9wziIrj;@Y@;bBuVBob+jI_-A)w7ZWl27|_6vDlj-VPT=T2wX%2wDI`J zsOaeU#FUhj)YR0h+{gL(`9;OWRnKc`YU+s%4Mbv7Q&TgknM5MDkjX8r?d_f2Jv}|$ z6lx!p+CMb(@#FCDDDR=sXyX$T^r=4?4CV}z$();;o1I&jUs#x*UtC;VX0h08_6m26 zx7L5G|MmP>jG&ePz?MoIi{q}L!_!$kSO!Yc%S~=zgQ>2Mxs2; z$qU}4?!LR%6CS4d+_vtDMuDMhocrVjNtV}EkIlzpEHiT*KiOKtw@P(~ns<5~*V>MNOS7Q8*{r697i?eW{tH`zL z+E-b?^SAp^k&nHP#_q6lO;xK3RvJ*474JaYLwa4#{eh!tFpb4LHgEGbLw)l6cD~VZ z>abdj?!9MPthJ^9#-Y}I!k2VJJVG;vehq-->AZ2MqKPzxNjcbq^T=|J12oPQGP}3dHb;_ zuP@++|9J%AVzEbiQ*~G8ARie6*NNTKh2=sME)IWZ-zwJ_KEwKe^uEk^*GD(3uMW7h zhf+ZeV+j@+BYC2vjEEvmTz3#aqV+=x>zs^+phBy4)rr~42EEV(%|tSLN^bLeD^VYs zwwxjG)`=Rm@=m{#yt?ALiZBBLC23M2hkL%Mz;nz0xNU$8rFAG?Onsg1tB9T zrg=~IJhWF2Z@knl61(Ud9E?T>FBa`>dQSQ9cwqb07Z+b96tk~llD18aF{a7nX~q$` zffeTpYm1YIY9E#qe40Ki=Y0KI4BDS5BRAk4G88sxlnT39OZcNCdH2EJ#+*JpVugI4 z(bK~_6+XZqPo=M(&UMJVd5CsC^1X7?5!BErJv@_>bxF+`#yhtO(L?sSiH(kOt z68y`KXF8>%7FrF28RWm5z%w{FWEsijIyHDPHS@J`Vh*O^Nyv!PvGe`ca1(YaRVHWk znQ^zi)Ua+yqF${UE#O0q(Tq7ecmb{BT|3u4vVWp%(K&K52j3ujJMU|2w?hwZUX>R+(7D|9=18acz#Y94U_LWFHAZ*%(YO_BSXu9x= zR7pZjM?2-lEsK@Ko;d1;o-NV+E_7$s<=)7%&qf!k zFVGM|MrWUrqid&b-62!V*==Fi#|~P9D$JyKx}nb%omb7hU*XF1(9|OTYl9wNQ2`YD#&uNJlfgi%CKBU zdPS&VU_$;QK>GZ96fNqw;anpPVi4x-CZYW44CTF`b-w-nah^;WhZw literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/marker/with-viewBox-1.png b/tests/ref/resvg/painting/marker/with-viewBox-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed341cea88b3573d7fc1a04a7fc887f8ee4c6f2d GIT binary patch literal 1644 zcmaKt3oz7M9LN95=COH&U2J3*cZ7yrOUT9UTGO8*v&o|*d2Ld{O4M4<-K9MKbY(Zn zC9dm+uo2}EsZ^UOw>%5?PS%EAR!Wikml@Taxp(HA@9%LwzwdD;IS6M&c8BitKXcj%v$;X z*M6&7{-M!YezoJOexF?1cJ<6_;eR{)taFJlyd#$Gu{#+7$jBn)6_u1#)pW4BdWJ@u zEeJ${trOW9^z`-(3O*Em_;_4AD>37AF2uiZ@zU>g^}^=Xj?S*0M}yDDCneJ}Z{N*+ z`1omYiC^L80077tR~p4De)!e!nfzj!=AC!hMl{#Asag#O)5^@@m;Z3o)zeR?AIK{Fgx=R}ziH+Wr?mi59sPiumE;*i zZ#ty1v!g=Bo0Euy=AobGWM*H5NwZa?o(#AKQV!DSOU2Iz4}wgMhWcN$h;M6Y%C>X-skF#Ez~Yf37@-UfLZXEMKK53;I`QD6Y(I!wPOtIzB&lcNW{ zakGY0P7Q>obmK5)DVjL%%_&!L{ZsHwWVq*{K$Vyl6et^$EeG1BKGQZ$4guPBBFg0? zPvdY07L|D)1}2SOuu9sKg{R(S-Ye;EEBQ;pzRs9;ikY4}VB4JJaZG1f=oG(ha(=4Q zo!$6)8FhF5!BWxE;%I_W<^0FqZ2Op5;X$=vDE950q@kuzEcp})tSt5FHx0tIYD9o^vr!oQ@#a8LPt*oz53SWqe{SJC0 z(8{orrG|ZjGRWdgJ`;v2;GK|`ySj@NOGy@3Ce{E-Fc2S6xRB7v|5GhRbe1>?H`;N# zn41xDF~?3HZe%33qHUJOiWbziNo9zY_$-ky*gWZ}10ursb#Y~qd~in#labrGcSflk zh~SVQOm$-|xlFOzJsOk)OC1a$0b5zY1a7BEf z%j3{D4@>~%@*k%s@QN5e0~M3{9=B+a=hE-$9JJ-CuQolf6x{`3*4GrkuL?7)nMsY= z(&Vq%7g%qd55KCQjm{J>Zjki(VD7vCSMDegEZyAxd9RAP(yt{$s_d)!GDHydN$`C9 zu_HRoYmRi|-lfE!j$7ZvZLJMGucjISSmz+2u;U!KO;yh_J9mE<}J~Qt@wHvAnET**Mxyy*1-*ZFkmaKaR9A! zR-D}-%K2$Ic81axYtZ>_@!5qt7$e<#e4(Wi_Z&_K&5RV2c0lJd?ChnDdLTiK$Y8J) zs>yUy@uH~G8;3?S*n|N=mw)+}wz6pnCV9{P1QWoNDODU^a;ou*qZ$6U};Y bJ7-yTUrYY|sP?jz{{(P#@u1aG15^J2!acX( literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/mix-blend-mode/color-dodge.png b/tests/ref/resvg/painting/mix-blend-mode/color-dodge.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb88e20ba9915aae77d2a97d2495b1138e0b9b7 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST~P>fl1cW#WAGf*4t~@S%(}%+8!1= zZ3}u~v}v>7^qckTR4(&$BnNzK>X`n#v44u90`DG`jWec+8e88GxovMI*LE{+Z|7ac z4ePh?&SRdVCLqAU!NS7C#Ms#2;Gm!YIWCCoBlUv>zUi{-+s4$cCYUL^MCdCpT5>llKYjl?e)japP$eC{DPOsZX?7h6#aOF z;0}Vhk%I+82+7$nRm2D(Y=s8_h7im=xK|w%FoYQ3;RjNspWjpcySK-B)mAr`+cs;$ zH^-iz|9x}zxxe=w*PWMUsYz-C1~!Hn$U^g?GCxZ^*ub4H@S&3x?lg$6k=&smP@$cA nb6M=!HMv(^e1MUA(f7aR=bx3LI&uGj>4m}5)z4*}Q$iB}wt%G@ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png b/tests/ref/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb93b8217fde45f5a7c93d47b6f123006fbec19 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T!AzQ)PoV2`J>ThHITtp z666=$z#u8*@IdBhLpxApwWo_?NX4zUcMfv47zj9Aw0t8r;V#z}W>4m63IDHF%jYqr!ymN~Xqo97~KJ zZ3WAK6wGnT`u41_cjj$YkXopg|37y3uTIMohZw-YQe^)me%oKL5!n+Afkvs>C-&76F$dwz3(eB|ls=d#Wzp$Pz6-&nN( literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/0-n-with-round-caps.png b/tests/ref/resvg/painting/stroke-dasharray/0-n-with-round-caps.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2dcc8e2aa82b291b937ae2f7176513a57c86c6 GIT binary patch literal 2585 zcmdT_dpHy7A0I*+W35HDhUFIKn3aTeT$hQMAtskiSuV+0I&zqr5XyDJl1mOL_Yk>s zipX3h_ml`t0cYHDF986A9}uk_@B#_A@twZ&za0M;P5#Sg_z$)Bk6lgS^*aKu z0>-YAZ0wmr0AZ0mqGIBEfglM;a6OxiyDR)!T(%JVi?q_CY=RC;G%YRt#=y73DaY<=e z`ICyus;AX8&uZ)H8-9D)*z~HoE9e97>G>q z#N~X&<REHY0X zE4x&z3}hOq0Ko#%srH^2UMWIVU@Vob!l>AEH2!V#hbxr>RWj~ns}2%6AS!91YO^fQ_~m35-Rf zg{qv@Cn0QT<&y*4_@I`D5fVy^hM0y_)1sykDb%8JZCT5LC?8FqZn~=(<**@lMc7sE z(;720p*94gSIu}@v%b-LT10ks%ws*0)TV*azrIr?`)#9p$B_I^jCO}az_AN2P?;T7iSIWg7JvJET)43`Yx|H9<0pJPvcFTs9tKQ?{257`NAlhH@(Y;?(3IjwULJD~P~eZHu63X2de$!3(vRLXM=`j|N!y{q;h z^*#2+aI|n0QGL>Y?b4?xYn?zMh_bEnO@QpG)2OkCb|vs^(|~5w1t!@9z9l>rM{0v$ zv{_dsr5O}YI2Ve#zWMa!umZ=+(O-L$aKl8238Zm-4XZ8BJ58bR5LQZ+m#Oa~i4#fb56?H7CIzd{ zl*nL(xa*-u<9E%qlo4Eb-#ERY+aiJ4t_GHQ7v||GQZOZ-g}Uy~-<)?$zzv?1oO+hmv+5>6QeyBq(BNhBGpvbwt3Rwfk1A} z$=2n=OnKDh+g*M<-EBoyvXr*Ztpq^@>UF;>v9rL(1!1c*1k;A=pTDAy>rnM0Bf70X z3*={u8EN*PUW6T2(`SDzjeqp$Z5^GHT8H#!v>8Rld@YNA^!Rl{=jH5o21gwVj{MzF q|Gl$2lq4Y}H642p-lHnHjbJ&y6nf*amnrx^0hV|h^D*hHFupF1j6Q2nXkyLUzyyaC#AgX#R7GuHa;!^EMUTRMb%8xD|fx`rmfgLZP(p^ za?e?+OH>*gkUFB6FQ39mq4t~XgfQSN=C+?j44yE sa6Gzeg|HFMI>DqETyjCg&`rFTU-|B}H|F~))`OzJ)78&qol`;+02pd_!~g&Q literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/em-units.png b/tests/ref/resvg/painting/stroke-dasharray/em-units.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f12dd07545fa02bbf344c4de7b00452fabbffb GIT binary patch literal 2803 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 TC2t=53IIzp8`DQ9LhOG4L(^Ml literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/even-count.png b/tests/ref/resvg/painting/stroke-dasharray/even-count.png new file mode 100644 index 0000000000000000000000000000000000000000..9eddd34314c57a5a8059dece4d2d1d819516954e GIT binary patch literal 2317 zcmdUwSy0o57RLXwB`iTiXp>Nckf4dmu0p}EBqT-)AuOe`Dm1Jr$`(Y~NgzNn{euC4 zLNP(W1wj;WVbLNWi(v-^MOjTW0a-;r?ZwwSeYh`ork(kn@635QbLM;aP6my71g3;k z0ssJZlw$9))jPfwRCY@X(|judKqiRh;6~aSfy8g}P5zc~ZGeodoV)@As-&y}Q{Aq%Lw%=)=6B!25lAiVT{^lbJv2st_Z}>6@4o$p zM#d(lW(TbB);6|wwge)He1vlJn1d6|#nsLIm*XDZKE5YT`uYD#4+snj4hcPVE<7Td z5fgjiVqAPeVp4KSDl;vM!~G4+&bh?P&AVLqN68hwp!8~4dBwHsH*Qwms;a(SQ+xlx z!-mGD$A7jwX>DtN+R^=NU~p)77 zX?L%{$BU%gV5s$boX@d#pz`H~NZ$F5QKWjWWWjHkWncs!#PY zN<`K_-U4$G2 ze-iVjCtNC6#M-HY6;chdR*S_KznZ{KP+;&2;80;4rrS6oWVtINyc1;Bq*skC7pkc| z*c}(j@IkpKOm? zTtXlLhmn0b!CNtL6*aFdnu|`}?(ux%`JC@XY6|ByHi%>hQQTTL=q+;6*_~f1q-~Hm zXt3@n*5UUMAjYR4b)(hUS46(2p2h0BY`dJ|_8zj?V)hsz3`O-0ISpJZsTF;6?@G;O zQrQ1ZD{5wO6xrs)AFKph$~MW z2F~EhnU#;@&3((@7X^xI2IgqY6WF*Rqz#;#qsrYMaDMYYi!Mdx2=f!Nu1Ev$?PrrsGa}gx`G??$4uZ~U!xj!N<6 z7>fGC@zvK~r`M9zWd16dXRHTz`k4=&6MHYEV$qo@T-jL8UzjP#zPU*gqvi*3+uBAs z2AkCSjYS)sXyx}>Mz8GdMbhQ#Cs{^6Ta=#H#(W>Ac+M_H*IDEXA;rYFwlp6$TcXgFEdz&aZ;uIRTO!rVgGrJp`c%=w7!C?#ZiOFBS{hx3u4a2~UGtd79xiP)L&9SORlF!+C{B))DG2bAyR&gvJ*zy{9x@uiz|U z4=*$`fikcL#A(u-BgF15DumGR-j9Cthjlm53aDJ@eaqZuft#Mu_V^hO8{U}^y6I-f z@QzvV6@wX!8}9IaFn6sS&J1=u-^X91S7lT??9vbF=_TB4A1k$J$?rB|s_z@)q+6$| z-#s7@x|mW-qQ;I8UiE7-0YN}owu z!bmQM?n+)dECC&`caNvjV`A}DS=`mSpYKM@wwe8X;B5t=$)1@AnaE^zr=o1j%%g1` XVNLGDAFnHJJsaRCiE3X(IGOSvlZSs{ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/mm-units.png b/tests/ref/resvg/painting/stroke-dasharray/mm-units.png new file mode 100644 index 0000000000000000000000000000000000000000..17b2f29d78d12eb72598bcaf149bcf2a736c85b0 GIT binary patch literal 3190 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 quym!ytL3lG8(}$RIq`v_~6gd3= literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dasharray/percent-units.png b/tests/ref/resvg/painting/stroke-dasharray/percent-units.png new file mode 100644 index 0000000000000000000000000000000000000000..433d618faf98b43534d787ed8d86de5c05f11420 GIT binary patch literal 1961 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz@!o26XFWwGSq_z5IJbkAa~y2 z3^%F<+PV*Iw}A$3FA4GsZeV0!VrF4wW9Q)H;^yJy;};MV5*85^laQ2>mXVcLP*hS@ zQB~8@*3s3|H!w6ZHnX(0v2}2CaB_BabNBEJ2n-GlkBEv*NJ>sgO-s+n%+ATpFDxyu zsH(21t*dWnYVGXq>Fb|3Y4VimGiJ`6H-EvR#Y>hhU%6`answ_pY}~Sa$Ie~5_wGAz z=RJbdu@$p?G}tva1d-T{*~>`73W zI7Kv~B=|_v6(d33T@rUS!do@gG%UF5Yxh6S*ZO(m-NJ1%H~)U~(O~}f_<}h5n&&mo z&zxL&E>h_4=^gWu>kC_S8jCm-TLhf26Hl(KjZ}OYQZn1&+V>;hJfw1azfI|^^tiZD zfvq1f4mPd1i-rf?(Uvx8{E69)~^iABw zoSPOQ^QTHT{@^>8xRCE+j=I<^+XtuZR7^UK{@oPwWmm`1SdLW5M{njjChc}v-RqIF z?B+=|l>(-du|jL_xfLB}zS+FyCzGeEmAA|4N#{5w{i-S5rVxE>;+2yVGQw|lFFCeq z6LaPa=cMPWRo0sED{S2PE63s1goqtsm)7a^9O0|xf9a5P*YTvo&-V%&m7@e|kKYiU zv@q-VS5>Y>?<@8@7==A7jO}d7uwGQHve;Jo>ST?McXR&l@-@1%c(Ro6dd8K}PKIisjTr&9m?fzKUXXLluyipg7>d*qcs}n?!h!cU_&+}0pHzH#a+xzzfa{w!mW97A=Xn^01eZB$E#$h*dz10% zhPxBgR{VO?w#E5ss`(P>Rbjpz#n+qt?TRbbOT5zw>6MzmTYEVC9}~kLg*NHdRc`D| z+nEe+%`I4cq2Wi`f?IlSs~fXUEoYqA9k5ryExR=VqM3@ zbxxt{StI$k|2~qC{V;45Yhhh`)_jQ^`w(*(-HsZrtCog0ezqjPaNu(k)fGqh0 zV#}0+xzi=G&F?tP5|C_sHAUhz^9sFgy(gk8mNh4>c)$}PduxJjLA4*xR{p%uTLS4k ztMX+GCw-O;xh|92v4?Z}@gpAnhu_Y4;k@d>HGQ{V9C`dp87C^P_@^f*Y-`GKWVgyo z2dM|wG}EdUR9}mg_^NnXeL>fhu7zCDZjJMcFE^bK-0`(*V@;|2cF(E_R|9wCiZxqi zIxS((V@|TG^@tS7D>ZXo!kzc9X11d1$*;Mla^ruk4{g2^?%sXtTRPSC z;DJr4jR}QM`<8usw|Q~L_sPkEPhyv3EOwpXKVeZ>w?e$KYkU;TOqW$&YZ{*@rn0YT zT;qI-ZB3(1&y=HKH<@nEbSiutf9(6b!j!*7@BRoZg%~_t{an^LB{Ts5 Dcdp@c literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dashoffset/em-units.png b/tests/ref/resvg/painting/stroke-dashoffset/em-units.png new file mode 100644 index 0000000000000000000000000000000000000000..89192836e465804a3e8f22953ee6a003d27c6a31 GIT binary patch literal 2521 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-dashoffset/percent-units.png b/tests/ref/resvg/painting/stroke-dashoffset/percent-units.png new file mode 100644 index 0000000000000000000000000000000000000000..514075ad4ca85f18e2f74b16a3185ca08f7fd564 GIT binary patch literal 2452 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 XZ51+r3}&PE{vlvz<78ch^H2CUUHQDV literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-linecap/zero-length-path-with-butt.png b/tests/ref/resvg/painting/stroke-linecap/zero-length-path-with-butt.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-linejoin/arcs.png b/tests/ref/resvg/painting/stroke-linejoin/arcs.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b514dd7e1fb7fa7cbe374952a1f452ece7b19e GIT binary patch literal 2315 zcmdT_{Xf$Q9G{DwzMB}^G>WFFc?uizPz&E}Odc}UFy(GDA}a3Wt|#SYit{jzVojKb zD4fR-d8q9y&MA=y$&JuXsa)sb-05}y!M*N&==FMk-k;a|m-p-adjIlH_VISp0Q3L| z1ftjpr5O624HZFEt*=|I!F{+cPmCuf7^Bg!yQOp@H@ov4`c@&4*rtE4dI1`MI4Jf9v$;l z?5VhKPoF(^KK^1t(xuDEDXD4c8JRz1=ZM7l*9!`ZBqgQg6}Kv@s(-Aht#4?&-PGK2 zr>(uC>)w5-?5FMrJ-t8o^*?+x@Obda@Y9jeXJg~fCtplX{i>Lrc{w{b|4RAW!s|DS zZ{NLN`u)Qn%PXsEf3D8}lne+&?WjA|h57BMa`>4ClY#7x=@+^0I;oSEYjU6`z%Mu) z_kE3a53Jeh78zoMoi zDXDy3`&YpIp}79SlW@*;p3b5s!?$TTcwR4|sOtz|t;wjnDRMk#wY2I9e@v9PHNT@zc);u>a9lv1q>*ex}3PQJQ_MD5*z^*^Ax30B!hr}pneZ&zyu9yp- z+A7JuEB))7MLpu?O_SL>PwK?+IoyMZDKq(`fdEVAmrkL^=~!Am6y>-|o^87pxb8+G z({l4}`|1nmbAswV7dRzLga|9g^6yoyK>7-bfkjyDHjHce0^b^WqVH&UJ1Tl@ekRT+ zv7^yBx#rbg8*+ry68ECbu&XRcjOR3@k>&nRw@_=MXq_Vj4ZQ26$aS z=k;8pc0LQ0n&ZxEiPEVA)GAb^eP~0r7>cf0^QsXlM48lFx(JBAMiczi4{f)G)t)UB zRTMc;JJz55GTuhT&|56{Gbuw;Un z(HRwr6}urC4fPdDTv-HSGV$FipDkXkEFiWPi~H9*mlqbM?}ff`2sOu%WlzuOW{vTL zd*MOYN2(z*MS7Vn^t=_C&>64{Xp=c_90}-wV6IY6J3rLNUOfow<&nCylVRFBxhG0c zQWp5&7#}`!TOWquC>e>=Q)cizoh-Ut$YT@Ss}L)dAZ*?j@GBx=rK3k?BnkaC*QItl zpo@WbvE(K{K?@fXj5@k~FN;Oecj|x}CiNamzJvdI>EYHJc*8nWol|!qOmCHh-^DRg zsPX*~HU?Jq5oQW|{+dd-a?Q(HX9PIiGr5I%1`~UqN%u(RlGJiGrz{`84Z32)Ne6z@ zqd9pBcmUF{=<9UJSh$(OfbTuKuOv62Liqk*N|bHv3_dAJ@Se~N*XOhF zX@2lg08=IhU+KtuiLju|g&%CVu{N8E%Wc*H>2PI&f)ho224QXqN6k{hN#!~aa% z9VI~G=L?rCuh*dJYD8vPJdFml|2qQ5ggQ8As}zVl2kllgHyKP}|1;FJfbEBl$7w%e dG#baQeZK900a>#_#@(0{h&#=jS`B{r-QWKkO-%p* literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/painting/stroke-width/negative.png b/tests/ref/resvg/painting/stroke-width/negative.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/cap-values.png b/tests/ref/resvg/shapes/rect/cap-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/ch-values.png b/tests/ref/resvg/shapes/rect/ch-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/ic-values.png b/tests/ref/resvg/shapes/rect/ic-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/lh-values.png b/tests/ref/resvg/shapes/rect/lh-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/q-values.png b/tests/ref/resvg/shapes/rect/q-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/rem-values.png b/tests/ref/resvg/shapes/rect/rem-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/rlh-values.png b/tests/ref/resvg/shapes/rect/rlh-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/vi-and-vb-values.png b/tests/ref/resvg/shapes/rect/vi-and-vb-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/vmin-and-vmax-values.png b/tests/ref/resvg/shapes/rect/vmin-and-vmax-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/shapes/rect/vw-and-vh-values.png b/tests/ref/resvg/shapes/rect/vw-and-vh-values.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/structure/image/url-to-png.png b/tests/ref/resvg/structure/image/url-to-png.png new file mode 100644 index 0000000000000000000000000000000000000000..e23ffcf3e1119a97418a9a49a0a3b48bd344652d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r83?x6-OW6S_o&cW^S0D`srZ3H>0XZxsL4Lsv z3=R+YcGlhj@^w62978H@C1)fYVDRB#o6%&$vu2@$LPAIZ918R+eB)w`zRJw7?)yWA T-UrjBf(-R^^>bP0l+XkKG~6Wv literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/structure/image/url-to-svg.png b/tests/ref/resvg/structure/image/url-to-svg.png new file mode 100644 index 0000000000000000000000000000000000000000..e23ffcf3e1119a97418a9a49a0a3b48bd344652d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r83?x6-OW6S_o&cW^S0D`srZ3H>0XZxsL4Lsv z3=R+YcGlhj@^w62978H@C1)fYVDRB#o6%&$vu2@$LPAIZ918R+eB)w`zRJw7?)yWA T-UrjBf(-R^^>bP0l+XkKG~6Wv literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/structure/style/external-CSS.png b/tests/ref/resvg/structure/style/external-CSS.png new file mode 100644 index 0000000000000000000000000000000000000000..f985360369ef054bf05994e7cb432360877d7925 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!Azk{AXbJIPG!*kk3*Q zmF{I+w+dGcD2NXnD4^9trlnr50`mmmpbXu`!XzGCI^XB_f1Zq0URtwj(t71{d8WinOyzM`ph*e7vxY+ LS3j3^P6mF{I+w+dGcD2NXnD4^9trlnr50`mmmpbXu`!XzGCI^XB_f1Zq0URtwj(t71{d8WinOyzM`ph*e7vxY+ LS3j3^P6C&U%Vg@gb9|Nr~<@6Vq< zzkmP!`Sa(GA3wf*`}XC_m(QO+fBg9I!-o&=-o1PC=FRKZuV21=`QpWkXV0EJdGh4( zEqel-PK78=t!2<^l?Ay0*@7}$;ckkZ0bLWm7JGO1xwsq^)&6_uG z+_-VWh7If1ty{Zx?dsL5SFT*SV#SJO%a$!&x^(g4#S0fMT(Drlym|BH&Ye4Z_UxH6 zXU>>0W7@Q7Q>RXyJbCh@Ns}f_n9$eP*W26M-QC^Q)z#6_(bm@1+S=OO+}zaE)X>mS zS65eCTU%XST~$?8QBhG=R#sYCT3lRQR8&+@P>`3Gmz$fLot>SPm6ef^k(QR0nwpxN zoSc-Dl#q}RA0HnZ8yg)R9TgQ75fKp{9v&JR8XO!P6ciK?5a93c@9XR9?d|R5<>lew z;qLD4>gww3?Cj*^vp{}m3s;a7@qN1dvq@bW6FE1}ED=Q--BPAszAt50yE-or6Dk35xBqSst zAi&Sh&&$ip!^6YH#l^wF!OqUk%F4>Z!otMF#F!9Q1dME!k|4j}1_p-*d^>CJ0Qpxu zT^vIyZoR$BDA-`Y!*bC7vG9MjsDOh!y48GP2d_q0E)0A*^Y80O&(#0#fI)@;dl+B- xDia4&{iz+C!kk?dj_0vd$@?2>@X4GEM*h literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/structure/svg/invalid-id-attribute-1.png b/tests/ref/resvg/structure/svg/invalid-id-attribute-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2584ba0a345bc6b98c32ef6f468b490fe37ccea7 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzK)H6I^*|Y`7XDJEt z3vOU=c)+)__70F=>*?YcQgQ3;9Y@{+3L>lrr-wPphA=68SkK8i=fUI&XQU+9XWKuu ztqhLy-uH>A(Lq7rM6btv85S^;gG8$PCMVDU4i+QFzMk8DIxpBvu6|~H=9-lYa;T@P KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/structure/svg/invalid-id-attribute-2.png b/tests/ref/resvg/structure/svg/invalid-id-attribute-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2584ba0a345bc6b98c32ef6f468b490fe37ccea7 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc_yc@GT!AzK)H6I^*|Y`7XDJEt z3vOU=c)+)__70F=>*?YcQgQ3;9Y@{+3L>lrr-wPphA=68SkK8i=fUI&XQU+9XWKuu ztqhLy-uH>A(Lq7rM6btv85S^;gG8$PCMVDU4i+QFzMk8DIxpBvu6|~H=9-lYa;T@P KpUXO@geCy>IXi9u literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/alignment-baseline/after-edge.png b/tests/ref/resvg/text/alignment-baseline/after-edge.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd042111826024c8544e7f4881919532b396f37 GIT binary patch literal 1611 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 D*$xE$ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/alignment-baseline/ideographic.png b/tests/ref/resvg/text/alignment-baseline/ideographic.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd042111826024c8544e7f4881919532b396f37 GIT binary patch literal 1611 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 r5dmi!5le&=l{gTe~DWM4frk&3; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-family/font-list.png b/tests/ref/resvg/text/font-family/font-list.png new file mode 100644 index 0000000000000000000000000000000000000000..4e34581da4443bf78679ebed10ee29af3ffa20be GIT binary patch literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1y)5C&U%V9R(vT1O#_n;RgD7 zSxJyza03G)6Eh1d8#@Ol7dHb zt(}9Tle4S4ho_g1ub+QFa9BiSbWChqd_rPMT6%U)Zhm1=acNmaRds!1OKV$4XIFP` z|Aa|Xr_Y=EQ<=Tx~x9{A0 z@bJ--r_Wx#dj00zhp*qh|M>O$&)U|_cJba4!+xb^nt_41HZk+zSO?TX56 zLWW9O6NRFcIyN2=>kU-yVm;>6!=lY`iD@Cb5Qpl*7NIK67Rk2f?^}%1)wV=-vxYzC zd0+fJ_TRPb-}c??T;}3hGTTt7-c@iRmqucTVw*$~CB%ux+c(AJ9~E%gxvyGD@udFk zY$b-s;2dRxh$@{c%3rL`bYIwD&tCGf@YNcT69>5(&nUf`;3>aW#-gm^_9aWLDZdma zNB)}PwRg_Rl&B?7e*ZlnKXbva3@1Bl=ZJs*rC9%RtqIu3`FBEgz+r*%Us{tUu#`*9 zQS)4BJ0X6-2A&N*zviuQ7Gr#FmF_?L;x_&pQ?+~!Ysjn*yRhf=h3S*hOwIrE>g4fN z88%J087WZ{=6JI7z;&)H<}lAoM;Im61~2^P!T;MzVs-G1DW3~WRxZeUVCyM+K)j1F zJ!ho8MLw+FjH=+ak>_eHO< zzG;}9uPrt~E}>#i@Bw?S)wlQ$a2;j7bo%e#)k($cnb;zBp0~XH;gKm34pNO*t2Vq!w1{7A z{&~ZK?VS{({_52$}PuSK> zoN|Zn=g;!o_3_8TWs+xG|G)JuSVVEw&Epk{PuvrBcKP06ziICD+4ImYCC-uj1l!-m6s+m!tRn-1d`oz9^63 r5dmi!5le&=l{gTe~DWM4frk&3; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-kerning/as-property.png b/tests/ref/resvg/text/font-kerning/as-property.png new file mode 100644 index 0000000000000000000000000000000000000000..b48eee38b1a27fa330fe5fa09ccdb718ab064767 GIT binary patch literal 2191 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-size/named-value.png b/tests/ref/resvg/text/font-size/named-value.png new file mode 100644 index 0000000000000000000000000000000000000000..056f9ba003031fc148803e874accc1746a3ca55a GIT binary patch literal 4359 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-size/negative-size.png b/tests/ref/resvg/text/font-size/negative-size.png new file mode 100644 index 0000000000000000000000000000000000000000..99e928fd3978c7e4bea63dbcc7ed07d7970df640 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-u0R?NOkbK$19DhOg8YIT z7#tq(?X0~6zqwU>5>g_W}w{_=Vavewhp&t;ucLK6VVsx9&W literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-stretch/extra-condensed.png b/tests/ref/resvg/text/font-stretch/extra-condensed.png new file mode 100644 index 0000000000000000000000000000000000000000..4e34581da4443bf78679ebed10ee29af3ffa20be GIT binary patch literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1y)5C&U%V9R(vT1O#_n;RgD7 zSxJyza03G)6Eh1d8#@Ol7dHb zt(}9Tle4S4ho_g1ub+QFa9BiSbWChqd_rPMT6%U)Zhm1=acNmaRds!1OKV$4XIFP` z|Aa|Xr_Y=EQ<=Tx~x9{A0 z@bJ--r_Wx#dj00zhp*qh|M>O$&)U|_cJba4!+xb^nt_41HZk+zSO?TX56 zLWW9O6NRFcIyN2=>kU-yVm;>6!=lY`iD@Cb5Qpl*7NIK67Rk2f?^}%1)wV=-vxYzC zd0+fJ_TRPb-}c??T;}3hGTTt7-c@iRmqucTVw*$~CB%ux+c(AJ9~E%gxvyGD@udFk zY$b-s;2dRxh$@{c%3rL`bYIwD&tCGf@YNcT69>5(&nUf`;3>aW#-gm^_9aWLDZdma zNB)}PwRg_Rl&B?7e*ZlnKXbva3@1Bl=ZJs*rC9%RtqIu3`FBEgz+r*%Us{tUu#`*9 zQS)4BJ0X6-2A&N*zviuQ7Gr#FmF_?L;x_&pQ?+~!Ysjn*yRhf=h3S*hOwIrE>g4fN z88%J087WZ{=6JI7z;&)H<}lAoM;Im61~2^P!T;MzVs-G1DW3~WRxZeUVCyM+K)j1F zJ!ho8MLw+FjH=+ak>_eHO< zzG;}9uPrt~E}>#i@Bw?S)wlQ$a2;j7bo%e#)k($cnb;zBp0~XH;gKm34pNO*t2Vq!w1{7A z{&~ZK?VS{({_52$}PuSK> zoN|Zn=g;!o_3_8TWs+xG|G)JuSVVEw&Epk{PuvrBcKP06ziICD+4ImYCC-uj1l!-m6s+m!tRn-1d`oz9^63 r5dmi!5le&=l{gTe~DWM4frk&3; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-stretch/inherit.png b/tests/ref/resvg/text/font-stretch/inherit.png new file mode 100644 index 0000000000000000000000000000000000000000..4e34581da4443bf78679ebed10ee29af3ffa20be GIT binary patch literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1y)5C&U%V9R(vT1O#_n;RgD7 zSxJyza03G)6Eh1d8#@Ol7dHb zt(}9Tle4S4ho_g1ub+QFa9BiSbWChqd_rPMT6%U)Zhm1=acNmaRds!1OKV$4XIFP` z|Aa|Xr_Y=EQ<=Tx~x9{A0 z@bJ--r_Wx#dj00zhp*qh|M>O$&)U|_cJba4!+xb^nt_41HZk+zSO?TX56 zLWW9O6NRFcIyN2=>kU-yVm;>6!=lY`iD@Cb5Qpl*7NIK67Rk2f?^}%1)wV=-vxYzC zd0+fJ_TRPb-}c??T;}3hGTTt7-c@iRmqucTVw*$~CB%ux+c(AJ9~E%gxvyGD@udFk zY$b-s;2dRxh$@{c%3rL`bYIwD&tCGf@YNcT69>5(&nUf`;3>aW#-gm^_9aWLDZdma zNB)}PwRg_Rl&B?7e*ZlnKXbva3@1Bl=ZJs*rC9%RtqIu3`FBEgz+r*%Us{tUu#`*9 zQS)4BJ0X6-2A&N*zviuQ7Gr#FmF_?L;x_&pQ?+~!Ysjn*yRhf=h3S*hOwIrE>g4fN z88%J087WZ{=6JI7z;&)H<}lAoM;Im61~2^P!T;MzVs-G1DW3~WRxZeUVCyM+K)j1F zJ!ho8MLw+FjH=+ak>_eHO< zzG;}9uPrt~E}>#i@Bw?S)wlQ$a2;j7bo%e#)k($cnb;zBp0~XH;gKm34pNO*t2Vq!w1{7A z{&~ZK?VS{({_52$}PuSK> zoN|Zn=g;!o_3_8TWs+xG|G)JuSVVEw&Epk{PuvrBcKP06ziICD+4ImYCC-uj1l!-m6s+m!tRn-1d`oz9^63 r5dmi!5le&=l{gTe~DWM4frk&3; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-stretch/narrower.png b/tests/ref/resvg/text/font-stretch/narrower.png new file mode 100644 index 0000000000000000000000000000000000000000..4e34581da4443bf78679ebed10ee29af3ffa20be GIT binary patch literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1y)5C&U%V9R(vT1O#_n;RgD7 zSxJyza03G)6Eh1d8#@Ol7dHb zt(}9Tle4S4ho_g1ub+QFa9BiSbWChqd_rPMT6%U)Zhm1=acNmaRds!1OKV$4XIFP` z|Aa|Xr_Y=EQ<=Tx~x9{A0 z@bJ--r_Wx#dj00zhp*qh|M>O$&)U|_cJba4!+xb^nt_41HZk+zSO?TX56 zLWW9O6NRFcIyN2=>kU-yVm;>6!=lY`iD@Cb5Qpl*7NIK67Rk2f?^}%1)wV=-vxYzC zd0+fJ_TRPb-}c??T;}3hGTTt7-c@iRmqucTVw*$~CB%ux+c(AJ9~E%gxvyGD@udFk zY$b-s;2dRxh$@{c%3rL`bYIwD&tCGf@YNcT69>5(&nUf`;3>aW#-gm^_9aWLDZdma zNB)}PwRg_Rl&B?7e*ZlnKXbva3@1Bl=ZJs*rC9%RtqIu3`FBEgz+r*%Us{tUu#`*9 zQS)4BJ0X6-2A&N*zviuQ7Gr#FmF_?L;x_&pQ?+~!Ysjn*yRhf=h3S*hOwIrE>g4fN z88%J087WZ{=6JI7z;&)H<}lAoM;Im61~2^P!T;MzVs-G1DW3~WRxZeUVCyM+K)j1F zJ!ho8MLw+FjH=+ak>_eHO< zzG;}9uPrt~E}>#i@Bw?S)wlQ$a2;j7bo%e#)k($cnb;zBp0~XH;gKm34pNO*t2Vq!w1{7A z{&~ZK?VS{({_52$}PuSK> zoN|Zn=g;!o_3_8TWs+xG|G)JuSVVEw&Epk{PuvrBcKP06ziICD+4ImYCC-uj1l!-m6s+m!tRn-1d`oz9^63 r5dmi!5le&=l{gTe~DWM4frk&3; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/font-weight/650.png b/tests/ref/resvg/text/font-weight/650.png new file mode 100644 index 0000000000000000000000000000000000000000..78f412bc4a9f466df6e8369ce0e45c6a5dd8cdba GIT binary patch literal 1590 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1y)5C&U%V9R(vT1O#_n;RgD7 zSxJyza03G)6Eh1d8#@Ol7dHb zt(}9Tle4S4ho_g1ub+QFa9BiSbWChqd_rPMT6%U)Zhm1=acNmaRds!1OKV$4XIFP` z|Aa|Xr_Y=EQ<=Tx~x9{A0 z@bJ--r_Wx#dj00zhp*qh|M>O$&)U|{z0ba4!+xb^l{x_>aEMBBrCTZ2T| zwekudGO6>$SOgTV-z9K#uX>j>>rqBNnH}t1Yrp=RTjdx1DkDk7a9;5I-`@A@_FS4{ zR(Z+6Q$hRJv5c?#l{z=*Xee|jG;t_VLU=s4p0aYKUCV@(TmP%7>{z38o_Rv@$#V?8 zE6p#z;h)8jZ1ZIUKf|iE#-XX)PyD7iv^_5M_+HsAC4X=Cj?5`LTd%n*&E6HcN^qjb zk~2CMyBTi?7ixV`OSxDqbhQ8Z%*$p8+f`p*V%VspouziS$lr-+N%pJ9bt=~t?T!k$ zHoQ%H{lO|l^~0vDl=+QM%^O!Me$UKkcHjBT!Hs!((E6B8e;CG8&KXtzpz;>$|o7>9zx_Yi5hI3*UF< z+RJsalJWhgx6}KWiqGbR|5CqnsxfK3Q;u@L^laJIGb?qzI=0S!_}8F#Hq)CAIx5RK zckH#u@!Kmt$NJ44zB=yy>RFd}XvDmJH1F=>4{2M%70q5K9=OfD+;9H=|B`((BR>co zQD44)?~Pj@McsezTvaP>UM-l^{Mz%mlNrNqoyhC61?J8$uvZM+s;(#&6LGyS`i+~) z{hS=@JG{}W0_7JjU0%(%rk8QU(aqU46-7s9P4(_7dRzWgJ9_J`l8$Q?Yd=Ok-g+#% z_qx=2)41$C1O)!&umAXK@_q^v=_h@KwT$gTe~ HDWM4fR|w`w literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/glyph-orientation-horizontal/simple-case.png b/tests/ref/resvg/text/glyph-orientation-horizontal/simple-case.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b48cc2323864f5ef907f5ba7e161f814b82c0d GIT binary patch literal 1530 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz$6gh6XFWw4nI&|Uk~wAMMVXK zQCwUMVdUlI0U4>OsRacE5Rur}SO^1|^!4=xs!2{x1`0w*h-`FpbYx_tlamvKYj1Cl zrVGOL@bCaKTwGj$q>+&kL=dRh*4EYr40LsMfr8f7)<9BKRTZKD7bz|-j!TM%hX*dj z&CLyAv$M0KG2m)gSXdxzCMG7hAdmqMF$Ujny+Ho@k|4j}1_nkZW)@a9PA(o^egQ!t zVG&U=aS2H&8CiKnB~^6|O&vW0Lt_&&a|;J2H+N4jA74NJfRM28sD#ASjLf`(lCtuO z%9`4S#-^5**7mmc&Yu1W6DLoZHe=?j*>mPESh!%(qQy&>tysBY~jF$y2A#oV{@I@|9~hZ{E6n_uhl2&tATG`TEV<_a8re{PgL| z*Kgl{{P_9%*Y7`n|Nn~-X#oZ&(<@IG$B>F!Z|@#24i0B%EtCzMVo}Jnk(raTX~u+x z7t6l)X|P?k22wBg&b&AK zMtM&dm0dLWyBHanSU3a}96-Us!ZAU^;ZpG@)*wbCF}Nfi#)N#X$O6^X3k6$qio+IP zt@-$9eled>UiO91-yu7Gt^E1#^Q@S?%A4Of{(7|R3HOtj6a`o3V||*sJZY~}jBW-c z+N({LU0Sg+c4p3-?=kHqcOLtE^{$^PazDL4{07(Vn7!w2CwdpjTzWh6@2^v(x5bSo zm6gXvFY;OXZDxy@wbBIp)v@Lad#_Zk-fOS7a(}Iv;>x$O`(LPR_4<>Y?_qLHYrEp= zHxD1aU9l;6(v}-~leb)yTj}%Pf@}KTA8Xfd4Y&|cy--CornI)4cboQO!6u$9>e_4e z)~ZSTzy9;n{qM1{OE?_UZlu~CuDaPTYI3nI<$LH91?j(urd(N-cfK*Xa&0=iZf)kP z#zSg1--+v2*-{@37k*j;G!xo_f{Zy-s^``H{sek_qoa!alz_8I{c6FSO*W z_Wr!}{jZYe=dF#;`&DUVQNC^aQ#+U9x074Bv^6G#guI>QH>v7&Xy=3Mz3 z?z3FGd+uFKYp(wM)6BYE@5(hj zU;RBdv#&1SmdKI;Vst0NeW9=Kufz literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/glyph-orientation-vertical/simple-case.png b/tests/ref/resvg/text/glyph-orientation-vertical/simple-case.png new file mode 100644 index 0000000000000000000000000000000000000000..897738034b6d686345d3a80ce01ccd9e7f427ef7 GIT binary patch literal 1568 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz$6*q6XFWw4sTFjUte2WON<{2 z3JQ>wMMXs+b5m1Ok+~4Iy}dn}ppTCanh2b0Wn~3qTUb~?MAX&QfeckuRTUK#xEeS^ zO-&8RmX?+Vl1fTSQc_Y7DG3P)xEde>C@v%S@Rme#iRj?S*0-U*W?PnkMx+N|00 z7c5w~caAyKeo)jhnV?-L`$_p8fj{9yomD$gvYAPMtY>?)=3ImoHzva`oDc zo44-Vy?6iNgNKiwJb(G>^}F{UK7Ic3_1pI!KY#uH`{(cffAXsrWHB%>vv|5VhE&{o zd-r9yPod25kH2>--}LhJlH9apVUA|?Nuxk1Zzs=-23cWGD=q z$@)kQCaR=hEG2cxmvJV4iXcecpZOE!oJu&`ujOu~Cm7Uh?{Y%JDeW1nb(w1ZlD9E$ zz}o&Z8L1r({QhNX_S>9TUeluwJ*II)-s%fjYuS`vTFTq@E#ioi8AFD4><0}C3RO;B*O;S4R2AdWR*hXtlyX%AXBVetzo>9!SCcLca9*`^ygm@Nv{ zc*0vIrRe&BtF>a|X^zZ8t_vqr3oZ{c3(ye>>c4$>!pF~9>>n>`iA>^;cM>qV^1w({ zB^bf;Nh?D`g50GJNnV}{0irwuki{SofJ)b!<1d(;}u1l*0m;j zTw)F3Zk@t-!(Ndk@(%At0q=|E4?L?Fj4rZ1$m+VWdfHpY3;QcqSNmCCc)o#S-=AaC zem6}2&fYN1SquUwTr7(1Ekwu?Jr3oSdNg zzG3@KzwKKE9p0*}oN%&~;hYNFvyQk6+$AX-t#6pCK7YNC;=fzDeAD#@c~KSXMWg>Y zYc1K86m!JPu6S~QN0aCN1<^aB&DoE%`s@_&?mC-hU2se61$!Sjso6*fDW6t{m!+*P=-d+wXLH&**Feq3}xX2R(k zX?!PUEz@;7v8ws>Pl4Hxl;J6mUh?_(+>3A5D~7&X@$CEV#nDFBk&+Br3L=B+wKCIsOZ9UWHqOL%ZBV_C;kcR3l*se-uhS!%GaK*elF{r5}E*6kk4WO literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/kerning/0.png b/tests/ref/resvg/text/kerning/0.png new file mode 100644 index 0000000000000000000000000000000000000000..90c36a9e9fb1d28512c40c31d176ac3645fffa0c GIT binary patch literal 3034 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 V0b|;}P#UnP{{V(rm0bV; literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/lengthAdjust/vertical.png b/tests/ref/resvg/text/lengthAdjust/vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff00d1b1efe81ae9507aadf460b77c1e0e3b50a GIT binary patch literal 2223 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz%)0&C&U%V9R-w!Kz)6EU0of- zobvK=tOjOfWkJLX3JS0)01Bq2rs9%C$FHWq^zQrLCi@ zXJ}+>Vrp(-X=QC=YiIA^?c?j`9}pN691St=o6*-n;+c;iJb- zp1pkW^7Wgy@7}+A|MBCeFJHfZ`~KtSuit}UbJ5IYu@|naS+iz|#$g@POG~&rXR5Ykny>ND z-sGd_R3fOo(xfjy_Qmh*M`Ro<(i;y-dd;8v{P*d1Z}R8goLgCbzw-Xgjwu}eS59bL zU!URD!QN%i;mDID&@6F8fz1%Y%xGAW|A|ZGHe8@Y&`875vT}pCf_LLom@2r23Fj2n ziSwE|GF*%DGcp7%#$&fU4fbRk*G)?e{$M;xPW{+k8)*I<+fKSS9bR z;H=*zrCaW8)#!B3xU8S<4f|)YyGU@sk!y z)v6{J_6HMoC}=mTgiZ)N5N7@)Dq)(|3Eu-;<|!rnX?-s zcZj1Hv-vJX&jY%z-km5hPhm6g6-}x8-5c79{7nKAF*6X|+po7r`F zrIMR8cSmPuWLW*<+P@{{x8%Oc*N^QPe(3#{@wPa>{-gB*y$dW*(I zzL%oX(wV<+@?P>4m>;h2+IkXC0GsA*g|}t~@zO1!m;4Oby{tfERn{epF`&HJMI3L+A+py@LmSXT92A%20lDHUtEST zg4iXaI1gmoWoBLJeAZu)I^kbCqejQXX=?Ks6XqUbJriIR5Eac4rT)S%PBXVULVHQs zs+K2v7KjurZxP+*(UuqVDxm{0!fL Ug{f?w^Fc+tr>mdKI;Vst0AJ&G!7=Va4#wjU6oNz$NJNq25%SPL#YdS* za*7MNnuc7$p@t0HZiNg5?1Y-9_9B|nSg8aJTy(5e>(Baazt?{I{r27W_uU_-h_YMc zwg|A3%cSw9+`r(q7N)4KOFsu@A#v*xBTel;Rt;593A>;I-h^@}gHk8~6%@lxD1sfZ z9kxLMY=t)YE7>EWLM1cvK z6e1uTBp`-YAQaX@Fsud<2w^1%;3ZfA%OMc_!4F;lU+@7h@Py~V9i9OyY85# zopPxpvD7$e%ujI2e70`8K`e8uPYusgO;tDUH3-g)Jme#9^$~UB{=%yHScmTq-~3H) zlef|J$IIz=e^yoM9$jCn(=|85B_w8cihA`Cced;f539z^+|t&;<3AOZVF4eQ{k12w z$m%U@eqddjRov{VYN}m&Y2H!L)TVq#H2mehw49j>kE?QiXcK0e-HXwMU970}Iu(0m z-POUg4T8plrE^NbtxbpZxw(NUXK&iehJBlqzuzd(>VGmEyd-|LNL9Ay_QTXEGeKcM z(=wI!~Cl)rwG2&Vl&8>q?Ehs3f-1eOfC2re`cOZ?EpM2|54nn8NrW72oc{f;$m4Wiot zy`PL}x}xPNRUXrdS*ICQK(^ND>(Q+K?!4goW5rMXYU4ETH)MTTArrJ<0a%pIsa(3itW&kgWJ~RsLnQ-C1Luy~6>;+!VokI%Fe zY!kmbZ5+IH@08bg#jJMpfiU!OP(gCMrYh@Y=kKCD|9txnw=2PafAjyy;osWPw0pEQ gTMtKczNJ3hAl|Ckr%4E!&@bp(9;uLO!!vgO0Vh&cssI20 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/letter-spacing/large-negative.png b/tests/ref/resvg/text/letter-spacing/large-negative.png new file mode 100644 index 0000000000000000000000000000000000000000..aac9817e8aacb65603665df950ad3989afb434a0 GIT binary patch literal 551 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pv8UuVnT!AzmP+wmUkB zAu7{vT{;J3X_W-|1vfBo^2o?5I0O|mw6=G5_fMF+VA0~$8@KJ;edNr&2algTfA#tE z@Bjb*|NEz+M}nzrzVU4T1k1I9pb>>@+#E__L1yP@qauKG&pn8pP*!L<&IOh~|p-DCe6CP|y(j%N3Q+|G6h>?m4+j--?Z+cv*npNxfqAOmS6(-S;b_Q!>wN-@N$oT8Cer)<4gj zIbL_@A5SFTs2#-<fB%^!%i`x$n(UgxQ zk|-d8vX3n8>>LIVGGGrN1tb7DVhCk7u#*x9hyWq51BkJ)iDI(}k_(oQUGo7R;7i%N zW{o%C1$a_CfNg*~;7V3tFkAp<$`*jw40zLM+iA4-04Fk?PJb78hfJr@xBv&(0N4TR zfwuq~zzSGL9h}6q02{CbSb#Yx5U>hh0xJLpU^$1@4kaqhn&@4<*S{6w18(f^#M3%PT4`RbTnM z?rME~L(>iQH@92A|Dmm2d%vTryQlZJ{=tF4frq~j4GoWujy?Kg{4bquV)F5msi~(= zr>FJ$zx6W)!?W4BxjCb8{`vET7mJsSt0qNT<}VWPrHa1E!SG-S-|E!V3yU%tUw%jI z-}ar%QeUVZX?dJi(-X*ft+Y%LK#N=p2o+_#Q9-l7-kEv_YMzAl~~V>M}#wP!t# z{M%%(XS78c0TjgrL55W zdN6@r`sU5~nj+1aTDozRS>u(lq0r9je5a)s=Sbt7V~(3b_h#{3IEJ}jF6IXZGH=|R zOFqYrXpRyscl$QGHz9zfGL&m4jMHfkgz0CwsxzUoK;|iJQk6qtS;WJR7U$1Y13it~ zhGJ+h)#g)YOD<<>cfb35pa0Z;s!oq^71sLo>K|zd+ zj1Z|~^~oT|-7E?63vOUwWMXDvWn<^yMC=77-Pbl9iKJR8m$|)6mk^(>E|Q zGBzDuo?CS36?dzW~aq^VuGiS`4J$L?sg$ougTD*AC;-yQLEnm5M?Yi|FH*DOz zdDG_YJ9q8gvv=SAg9i>CK791(@ngqNoIZW(^qDhf&zwDX@zUih*REZ^aqHHdyZ0VE zeEj6;^OrAPzIyZS{fCdAzkd1p?fbXyKYslD_507?|NsB}yV9w8i-Cdpho_5UNX4zU zcVC8wl*$}0+;>>0BSC7Sm{&wZnzX2^^v$Gg`co`3T`wk0(>->>Ej4x7+vLoYE$h<) zrm3ZEo8b{Ph1c!lzx?)1WU)yro}aSe7uv<~fXUlr zAA7}tH#>M$zAtv3aM)~8O!0wcmT64U$D`Kl+1^;XG)?@mR?3%fhS$=s{MP0F6JBt! zIpQY&fz>;om5XjD?waYFnU(cREF<^RtcN@*8+d;FofA|4cskRZCysAS8obZ0*7BN@ zxiKm>=3CW*{pXTI*E8O#={U<=rFO%Cb#+7er@3u49B2G%T>{=ZyVXeU|2xy6ymcqf zOcsNiLZV+8!hZ;??qlFhn_ShH`OM@=(Sy$oyx){ITxkEHEoZrC19OB(f%GM&Gn<#> zF50~;7d5E>baL8r_cG#1l=EVllq*iBp1D7IkN1L>2aC%C!4uD zY&kb9J5lPPc%bjy|1FsUL09-Td=0p+$k_1t|MS`>etT|xl5LL=FNm!2&^=)G!0Ni< z>4s-pCN!Hdp8a~@T(WGt2~#wm2Q#M*o0a>`m-cw=V~qNICf~|oZnD7Yf07EDUaaX9oq9F>{)eg-f7=tB z^^Ck?uYdeovQo+F&5mt00TGpPD~$!LS9MRRIng-RA$s1?-Mla6=G1+EEV^{sZsv`L zqdhY#MLw}?SbIoFw3H#+`^@SmqI-7S!uj|j7CCl^eFYkvM zgO%0)8ST1xH;4aex}LwC%~&h>#GMQCwm!INe*gcIz2))MX^rOJzP6TKJgmR}>qqx| zo9`YPn~%Lr&M0%bF`e^~l#8`ehe8tv<;0158FT*4&_^}QNJe3<bP0l+XkK)arJb literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text-decoration/style-resolving-4.png b/tests/ref/resvg/text/text-decoration/style-resolving-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c32d4ad59ff37041ede582a79c943e505a527d08 GIT binary patch literal 1893 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz~mO-6XFWwjsjdEP+wn8 zar5x<@e2xzh>A(c%E>D#DXXZeX=rKd=;<368X23Inps#{+t}JWIJ&sHxqEu~`1<(= z28D%3M#aP@Bqk-Nq@`zO=jIm_78RG4Ra910*VffHG&VK2w6?W(cK7u5^-q{MdCK$| zGiT44JAc7~g^Lz1U9xQX>b2`PY}~YY`>x%4_U=D$@X+C-$Bv&medg@NOP8-)yME)= zoxArQJbe7*>GKyaU%h_w_TBprA3uNj`tAFVpTBUeC6HBDV(CNY15{%x~AUSbggH}Y_^$d zY11N=ytYZ~`M-HuaoO~xiQSr0^*4XcottSq|K^-mbJl2_dvT7*tzm~7Qd{wJJbxMt3a-Phz6eEffJ>$VimlvgKp8t=3np1}PqE;P`C8xOZEs*De0*CH@MNxYo!Y>+UlAUR*ajrb#4UCG`HMfDgSotUJyJoqflA&uI5I zg_nQd2t0Y@yyW_$p91;P1vSf5xoY{|=o>}1t)3uxpHXJT`n?<1J>_pulTT8$XPo~e z>H^n;FEz%q@87xehxx+2H``B1c5G+<@%P-F2S@UmBOW-v5o>5ayFRI7$1S0)yDM(I zZa5g_9kN0E1&6{mxfipOKOWlMsQ+nBTMcWD#7|+zREC+qaz8y@&sKH%Osa?I0UK}8 zm&|h93SpAWugq*NQjPdU|B2 zZ%Ehuki2mx?@Oj_b~CQEAGoM;M9;?Ug6}hnCG!Jc`8wtZ)@7e9^pN|{w2`0Tn_Eo# z6XrRu{zkXAD^B!lcr3n??<2#zzwOT_PXGA&M6pbg?E&SPilz+e4a;NO-!McOIi0iT z*>Z((`T9bcODr<8Cow+CW!$y=_U;3XFY}zmn69KX=rFS78_X``sHj$X;(1)*avziY z(>|`5#X=FuAM@BEQcf;9Aaz_}8`p!I7Zo1rH=gU@{VH|A__9zg!>*WS5gC?>rAH=- z-u++2P|4R3n^@O+pZTpKcN9~=Yl$OT^~@c)`)czdE1$}quaSD3EnoC^zQbPCU3ms? zSLFy;d<|JSJ-)7dqOrj4P3?lL6F%>1?3Qinnl2ZT5g*=Ev{&&TkjK78~ZWs wrTk}BgV^ERm>FVdQ&MBb@0NVd-lK=n! literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text-decoration/underline-with-dy-list-2.png b/tests/ref/resvg/text/text-decoration/underline-with-dy-list-2.png new file mode 100644 index 0000000000000000000000000000000000000000..eecbdeedf08fa1541d5501b27bb33812555f3aef GIT binary patch literal 5145 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text-decoration/underline-with-rotate-list-4.png b/tests/ref/resvg/text/text-decoration/underline-with-rotate-list-4.png new file mode 100644 index 0000000000000000000000000000000000000000..87a2c317c99b9070327066fb030b3b4275882fa1 GIT binary patch literal 7287 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 O{?bs@RjESQM*bI@um^bn literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text-decoration/with-textLength-on-a-single-character.png b/tests/ref/resvg/text/text-decoration/with-textLength-on-a-single-character.png new file mode 100644 index 0000000000000000000000000000000000000000..4432c29bb6b5be019de55176ea67b57de9359fcd GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz_>iXC&U%VWvB-cAd+r~&eqY* zU$`uy*uNtBp7B6KdP;))f*Tkan3!2u+1NR`dHMJS1ck*VrKDx#lvPyK)U^!^jZDp~ zZSCwG9GqNSJ-vPW`~!nRqoQNt6H-z$GPAPtO3EuLYw8-CT3XxMJ9_)3Or0@v?!5U6 z7cE}0boq+a>o#oMv}Nm#eftj_JaqKX~)y%p{s5-8I4aHefj0~g1&z>Q2zO?wjgrCS;Q^JvGe2s1Wgmwo1x7uIj9&8Fe!L_C>VJkyT>;vHGHImrQ!i!kf`p&lTnOydY{>LN&%VI5@gHSH064yotP5G zyvO@zlguHjK;x}tYog*OOg~b3Su{m=W2%>}<2m8@#mXKJ1wNLl|8@A5@b$Y-K1=po z`4h?w`P_%Ud`pZiV2rd{S(7RSfC$5)*x zJ+b=59*O&9Yxr!7g7Fn2L{y85}Sb4q9e09!rF)Bpeg literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text-rendering/geometricPrecision.png b/tests/ref/resvg/text/text-rendering/geometricPrecision.png new file mode 100644 index 0000000000000000000000000000000000000000..e22061f17132b6b3eacd5b23a46b33d7f485d69a GIT binary patch literal 2101 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz_dHSC&U%V9R*lJpuWDowzjsa zstPDuT3U)#4P3CGpa9OsWTd91rlh1KCnqN*B_$>%dU<(4)VRC5!xcL@IXOBy!nr{~ zpg4m7pn6YFPYBz@#01DN1_OwQfq?;pVP|ItVc6K%Ko}6x+}s?Vjx<&Wa+XMD_5*sy=LwD4VyM^+Prnkw(Z-t@7%F-_paT0_U%7#@X+BSM~)sl ze*E}}6Q@s~Idk^R`3n~>U%qb2`PZr;6f@BV`a4<9{x{PgLw=PzEqe)IO-`wt&K zfBO98%hzw;fBgFW>-V3(|NsC0ca7y&4+8^>qo<2wNX4zUcVC8wl*$}0+!rpOp(MyL zdBc*{MWUBo*7`*2Y`i2EWe}C4cxufSjnkWshTYz%VYGJ3CfQp(n|eRbkEdT;8n2)UD^DYw@!wU$~y^IIWz^_UfNi+8^x` ztOZf|_FKakgUi0I{2J8cu<5oiOA!~J^EWLmJ)ifIOYRGwbLyM*QPUyg;gvNElY*n; z-F>W161WdM%Mxue3X&$0U(EvFmn&*5*rMi=y8NJXuic z68_d%r;_u+q*TY3z7EN=_)A14Z5LYb^3El}*3-9ZQ|>a(k&tOCWe`5w z#@u7LT=8;)xX!B71Em+YS7aZQi)S{Ub$ddT!pTLmSar58*y5J((f2?X&vwOoQVH)Q z19e&KHlE{h{_$4BY`fyjlB?6jGP&x4&lY;*l?%MLY)C!1&Y6v|B`W#Wx7S78Q*QEX zusUAqVRm4}{-3r*>~;N>ea@F|H-7x6__(2O?SYwn&TncLSm~+MD+k1~wQ$L{pJAD` z*J8qxqX*hw-eY>O*JQimawZum_8`U_eIw~Dj62lCf}TmJsI#2;x~oOxJ%g6cor(s* zYmv$U4<(MIG0eFus*=pQLFMM5%J0mp*`h8uA5glk5c!%>@9t$Q=?_2LpOrIjsEq%7 zI*!@qjce_bTl~d5N$z=!9CuA$9Z+=Um#jW|$!yM;T_H+MK(c+0U<# zE$Q$!q1pT=W2JxFRv2$c-T&Z&Lfu=3Rn`L9c?!$cpE(oFu;%nukD2$Gcn_wg?`^za z&$IH6`d=2CNXgqrzt?Q*T`=GN$KUNAy!{#PL`zpZGE> zHvgOQ`aNIY&0cT+|A4Nkb@{a~3vSP={W^Dh{2cq;%YJ_{ZR1kvC@VXAxhW(4`nh#; zW36|WmA!p)>*m(Y*#rctQ`5_NlK%Fs%~oCU^qqCS>E_K0ecM;GF~^9?l6;1DD`ypb6Mw<&;$Um0kG8o literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text/complex-grapheme-split-by-tspan.png b/tests/ref/resvg/text/text/complex-grapheme-split-by-tspan.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7711b7468a19385ca1eca57b7147b23b69b1de GIT binary patch literal 1104 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz!(+W$jr*d&cVsW&BMnpAS^4dproRz zrlG5+Z(w9%YVY9W?BW(25fvSqkeHmElV4C+QPt4W(b?72J7L0@z=-v*dcN%)7jN%98{r~Uk!<Ip&fo~t)G*)c_jDX=%5Tri>V!4s|&i5-F>MjSrhwkTLXZ?JV# z+{^pmjyH~zfuaREs+HSH-j!}H|Lq%gt zgS)cwpWbQf$a;KKWC#y7R4|t2X0n|1PkqU)&c6&5zn-tWnX`8%=bn{i3IBN{SC*EX zOR{IPCZ$~Kr4Z(F3orR>Yeu(i9+KDGb(^0DQBI7ZrVTNMvgcS lmJ>N*wYn~<+DEkZGp28k^jWKNp$3$oJzf1=);T3K0RU5qP$vKY literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/text/complex-graphemes-and-coordinates-list.png b/tests/ref/resvg/text/text/complex-graphemes-and-coordinates-list.png new file mode 100644 index 0000000000000000000000000000000000000000..bca75756a5679d0c8c120842942badd2dfc8d5fc GIT binary patch literal 997 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz-Sua6XFWw4j`znuLs&*T3U+c zhJu0uph$Rlct}VHL@G5kH90vMO&Nr1Z*Pw*uBxi4tE&qak(HH&vmp#&VPOb^kB<*c z3c}^!-~cjMSy|z-%*>#0gSZyRIN~(91W2Wo1o;IwFfcN+vaxe;a&hzU2?&eG$}6a< zX=>~0=^L4t**iG91V<&OX6F}F)HJlTwRLoM^-q{OW7h2X3l=R}zGCgBZQFP6-m`E2 z@zbYHpSy73=IuLo?>%_BH?>~P3`SbtZgWV+`fKm3-)5S5Q;?~={ zH~oSWMI0V}-hPfbYEHlwu5;{;M^~PUSo^3YLR}_6yL9h=<%q}fm%N2%O{m>;O}fUs zTK#vL_}N85yb^bRboF?Mt`Jai=@3wKYT*zBGXxc$)`TkPA_U+vco@>}>UQ6~XUn5` zt9jj#<~0n}?F#A)6*6+0{+7Bb7>6($U2Hyor2UF`>T11A*0N+LW2>p7 z#nN7rEGMB*>WrnuMN+0zx>M(#d+zPueb4!x?|a_!e&2b%^PKlRN_VnVkW-ZdpkPO{ za*^!9?@M;N1TzzSD}ZSy=#FmI68cYYIGnJsuz-Mo?-?$@0oXtsupih5!~!uuG!O-_ zfJk63um^|$!htX#6xa>y0z!abAPCqA>;M7*$&*ZA8?Y7d2etryfG@Ba@BzGm-vBSb z6Yv1s0S4d(xB?R8n*ciC3^)OffCFF;*a5bH4Iue}6<`Ti091eim;+|O24Fp43YY-D z0&4+dzzA3atOm${A+QQC0Q7;CfF7^{&;>}qa$p&t11tr!0WDw&pa~EG4PY^#4yXaD zfC{h>SOClilmR7R9xxY}0}ud3V79~nU=|<`NZgnS$O69rGQbQ#8ki19Nz8yGs*in> z2#4%m7bjOPG$>qN-V6GxP>Bxd7&|MfTXgsEv(K*cJQm&!*F7@2TR^4oYIhdr70bp~ zay!#&-1DW6bL~mQjIERvYfpw5NwjpS1s%Bsev zc@3n*g664dG#0&QIgw)+nyp?m{`t$G=ZCXff=gOc(#%|G{4)mIrla%fx&&gBSS-!Nc=ME<#jEV;|yzf^gF}``mQdPyw=WMzqKe$h?d0}cW zmoc;?<<0DN-qDmszObesp;@lhlRyZz9DHpr7&1#8sCj9jTI@3zKN_>T?8eyV!iw=Z z5kna}n~QurT*yxXyW-qeo{FVbY&L4BE~q<=@qUxk+<`%M8$mERlP8njdwQLP?*rC3 zPRPO3T*JP)_D2(Kf>%lkVO5Skmcrx^qrDLu4~K|5+Z4$<-loc}Uz0?+6{;PIZ3aEp zNq!&SMvpW+DN`@9t|6@}W4Z5Q&~xfOb=4Ovx}7?@LcLJL*nNTD{Are-DqFanN65UC z%Re>|&$tyK*Q!3QT-`4-Z+VgT-LJa3olz6DE5$kPC3nO{DTy*O4IeY(R7j$;QN5Y8 zdOf}4Pj#4YWanDs=ry~=vdZtB*S`?N`?JK;NL1_PBqNuLGq2;oRON6!QRh4Ep~(;)U+$q!Y5e zo91O~E=ae|HtWrj2Xsh7W;I9I}ZhlWEw5vGE`D6t& zMda;CnVg;x#k_I;N>MIUfZ5-lI<1N6=o^p%uW8RJI@;n8RD~|GA4p|ZsuAJEJg1E= zbr&}k+SG|!K14p&dlS)5Q=(of9a;tMA=s&YuAr>_?vKo?92&&@qZ@)vf{6syK)f{m zI8D?DFaiN+%2&F*#QL0xK!O0CC$ApCjbin>Jgmhq>&^c@|?ZEWfO10_E@@u(|eSl@nuqo!jy+Swz6mzX{jJT0aKMS|%axix2TC$_e$ zE@m&APun%@q8rg2qJcs!zl?c$s7m<1mV1sD73>9poo$hlGSyE5t)ghP2S%=cPO4~y znLp9>%3wI?yepIOsY;)_LCDTd+_~TEO|CvzAYA%MUFV|x6s@!sMSS(z z4cqFHv6Jn}Dj!D^$J$j#Ga4r8eI73AS;9iX=OJ~Bvzq17v`lJPE`-!g+K!g|hKndw z`eBs|#{d>E`TQNuLG|WNgHg|n$RM{<+GqM$4c`G*0)eKy1ko~_X*=iM_adXTLt3ax zZTqng77=$s0f_l|jHzTxaQs%NV!`Tuj#06&SlbQ^F9KjwAa(iPlY)ejT1Nw6U?uTB zRrMmcr9q2_Kx)Bmxvy za5;Iwjg3jcNfJ86QN))pHh#2fp9~D^TYY0NO0MV0nVe_b4N7cuDWy0_xKM zge{!iv&Ab_uVZi^!Q8bWWUtS_wp%-$u-F9;Qx8Sj0jFrt7xd^kiGmxC97J9cH+-3{ zlla=*_jtm1k&E!pKTTvSN#PAts%|%qbaS-~Yqixm)ev?wv~6IxzU@?=2z!*F z9#Cb~$t3f746cg*MvzOf+H!BGk{njdTF&2VzGhg@JJTAg5&2?dS7}p_=|qM*giHYU z-`;m|?tRK6oOn(m#t=qnw)3&}b}M3XnHSRV)@5IVSCz?9#D`nW^P!EirH94g{kvi+ z>eXXBXOovK+Jkpt-tERr#d2jCY0h6?xogC}a9CRXFf4H252M&!9pgFt(luHw(I-_@ z?{>Eu6{GqE&+X_2{bT%tCbB;z6T|D*nq&Ll^+g@HeUe;a=sS`jF6$!oBi`B5nnd6e z7#)ljhB2rsZqB%j*Y;#KRHCnP*#?)Mw>-(S$9JiV*Tt5N$&`5dq`T6a9S8Sd9*a=A z`xwf0NXoq>NzpE>_QVUm`~qPw$-wqAsbdTELYmn6t=KW-LV1?G-R_L0YOpiNMc}!z zCWCknE5hoPF^{OZ#y(J)mAZ!ASEzxswLxa? z?CX1vEl){xqBGCiI0r}L0zTaO%Afa^Q`4*R>!Zdaw8U3zW4(PN-5`|i>*4!$r(J4! zpjk^>@f}}#)t_5Gu0~IMs+YE(=3l(RjC|W0M}BLlc<0gZ?~Rb0i!(EEsICM)1`0<( zph*D4ga{l2;m8dbiQ0(an~(`{6Dxt)fDeMeM!Xq8HnHnP|Bn79;hzw6Q|x~Pe~Dx;xiUuKhIR6N) S6O#xCn}w;B3H`*+*Zu@cV)%mq literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/method=stretch.png b/tests/ref/resvg/text/textPath/method=stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..1aec07f3c0866fce40b1186b1f381ea001b35782 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/side=right.png b/tests/ref/resvg/text/textPath/side=right.png new file mode 100644 index 0000000000000000000000000000000000000000..1aec07f3c0866fce40b1186b1f381ea001b35782 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/spacing=auto.png b/tests/ref/resvg/text/textPath/spacing=auto.png new file mode 100644 index 0000000000000000000000000000000000000000..1aec07f3c0866fce40b1186b1f381ea001b35782 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/with-baseline-shift-and-rotate.png b/tests/ref/resvg/text/textPath/with-baseline-shift-and-rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..b89ceacec0ff82b085759cc3c75455e00e491132 GIT binary patch literal 4699 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/with-filter.png b/tests/ref/resvg/text/textPath/with-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..a721cca19731735cc10821bcbf2a763317452389 GIT binary patch literal 3321 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 KjeTJ1e)C_8J?}dJ literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/with-invalid-path-and-xlink-href.png b/tests/ref/resvg/text/textPath/with-invalid-path-and-xlink-href.png new file mode 100644 index 0000000000000000000000000000000000000000..43a4c66e7ce7cfedb3a29b4ae32ac96551ca2477 GIT binary patch literal 1670 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1yn~C&U%Vt*@_#kU+*D0fWsw zgCtmpcLtFGsGa*5lq^=21o;IwFfuSPv#_$Ub8vF;3kV7ci-?MeOUua0DJiR{s;O&e zYH91}>Y18bSXx=z*xK1UI664Hy19FJdU^Z!`uPV028Be$#Ky%ZBqk-Nq^6~3WM<{& z+^!D{nm^o|qocRkDE?d50<*LVdJLFTXyc+y=U*f z{Ra*nI(+2l@e?Ocoj!B+-1#fluHU$M>-L=oj~+jJ{^Hf^H*ep6`g~=A6ENK}_jym75%dQj}W+oH!IIB>s7y(Oj3Y z^RnnmKX2E(#-~X*PmU} zpSD~}+fm_kUfb=}#RiU+?Y9n_bDeF!v3>uKyB5-ur`;8)*>^V2EX6%xfs$zOvm5p= z^vxwE-4?x}BM^GX_R7p;4V9-YrB=Lw)60%osrj~u@a>6e$=tf*dUS%^5}gobgR?HV zCvv5pocNG+y+x~kjC$>GPIT9IH&|P=p(*>_1cUN67x;tUY`KbW`R~@?2 zPON;+#3iKf|DyHGW-$j(?zJ&<1uov@a5XJ|+4AP!vxY@7`(l47oQr?GU=6SR+*=B~ zcLQ!rwu%+_S<5T3O;2HQOUKNBTlc;*aS6+tyK-v&UGVMT-|7WhW_AcEwO?~ee9atm zU9s$Mvc{W}i7%Qg>ese!GW+LqnKAG`)93dsb{!R0SX{T3I5NBZb-$;i9j?uy9?zlS z@kORR&g0YrM~xMyv`w8i*o3Tkc0I(LCAzt?WAmQ`$uG_q9-MZFNo9MLz{E2B*CXqI z>RQG$hc|QQg&c`_wYO}yqQDaSSA~kljH=|V61iA5U7g-PBkI9^mEKteCOqpq-zF_P zw?((hIz-#x?2(57nm)}74&2@?aXHKL{_>>;{7jW+tR}auD4w^q&&xU8uh_cn4pX4& zseR>VOe@xhzLU3kaA1n1mi_P3XXWPI+-}EhmY#g+*%luAyGiEtj^P!ycLFDObIuCC zEx9jjfvfm^5dC{I(YTCXJ1%uB!EnyPWsQ-B&z! R2w0pjc)I$ztaD0e0staY@azBp literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/with-path-and-xlink-href.png b/tests/ref/resvg/text/textPath/with-path-and-xlink-href.png new file mode 100644 index 0000000000000000000000000000000000000000..43a4c66e7ce7cfedb3a29b4ae32ac96551ca2477 GIT binary patch literal 1670 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1yn~C&U%Vt*@_#kU+*D0fWsw zgCtmpcLtFGsGa*5lq^=21o;IwFfuSPv#_$Ub8vF;3kV7ci-?MeOUua0DJiR{s;O&e zYH91}>Y18bSXx=z*xK1UI664Hy19FJdU^Z!`uPV028Be$#Ky%ZBqk-Nq^6~3WM<{& z+^!D{nm^o|qocRkDE?d50<*LVdJLFTXyc+y=U*f z{Ra*nI(+2l@e?Ocoj!B+-1#fluHU$M>-L=oj~+jJ{^Hf^H*ep6`g~=A6ENK}_jym75%dQj}W+oH!IIB>s7y(Oj3Y z^RnnmKX2E(#-~X*PmU} zpSD~}+fm_kUfb=}#RiU+?Y9n_bDeF!v3>uKyB5-ur`;8)*>^V2EX6%xfs$zOvm5p= z^vxwE-4?x}BM^GX_R7p;4V9-YrB=Lw)60%osrj~u@a>6e$=tf*dUS%^5}gobgR?HV zCvv5pocNG+y+x~kjC$>GPIT9IH&|P=p(*>_1cUN67x;tUY`KbW`R~@?2 zPON;+#3iKf|DyHGW-$j(?zJ&<1uov@a5XJ|+4AP!vxY@7`(l47oQr?GU=6SR+*=B~ zcLQ!rwu%+_S<5T3O;2HQOUKNBTlc;*aS6+tyK-v&UGVMT-|7WhW_AcEwO?~ee9atm zU9s$Mvc{W}i7%Qg>ese!GW+LqnKAG`)93dsb{!R0SX{T3I5NBZb-$;i9j?uy9?zlS z@kORR&g0YrM~xMyv`w8i*o3Tkc0I(LCAzt?WAmQ`$uG_q9-MZFNo9MLz{E2B*CXqI z>RQG$hc|QQg&c`_wYO}yqQDaSSA~kljH=|V61iA5U7g-PBkI9^mEKteCOqpq-zF_P zw?((hIz-#x?2(57nm)}74&2@?aXHKL{_>>;{7jW+tR}auD4w^q&&xU8uh_cn4pX4& zseR>VOe@xhzLU3kaA1n1mi_P3XXWPI+-}EhmY#g+*%luAyGiEtj^P!ycLFDObIuCC zEx9jjfvfm^5dC{I(YTCXJ1%uB!EnyPWsQ-B&z! R2w0pjc)I$ztaD0e0staY@azBp literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/textPath/with-path.png b/tests/ref/resvg/text/textPath/with-path.png new file mode 100644 index 0000000000000000000000000000000000000000..43a4c66e7ce7cfedb3a29b4ae32ac96551ca2477 GIT binary patch literal 1670 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9M!1yn~C&U%Vt*@_#kU+*D0fWsw zgCtmpcLtFGsGa*5lq^=21o;IwFfuSPv#_$Ub8vF;3kV7ci-?MeOUua0DJiR{s;O&e zYH91}>Y18bSXx=z*xK1UI664Hy19FJdU^Z!`uPV028Be$#Ky%ZBqk-Nq^6~3WM<{& z+^!D{nm^o|qocRkDE?d50<*LVdJLFTXyc+y=U*f z{Ra*nI(+2l@e?Ocoj!B+-1#fluHU$M>-L=oj~+jJ{^Hf^H*ep6`g~=A6ENK}_jym75%dQj}W+oH!IIB>s7y(Oj3Y z^RnnmKX2E(#-~X*PmU} zpSD~}+fm_kUfb=}#RiU+?Y9n_bDeF!v3>uKyB5-ur`;8)*>^V2EX6%xfs$zOvm5p= z^vxwE-4?x}BM^GX_R7p;4V9-YrB=Lw)60%osrj~u@a>6e$=tf*dUS%^5}gobgR?HV zCvv5pocNG+y+x~kjC$>GPIT9IH&|P=p(*>_1cUN67x;tUY`KbW`R~@?2 zPON;+#3iKf|DyHGW-$j(?zJ&<1uov@a5XJ|+4AP!vxY@7`(l47oQr?GU=6SR+*=B~ zcLQ!rwu%+_S<5T3O;2HQOUKNBTlc;*aS6+tyK-v&UGVMT-|7WhW_AcEwO?~ee9atm zU9s$Mvc{W}i7%Qg>ese!GW+LqnKAG`)93dsb{!R0SX{T3I5NBZb-$;i9j?uy9?zlS z@kORR&g0YrM~xMyv`w8i*o3Tkc0I(LCAzt?WAmQ`$uG_q9-MZFNo9MLz{E2B*CXqI z>RQG$hc|QQg&c`_wYO}yqQDaSSA~kljH=|V61iA5U7g-PBkI9^mEKteCOqpq-zF_P zw?((hIz-#x?2(57nm)}74&2@?aXHKL{_>>;{7jW+tR}auD4w^q&&xU8uh_cn4pX4& zseR>VOe@xhzLU3kaA1n1mi_P3XXWPI+-}EhmY#g+*%luAyGiEtj^P!ycLFDObIuCC zEx9jjfvfm^5dC{I(YTCXJ1%uB!EnyPWsQ-B&z! R2w0pjc)I$ztaD0e0staY@azBp literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/tref/link-to-an-external-file-element.png b/tests/ref/resvg/text/tref/link-to-an-external-file-element.png new file mode 100644 index 0000000000000000000000000000000000000000..2c58dcfbb01d8ca22d863ee392d1dd00dcc8ee31 GIT binary patch literal 2382 zcmcJQc{JPU8pnfLOR5A-BLq=Pr8K0Jt0EF&y-Ly8xd}yE485(kiYBzCw6VqB8dO_} zHFniyI!Iz`X{cCgrj}AQHI$Z;n|pIkk9+6LJu`pwoZtKXeZJ58Jn#Gd&U?=DOLcXz zlatvm0{{Tz?D1GP!JGB(Atffzf)sxS03iC#)#(IIVEKaa9~Hp2c)rEr-(tB>edd!h(H zRBV^Hgrt zqm^NcC%7ty_F1;p4ex^mbC1%*X}J)$T=lpX2}i*G{%O_GSrcv$tua@Ls6>%M;`5Yp6%4~~C#+%*pAm6bmf z^Ha#PbkDH8WDui+xj-_qx1L=m7084Hu*RLSsg^3LzF`ztwALNf=g#ToRpVZS1>F*9 zu&He6L%Wc6^x&<}e@7@&%%|gXU9NcatWj~;&eIV5B9Ix|+E{;a14@k zw}(g+wF=gy>S#QZ;+v4`b-O0nN}kh_^VFs?419pyJHJuwCvmHX1D3|u^ghx@5tlgi zp;B0AreWcgaOyfi^g+Ry51Y=Hj*K)bY#_KjA&tru+nJ6KYId|?vln*lsw|slum6#4 zss!K0rT{aQKhrxby2bSM`&$@kSjWn1_2WP`U#n#!g# z_Rt-CVIXaH|GP!2?FB%jYtt9_!0GTS2>GfG2G=ObNisFiu;V;AR)2Wy9Pt>-Y0WJe zy=psB7uz>Lq2^g7J`bW*WJ+tqkm%K?>gSfI>|UM?jSyM&X}D-q%whD!Aw`TPY3w-? zdsEvxW0ovSLzF2|;~1O_JLYd{737l#XR0H?ns(=_7Zur+?w(9*UB|9Tg!SbZ0_vJ> zjz@F_nUQh0S{tuP2ND`qHs*qy(VA%#3j5^L92D8#wKloS>~+cb68eyHE`o!<{;NA7 zH!e9=FFL-tk?i3Ev6?qPDqwaKw@f$?c#cOq)TdjASLbMmr)8yJc&{^BgB9XHCcdzZ zpPO0~?Rn{*!^NwYD_^=nPQfV$hU*%bDn}u;M!9nquz3Afx6c^NSA}|1B(L_fGKWU- zQhoJxL<=?bqrq=k%RvW$AY-OPT?jKAadc%MH|+3yXWgnpVzIyn$yj0)Wsjhiy z4ui9zm3uXU>uE`8Fwd^lYJIfah1PAWjKhC0ZSpdvjC*%hLbl75-1@vFF!$}kp_gci z3|QDYp|NOur9(3YIiIe_Z>Caa$5@r^(#}nvf1w93)>mdezekSn1G!ADwAz`?{>u1% z(h#?1@ompj%4|4_=*S6Z=C6K~Ovc?>ns^um_ZwSy=k6V_k=nE8hD@ZNIgK`WdTY7c zct;cYeZ%HaqUO$z%XN5D#_atH4!*h(kpKVy literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/tspan/tspan-bbox-1.png b/tests/ref/resvg/text/tspan/tspan-bbox-1.png new file mode 100644 index 0000000000000000000000000000000000000000..937ce4e25a1f4078d0d5cef81d138a4e47311b1d GIT binary patch literal 3112 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 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/tspan/tspan-bbox-2.png b/tests/ref/resvg/text/tspan/tspan-bbox-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e5508586c21c94018d9299c1304901f766fa84 GIT binary patch literal 1424 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz{D8f6XFWw3YRgk*Dy#FGjLTg zFx4?I)PoRzIZy`5hKS%Iff~`JU>YGN!;J-*2{xQm667kFnOOCrxuL$k9;mFQz6Pse zpkP5k0gw!@4@cIRnwknx?_Tc?VZ@}zKo~$WI5RjfGZ4--tv7|Ufeg4$A%e(0RjF4& zRtaargBmV^g@Mi2JoP+SRN@F&rg|obVqloS9SN}-62+2T+C4y97MBG11vda0K)?u0 z9Ly}NZ0sD|ynOtEqGIAwGP3dtib`Ohs-~`?siS9LXk=_^ZfRw0V{7l=85SNDosyQ3 zSyEA1UE9#u)YQ`2-qG3BJ7Lm{nKNh4S+HQ?k|j%*EnB{F_1d-TH*Vdseb?@T2M-=N zc<|8SqsNaOKXLNZ=`$BEUb=kc+O6An?%sRw;L+nJPhY%z_3HJTw;w)!{_^$vkDtGO z|M~N`BmeS!pz~&Xx;TbZ+I93P*d?8; zJ+|tEWM@jbto}c*-J6qNwa@x^xbNoqbDw{T*T@^+e_!+b^RK6mwLdR)33OY1{_mrX ziJBAmIRq3O8W=#O7+>GEAyH{9HuWh<4M zmVIT?Y}p;_-#I93xF_myEcxn^*}hflF3(H7bBS;Bp>qW*XX;K1ULUq|R(tdouf5;S zblJ6ex5ZxzE9T$ie^qRCgjG_SC|BNvxjyWQ+rK{WS@Zc)VfQtK(z7P)if3Q_lzIQU z^T*@W=VDrHuB_T;f23zNSF3ky%a!c(_!DY(BUVm}VOPw)I_)ZVq}VI1O^2pfvk+12L}TlU``PZ25Zx)=3+9LWZAR(={ zDtPnSQ<5E`^Z%%5)_k83zOIi`EPMUBrL#rNJhME?P8ht_&AxZ(=i=Yi5u$oC=boD> z+p$}qKB?Q~Pv_hDid*BHx?T1hnRed%ki&7D@cB1~@4x@Ev@8`wjco$43RJw3r*r!G t-k(S*gn{u9(~_&ts|sCa>Z@w~X8yOe=2*sqKtE7c@^tlcS?83{1OQS;_A>wg literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/tspan/with-clip-path.png b/tests/ref/resvg/text/tspan/with-clip-path.png new file mode 100644 index 0000000000000000000000000000000000000000..8df74f7aba5ac8b34936ff3954362dc77ee569f9 GIT binary patch literal 2359 zcmeH|X*8Q@8^?oMhDoKNNMlJ%EVUGgXekwGnnsXOMH`ADK`CRc+N#9bqKPW1rc?Wp zpi)cAX!RXSh~?DU*alTvre<0%Em0=(<{Z=aJ@et6?{lAX|DWIge_z*^=YG!hq}!8D z1Emj10{{S^H38=!cyj*OQepxvNO5NY0HRa&wvML+_Mi24-#~nPd|X`IUv~NX`wMdl zg(869;9yTrPhsNb=H}|^`j=gMA(cuMvX_?^fk5!^@Njo`7c}k_kjZ3AOUpg`CE)RR zp~c~F0>EOiLW{v*gz!JAt*tFcP$-m!hK2wP4GjgVudgpGgTvuM(9+Tp0s?^$g1Wl8 z5MVGE1OgGTnwpxbs;V$lQBhG=Ru(c83KfDt!CFjlYh^W{;aS2JOucT$Z2JV*y9RSP8A5>6Of*gV> ztEj4}e}m9EtgEMg#K6!9WsEjCdd$@9xVgm%ON~KiD~pq zV0tEyXD?lkJ-`ObI5;@ms8Kof4FgXg+nWqpwnr7L4Rm^$l$)+?@K2q+50*+a=7>nat^-8>6oNShuNje`_ht6y=^lZ_2-D7`i}PYbos1T7+_|*jcULM_ z09BrgiUOjtP`78mX0mR4Vi@LMEf+!Aov-(Bc4{3r)Ok&@{Vnnzm38<4m2eo zR#7%bTUVfp9(r-;^B`}#6smO2+?}fA%i=}~)f2wFZ9+$43_3GGaP#zUo7oU229ZVHvly8bEqWiQH~kwLhIlOt3(qNoP%xZWUIEmsrt2UwlN`fA zF4x?dxs8g!=ub{~V+e_t@3o|I>T$ZyuhI>9A7TLH_G+&vW2UT$a>tZ*WZXxPX-k+l zL6kX=pD9srMUZsUL8QvJj-O@peyU_A%S4Ih%0A^NiTMq>_w7}R))1|p%7z?=kaM#c(e8KP2JlNfj zmSp@8&Bd{s8BXGw>_}4X{7y91FDqGt+w<=vqXXVr-L+(V}Qf3<^0s7|$0VEbH94{PdDQ7zTo^cr6L^z%nY)tnqpJc;KI)td(f zd^fln6;)AtqL%eI>@_avN?!8(E#LndB70-vi^1|Yvhy;XifbYw`#>1LoEOiLW{v*gz!JAt*tFcP$-m!hK2wP4GjgVudgpGgTvuM(9+Tp0s?^$g1Wl8 z5MVGE1OgGTnwpxbs;V$lQBhG=Ru(c83KfDt!CFjlYh^W{;aS2JOucT$Z2JV*y9RSP8A5>6Of*gV> ztEj4}e}m9EtgEMg#K6!9WsEjCdd$@9xVgm%ON~KiD~pq zV0tEyXD?lkJ-`ObI5;@ms8Kof4FgXg+nWqpwnr7L4Rm^$l$)+?@K2q+50*+a=7>nat^-8>6oNShuNje`_ht6y=^lZ_2-D7`i}PYbos1T7+_|*jcULM_ z09BrgiUOjtP`78mX0mR4Vi@LMEf+!Aov-(Bc4{3r)Ok&@{Vnnzm38<4m2eo zR#7%bTUVfp9(r-;^B`}#6smO2+?}fA%i=}~)f2wFZ9+$43_3GGaP#zUo7oU229ZVHvly8bEqWiQH~kwLhIlOt3(qNoP%xZWUIEmsrt2UwlN`fA zF4x?dxs8g!=ub{~V+e_t@3o|I>T$ZyuhI>9A7TLH_G+&vW2UT$a>tZ*WZXxPX-k+l zL6kX=pD9srMUZsUL8QvJj-O@peyU_A%S4Ih%0A^NiTMq>_w7}R))1|p%7z?=kaM#c(e8KP2JlNfj zmSp@8&Bd{s8BXGw>_}4X{7y91FDqGt+w<=vqXXVr-L+(V}Qf3<^0s7|$0VEbH94{PdDQ7zTo^cr6L^z%nY)tnqpJc;KI)td(f zd^fln6;)AtqL%eI>@_avN?!8(E#LndB70-vi^1|Yvhy;XifbYw`#>1LoEOiLW{v*gz!JAt*tFcP$-m!hK2wP4GjgVudgpGgTvuM(9+Tp0s?^$g1Wl8 z5MVGE1OgGTnwpxbs;V$lQBhG=Ru(c83KfDt!CFjlYh^W{;aS2JOucT$Z2JV*y9RSP8A5>6Of*gV> ztEj4}e}m9EtgEMg#K6!9WsEjCdd$@9xVgm%ON~KiD~pq zV0tEyXD?lkJ-`ObI5;@ms8Kof4FgXg+nWqpwnr7L4Rm^$l$)+?@K2q+50*+a=7>nat^-8>6oNShuNje`_ht6y=^lZ_2-D7`i}PYbos1T7+_|*jcULM_ z09BrgiUOjtP`78mX0mR4Vi@LMEf+!Aov-(Bc4{3r)Ok&@{Vnnzm38<4m2eo zR#7%bTUVfp9(r-;^B`}#6smO2+?}fA%i=}~)f2wFZ9+$43_3GGaP#zUo7oU229ZVHvly8bEqWiQH~kwLhIlOt3(qNoP%xZWUIEmsrt2UwlN`fA zF4x?dxs8g!=ub{~V+e_t@3o|I>T$ZyuhI>9A7TLH_G+&vW2UT$a>tZ*WZXxPX-k+l zL6kX=pD9srMUZsUL8QvJj-O@peyU_A%S4Ih%0A^NiTMq>_w7}R))1|p%7z?=kaM#c(e8KP2JlNfj zmSp@8&Bd{s8BXGw>_}4X{7y91FDqGt+w<=vqXXVr-L+(V}Qf3<^0s7|$0VEbH94{PdDQ7zTo^cr6L^z%nY)tnqpJc;KI)td(f zd^fln6;)AtqL%eI>@_avN?!8(E#LndB70-vi^1|Yvhy;XifbYw`#>1LoNr-i# za+_(SvIpgUpIdIZM}^~@U(Wdtp6B)YeBYn%>-GKR{oD861zS8!Oil~{0KlxRa1ICE z{^vkI2L#*u{B*!5Yn&;8GPu}fY?Ven(zaSV?F1i)@$ER~3m3bO9y~?Qua+yc9eRt z{z^Ui*Qt3QKf1~{#d+_0xHaOYJ%)}}`bTIG(%&ICUfcLljt&#)UbTUnf~0Z(1Elao z_1?oyiPuCN_ML@QQCck|3k9HWA_EOduUwSV`UU`K)k+7CS>FmRD+4O9)^8diwQc=M z$Yi<3Hf(d{buZc+G{|BJnM4zy!SpwSu?&PRr!%V#pCmGanlLIEY!68^kU%(239A)T zI&|Nihm+GBKAbITMzEtMHulg``zyI967%!S$&$v^B*#$fhtq=kX_q&fHcUFIDAs3h zJ+q^8{jn2p=ZdnBuXQ846;q`LY{sv-gH@V5CX^z9OvGeqyAzh6qFLy8`}CyHc)&HE*LTF&*=!*oBX1cys6pvBM@P)AOd z)F(~u$1J;tNmmptNZ4Sx4sNafa7evOB*NS-b*u3Drz#r20!&#z!Tk!PDo8u$d`FpL56a5~Gv>&3cCPLlaMIAAkLfMrliJ!r zGbsu7i&24o3si}Gpknp}NH(#W-!!omz(p=lkwrgdrM%L*#BW=jD=RhxtZUr3!N&G# zN+O)+%h#*G)kp((_-vQ~phdMXs}g|mz9KDQV%%Yv(kvPLQ+=-&=625z@{CYsa+hC}Rk4v~4HRcJ$WEoNh}~ zQIg?(j{jjEQEEzPxR>&M=TMPxV0pF(RB##}w2)XW12{Uw5*P)SUBx^<4qw6Emw2Ml zsDQYAhR|g+zU#UDN!a!7kUQg1UBw$DB$Ts#FK$#fS-Kn24h)#<8-Fq@Nz6`^+q&;r$6jWI_Zmr6qC*hUv9KCHPa`=yO${IZVC{k zt6I>Sme*yb@S8V4lR2=qr4YtlxkV+EH!Mhe`p{05*+s@k1`Dye=OV7J@SZpyksxzY}jwDD2Z#s1lcB|>5`SaTfe9F4DZy+bLYPzn~a_# zxcV6$ZcCnE*A3^jcqY#qwfYh(QoYloDl_llHbUU#Ol^XA&K@7B`qa zYV51p28PF!nP{@jyT07**&lCR-~OvG+$&aU%-3=2o0z9lT?JwS_IN(u_#^1GHyH2mk;8 literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/word-spacing/large-negative.png b/tests/ref/resvg/text/word-spacing/large-negative.png new file mode 100644 index 0000000000000000000000000000000000000000..02886c5236918355c21a751026ed090aa6368fd7 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcqyv0HT!Azk)YsP+6cnVUrUFHP z?A1~_Ak`ctL4Lsv4Dt>Q6BaxOc#*FL6r1Jg;uunK>+PL|ybTTlE*E_TGK8cSFn2j5 z7*_B&2C*#6lX6(IQ+WD!>58O3M`Vt^Uey2SuAuWrCZQ6BaxOc#*FL6r1Jg;uunK>+PL|ybTTlE*E_TGK8cSFn2j5 z7*_B&2C*#6lX6(IQ+WD!>58O3M`Vt^Uey2SuAuWrCZ$?6(SfN9gQX%7#L`4YYP$d_xJbn^FvdB$<@)(!4#xW zL`q5uzX<{Y0{9icWm#BQ;A}Vp7?O;Pj1cb3)*2=t>t;!iUvL8hBNHwX<2ziWmR=eZCyiSQ&UT8TUU2aZ~ue| z6DLoaGG*F~IdkVNSg?56vK1>=tzNr!&D!-V3(|Ns5_KdtsU0|U!BPZ!6Kid%2*z6=iyl{o%!H^2D0@SQxIPZ?aDW*TxV^GKZL zF=f*lS}ri?=C?l(-DqHux# z976T%Q!|)71Xm;>tBvWIaKOX9x~R+f(Sv-D0TIq=;XiI_-gHMcG)dbdz{%}fZ1$$S zIk_6^<#HBrNjNOKziII@=?h!;e6FZsIGx@xuPMxD#X~!Ddyj9CKUP?FOFv1B__E?4 zXOcxifL+b0DQ&H0etTpt1HXrZb%Wpa ziW3ZOulgPrZKz_ta_QrQi&oP#^d|TO=tnrrdai9YVSzkDN&AnMkTan*3Ry3$v~Eco zeJC<|eqK+>%F622`FSfVG<03;T7Z$lA+-7AO11Nk6B#=Xy9Z`%3fkBCS6rc0eA~f; zhteDF$LVi*vyuPbfy=FR&&^Z9U$W*FZ1|!ZaDQLOtKHY@SU#k!yzlz|{(BQMy)ZkY zYyWt(rkylR`c@q{VOGQsZ3cOdAJ;F`8u|C?ua%smaO&?7fiqUcyr#Fd$X@trFLZ** zX{njx_WWg1?_MQeko8a4vblW^$KCHQPn|jOTQtr2_T4>hQ>Nx#cw2J$)u!@=*%4>* zuI(zZFNu#`9LBSH-d6(|sopz&Grr0+tgDo~{L=iH!Lcy0V`V+%&%P(_*yeNX`NSW= z7ed{%&Ivrer}tvky5~GIqgyY2V<~QxD4%!y#;f&@IXiE#-#xxsD$y+DO&Z6^oaUPc z(w1{+HorUKls936(Ti7;&z63x%(xaNu6<%t+KYMLHDa$QzStLWfc=qXN2j$!vJ{K*n@i%j64JTQ@bt7_w~M*Xw7xPqLa}!|tC2R)Lk<_q56`Ir803 zZsUCMC(A`oDLtN-=Qd$gka>vQtza7{9&K5LSs`#35mCcPL`G>_$I*g%jL*6LL zH+hBsQ7mPMV$NY$$yyL|lOc%n!4g@8-HcmqGfv{pTE?qTxFBx>qf73I^XL5o#VUhV zyezWzKrR=MiU=_C(|zZVEq@H-(bZTuNXg#0+!4~Q>-ASS+KF$UZM67fP(kkL>gTe~ HDWM4f55=#e literal 0 HcmV?d00001 diff --git a/tests/ref/resvg/text/writing-mode/vertical-rl.png b/tests/ref/resvg/text/writing-mode/vertical-rl.png new file mode 100644 index 0000000000000000000000000000000000000000..a423e454c2714d8fbe8c8084db6d2f12860373eb GIT binary patch literal 2182 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(A9Mz|$?6(SfN9gQX%7#L`4YYP$d_xJbn^FvdB$<@)(!4#xW zL`q5uzX<{Y0{9icWm#BQ;A}Vp7?O;Pj1cb3)*2=t>t;!iUvL8hBNHwX<2ziWmR=eZCyiSQ&UT8TUU2aZ~ue| z6DLoaGG*F~IdkVNSg?56vK1>=tzNr!&D!-V3(|Ns5_KdtsU0|U!BPZ!6Kid%2*z6=iyl{o%!H^2D0@SQxIPZ?aDW*TxV^GKZL zF=f*lS}ri?=C?l(-DqHux# z976T%Q!|)71Xm;>tBvWIaKOX9x~R+f(Sv-D0TIq=;XiI_-gHMcG)dbdz{%}fZ1$$S zIk_6^<#HBrNjNOKziII@=?h!;e6FZsIGx@xuPMxD#X~!Ddyj9CKUP?FOFv1B__E?4 zXOcxifL+b0DQ&H0etTpt1HXrZb%Wpa ziW3ZOulgPrZKz_ta_QrQi&oP#^d|TO=tnrrdai9YVSzkDN&AnMkTan*3Ry3$v~Eco zeJC<|eqK+>%F622`FSfVG<03;T7Z$lA+-7AO11Nk6B#=Xy9Z`%3fkBCS6rc0eA~f; zhteDF$LVi*vyuPbfy=FR&&^Z9U$W*FZ1|!ZaDQLOtKHY@SU#k!yzlz|{(BQMy)ZkY zYyWt(rkylR`c@q{VOGQsZ3cOdAJ;F`8u|C?ua%smaO&?7fiqUcyr#Fd$X@trFLZ** zX{njx_WWg1?_MQeko8a4vblW^$KCHQPn|jOTQtr2_T4>hQ>Nx#cw2J$)u!@=*%4>* zuI(zZFNu#`9LBSH-d6(|sopz&Grr0+tgDo~{L=iH!Lcy0V`V+%&%P(_*yeNX`NSW= z7ed{%&Ivrer}tvky5~GIqgyY2V<~QxD4%!y#;f&@IXiE#-#xxsD$y+DO&Z6^oaUPc z(w1{+HorUKls936(Ti7;&z63x%(xaNu6<%t+KYMLHDa$QzStLWfc=qXN2j$!vJ{K*n@i%j64JTQ@bt7_w~M*Xw7xPqLa}!|tC2R)Lk<_q56`Ir803 zZsUCMC(A`oDLtN-=Qd$gka>vQtza7{9&K5LSs`#35mCcPL`G>_$I*g%jL*6LL zH+hBsQ7mPMV$NY$$yyL|lOc%n!4g@8-HcmqGfv{pTE?qTxFBx>qf73I^XL5o#VUhV zyezWzKrR=MiU=_C(|zZVEq@H-(bZTuNXg#0+!4~Q>-ASS+KF$UZM67fP(kkL>gTe~ HDWM4f55=#e literal 0 HcmV?d00001 diff --git a/tests/scripts/gen-tests.py b/tests/scripts/gen-tests.py index 60155a01..fb05b98b 100755 --- a/tests/scripts/gen-tests.py +++ b/tests/scripts/gen-tests.py @@ -1,11 +1,124 @@ #!/usr/bin/env python3 import argparse +import shutil from common import SVG_DIR, ROOT, TestFile from pathlib import Path OUT_PATH = ROOT / "src" / "test.rs" +NO_RELATIVE_PATHS = "no relative paths supported" +INVESTIGATE = "need to investigate" +NO_REFLECT = "spreadMethod reflect not supported" +NO_REPEAT = "spreadMethod repeat not supported" +NO_SUPPORT = "not supported in PDF" +NO_FONT = "font is not part of test suite yet" + +IGNORE_TESTS = { + # The following test cases still need to be investigated + "svg/resvg/filters/fePointLight/primitiveUnits=objectBoundingBox.svg": INVESTIGATE, + "svg/resvg/filters/filter/with-mask-on-parent.svg": INVESTIGATE, + "svg/resvg/masking/mask/recursive-on-child.svg": INVESTIGATE, + "svg/resvg/paint-servers/pattern/nested-objectBoundingBox.svg": INVESTIGATE, + "svg/resvg/paint-servers/radialGradient/fr=0.2.svg": INVESTIGATE, + "svg/resvg/paint-servers/radialGradient/fr=0.5.svg": INVESTIGATE, + "svg/resvg/paint-servers/radialGradient/fr=0.7.svg": INVESTIGATE, + "svg/resvg/paint-servers/radialGradient/fr=-1.svg": INVESTIGATE, + "svg/resvg/paint-servers/radialGradient/invalid-gradientUnits.svg": INVESTIGATE, + "svg/resvg/painting/stroke-dasharray/n-0.svg": INVESTIGATE, + "svg/resvg/structure/image/image-with-float-size-scaling.svg": INVESTIGATE, + "svg/resvg/structure/svg/funcIRI-parsing.svg": INVESTIGATE, + "svg/resvg/structure/svg/funcIRI-with-invalid-characters.svg": INVESTIGATE, + "svg/resvg/text/font-weight/bolder-with-clamping.svg": INVESTIGATE, + "svg/resvg/text/font-weight/lighter-with-clamping.svg": INVESTIGATE, + "svg/resvg/text/font-weight/lighter-without-parent.svg": INVESTIGATE, + "svg/resvg/text/letter-spacing/mixed-scripts.svg": INVESTIGATE, + "svg/resvg/text/text/compound-emojis.svg": INVESTIGATE, + "svg/resvg/text/text/compound-emojis-and-coordinates-list.svg": INVESTIGATE, + "svg/resvg/text/text/emojis.svg": INVESTIGATE, + + # The following test cases need to be excluded due to technical reasons + "svg/resvg/filters/feMorphology/huge-radius.svg": "will timeout CI", + "svg/resvg/filters/filter/huge-region.svg": "will sigkill", + "svg/resvg/structure/svg/negative-size.svg": "invalid size", + "svg/resvg/structure/svg/no-size.svg": "invalid size", + "svg/resvg/structure/svg/zero-size.svg": "invalid size", + "svg/resvg/structure/svg/not-UTF-8-encoding.svg": "invalid encoding", + "svg/resvg/filters/feImage/simple-case.svg": NO_RELATIVE_PATHS, + "svg/resvg/painting/marker/with-an-image-child.svg": NO_RELATIVE_PATHS, + "svg/resvg/painting/mix-blend-mode/color-dodge.svg": "pdfium bug", + "svg/resvg/painting/stroke-linecap/zero-length-path-with-round.svg": NO_SUPPORT, + "svg/resvg/painting/stroke-linecap/zero-length-path-with-square.svg": NO_SUPPORT, + "svg/resvg/painting/stroke-linejoin/miter-clip.svg": NO_SUPPORT, + "svg/resvg/structure/image/external-gif.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/external-jpeg.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/external-png.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/external-svg.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/external-svg-with-transform.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/external-svgz.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/float-size.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-height.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-height-on-svg.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-width.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-width-on-svg.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-width-and-height.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/no-width-and-height-on-svg.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/raster-image-and-size-with-odd-numbers.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/recursive-1.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/recursive-2.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/width-and-height-set-to-auto.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/zero-height.svg": NO_RELATIVE_PATHS, + "svg/resvg/structure/image/zero-width.svg": NO_RELATIVE_PATHS, + + # The following test cases are not implemented in svg2pdf yet + "svg/resvg/paint-servers/linearGradient/attributes-via-xlink-href-complex-order.svg": NO_REFLECT, + "svg/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-radialGradient.svg": NO_REFLECT, + "svg/resvg/paint-servers/linearGradient/spreadMethod=reflect.svg": NO_REFLECT, + "svg/resvg/paint-servers/linearGradient/spreadMethod=repeat.svg": NO_REPEAT, + "svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href-complex-order.svg":NO_REFLECT, + "svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-linearGradient.svg": NO_REFLECT, + "svg/resvg/paint-servers/radialGradient/spreadMethod=reflect.svg": NO_REFLECT, + "svg/resvg/paint-servers/radialGradient/spreadMethod=repeat.svg": NO_REPEAT, + + # The following test cases don't work yet because we are not including + # all necessary fonts. + "svg/resvg/text/alignment-baseline/hanging-on-vertical.svg": NO_FONT, + "svg/resvg/text/direction/rtl.svg": NO_FONT, + "svg/resvg/text/direction/rtl-with-vertical-writing-mode.svg": NO_FONT, + "svg/resvg/text/dominant-baseline/hanging.svg": NO_FONT, + "svg/resvg/text/dominant-baseline/use-script.svg": NO_FONT, + "svg/resvg/text/font/simple-case.svg": NO_FONT, + "svg/resvg/text/font-family/bold-sans-serif.svg": NO_FONT, + "svg/resvg/text/font-family/cursive.svg": NO_FONT, + "svg/resvg/text/font-family/fallback-1.svg": NO_FONT, + "svg/resvg/text/font-family/fantasy.svg": NO_FONT, + "svg/resvg/text/font-family/monospace.svg": NO_FONT, + "svg/resvg/text/font-family/sans-serif.svg": NO_FONT, + "svg/resvg/text/font-family/serif.svg": NO_FONT, + "svg/resvg/text/font-family/source-sans-pro.svg": NO_FONT, + "svg/resvg/text/font-kerning/arabic-script.svg": NO_FONT, + "svg/resvg/text/letter-spacing/non-ASCII-character.svg": NO_FONT, + "svg/resvg/text/letter-spacing/on-Arabic.svg": NO_FONT, + "svg/resvg/text/text/bidi-reordering.svg": NO_FONT, + "svg/resvg/text/text/fill-rule=evenodd.svg": NO_FONT, + "svg/resvg/text/text/rotate-on-Arabic.svg": NO_FONT, + "svg/resvg/text/text/x-and-y-with-multiple-values-and-arabic-text.svg": NO_FONT, + "svg/resvg/text/text/xml-lang=ja.svg": NO_FONT, + "svg/resvg/text/text-anchor/on-tspan-with-arabic.svg": NO_FONT, + "svg/resvg/text/textLength/arabic.svg": NO_FONT, + "svg/resvg/text/textLength/arabic-with-lengthAdjust.svg": NO_FONT, + "svg/resvg/text/textPath/complex.svg": NO_FONT, + "svg/resvg/text/textPath/writing-mode=tb.svg": NO_FONT, + "svg/resvg/text/tspan/bidi-reordering.svg": NO_FONT, + "svg/resvg/text/unicode-bidi/bidi-override.svg": NO_FONT, + "svg/resvg/text/writing-mode/arabic-with-rl.svg": NO_FONT, + "svg/resvg/text/writing-mode/japanese-with-tb.svg": NO_FONT, + "svg/resvg/text/writing-mode/mixed-languages-with-tb.svg": NO_FONT, + "svg/resvg/text/writing-mode/mixed-languages-with-tb-and-underline.svg": NO_FONT, + "svg/resvg/text/writing-mode/tb-and-punctuation.svg": NO_FONT, + "svg/resvg/text/writing-mode/tb-with-rotate.svg": NO_FONT, + "svg/resvg/text/writing-mode/tb-with-rotate-and-underline.svg": NO_FONT, +} def main(): parser = argparse.ArgumentParser( @@ -33,7 +146,11 @@ def main(): .replace("#", "") ) - if not test_file.has_ref(): + if str(test_file.svg_path()) in IGNORE_TESTS: + test_string += f"// {IGNORE_TESTS[str(test_file.svg_path())]}\n" + test_string += "#[ignore] " + elif not test_file.has_ref(): + test_string += f"// unknown reason\n" test_string += "#[ignore] " test_string += "#[test] " diff --git a/tests/scripts/sync-tests.py b/tests/scripts/sync-tests.py index 46e2ac14..0ac71e02 100644 --- a/tests/scripts/sync-tests.py +++ b/tests/scripts/sync-tests.py @@ -7,7 +7,7 @@ SVG2PDF_SVG_DIR = Path("../svg/resvg") SVG2PDF_REF_DIR = Path("../ref/resvg") -resvg_svg_files = set([p.relative_to(RESVG_SVG_DIR) for p in RESVG_SVG_DIR.rglob("*")]) +resvg_svg_files = set([p.relative_to(RESVG_SVG_DIR) for p in RESVG_SVG_DIR.rglob("*") if p.suffix == ".svg"]) svg2pdf_svg_files = set([p.relative_to(SVG2PDF_SVG_DIR) for p in SVG2PDF_SVG_DIR.rglob("*")]) svg2pdf_ref_files = set([p.relative_to(SVG2PDF_REF_DIR) for p in SVG2PDF_REF_DIR.rglob("*")]) @@ -15,18 +15,22 @@ def sync_existing_tests(): print("Sync tests...") for file in resvg_svg_files: - if file.is_file() and file.suffix == ".svg": - with open(RESVG_SVG_DIR / file, "r", encoding="utf-8") as resvg_file: - content = resvg_file.read() - - path = SVG2PDF_SVG_DIR / file - print(path) - print(path.parent) - if not path.parent.exists(): - path.parent.mkdir(parents=True, exist_ok=True) - - with open(path, "w+") as svg2pdf_file: - svg2pdf_file.write(content) + absolute_path = RESVG_SVG_DIR / file + assert absolute_path.is_file() + + if str(file) == "structure/svg/not-UTF-8-encoding.svg": + continue + + with open(absolute_path, "r") as resvg_file: + content = resvg_file.read() + + path = SVG2PDF_SVG_DIR / file + if not path.parent.exists(): + path.parent.mkdir(parents=True, exist_ok=True) + + with open(path, "w+") as svg2pdf_file: + svg2pdf_file.write(content) + def find_superfluous_tests(): diff --git a/tests/src/lib.rs b/tests/src/lib.rs index db23ca21..82a414c0 100644 --- a/tests/src/lib.rs +++ b/tests/src/lib.rs @@ -106,9 +106,8 @@ fn is_pix_diff(pixel1: &Rgba, pixel2: &Rgba) -> bool { /// Runs a single test instance. pub fn run_test(svg_path: &str, ref_path: &str, diff_path: &str, replace: bool) -> i32 { - let expected_image = Reader::open(ref_path).unwrap().decode().unwrap().into_rgba8(); - let (_, actual_image) = convert_svg(&fs::read_to_string(svg_path).unwrap()); + let expected_image = Reader::open(ref_path).unwrap().decode().unwrap().into_rgba8(); let width = max(expected_image.width(), actual_image.width()); let height = max(expected_image.height(), actual_image.height()); diff --git a/tests/src/test.rs b/tests/src/test.rs index 3d6712ce..dfe58780 100644 --- a/tests/src/test.rs +++ b/tests/src/test.rs @@ -5,10 +5,10 @@ #[allow(unused_imports)] use crate::run_test; -#[ignore] #[test] fn resvg_filters_feDisplacementMap_simple_case() {assert_eq!(run_test("svg/resvg/filters/feDisplacementMap/simple-case.svg", "ref/resvg/filters/feDisplacementMap/simple-case.png", "diff/resvg/filters/feDisplacementMap/simple-case.png", false), 0)} +#[test] fn resvg_filters_feDisplacementMap_simple_case() {assert_eq!(run_test("svg/resvg/filters/feDisplacementMap/simple-case.svg", "ref/resvg/filters/feDisplacementMap/simple-case.png", "diff/resvg/filters/feDisplacementMap/simple-case.png", false), 0)} #[test] fn resvg_filters_feOffset_negative_offset() {assert_eq!(run_test("svg/resvg/filters/feOffset/negative-offset.svg", "ref/resvg/filters/feOffset/negative-offset.png", "diff/resvg/filters/feOffset/negative-offset.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feOffset_fractional_offset() {assert_eq!(run_test("svg/resvg/filters/feOffset/fractional-offset.svg", "ref/resvg/filters/feOffset/fractional-offset.png", "diff/resvg/filters/feOffset/fractional-offset.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feOffset_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feOffset/complex-transform.svg", "ref/resvg/filters/feOffset/complex-transform.png", "diff/resvg/filters/feOffset/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feOffset_fractional_offset() {assert_eq!(run_test("svg/resvg/filters/feOffset/fractional-offset.svg", "ref/resvg/filters/feOffset/fractional-offset.png", "diff/resvg/filters/feOffset/fractional-offset.png", false), 0)} +#[test] fn resvg_filters_feOffset_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feOffset/complex-transform.svg", "ref/resvg/filters/feOffset/complex-transform.png", "diff/resvg/filters/feOffset/complex-transform.png", false), 0)} #[test] fn resvg_filters_feOffset_no_offset() {assert_eq!(run_test("svg/resvg/filters/feOffset/no-offset.svg", "ref/resvg/filters/feOffset/no-offset.png", "diff/resvg/filters/feOffset/no-offset.png", false), 0)} #[test] fn resvg_filters_feOffset_with_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/feOffset/with-primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/feOffset/with-primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/feOffset/with-primitiveUnits=objectBoundingBox.png", false), 0)} #[test] fn resvg_filters_feOffset_simple_case() {assert_eq!(run_test("svg/resvg/filters/feOffset/simple-case.svg", "ref/resvg/filters/feOffset/simple-case.png", "diff/resvg/filters/feOffset/simple-case.png", false), 0)} @@ -22,7 +22,7 @@ use crate::run_test; #[test] fn resvg_filters_feColorMatrix_type_hueRotate() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=hueRotate.svg", "ref/resvg/filters/feColorMatrix/type=hueRotate.png", "diff/resvg/filters/feColorMatrix/type=hueRotate.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_without_attributes() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/without-attributes.svg", "ref/resvg/filters/feColorMatrix/without-attributes.png", "diff/resvg/filters/feColorMatrix/without-attributes.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_matrix_without_values() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=matrix-without-values.svg", "ref/resvg/filters/feColorMatrix/type=matrix-without-values.png", "diff/resvg/filters/feColorMatrix/type=matrix-without-values.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feColorMatrix_type_saturate_with_negative_coefficient() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.svg", "ref/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png", "diff/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png", false), 0)} +#[test] fn resvg_filters_feColorMatrix_type_saturate_with_negative_coefficient() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.svg", "ref/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png", "diff/resvg/filters/feColorMatrix/type=saturate-with-negative-coefficient.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_luminanceToAlpha() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=luminanceToAlpha.svg", "ref/resvg/filters/feColorMatrix/type=luminanceToAlpha.png", "diff/resvg/filters/feColorMatrix/type=luminanceToAlpha.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_matrix_with_too_many_values() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=matrix-with-too-many-values.svg", "ref/resvg/filters/feColorMatrix/type=matrix-with-too-many-values.png", "diff/resvg/filters/feColorMatrix/type=matrix-with-too-many-values.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_matrix_with_non_normalized_values() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=matrix-with-non-normalized-values.svg", "ref/resvg/filters/feColorMatrix/type=matrix-with-non-normalized-values.png", "diff/resvg/filters/feColorMatrix/type=matrix-with-non-normalized-values.png", false), 0)} @@ -30,7 +30,7 @@ use crate::run_test; #[test] fn resvg_filters_feColorMatrix_without_a_type() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/without-a-type.svg", "ref/resvg/filters/feColorMatrix/without-a-type.png", "diff/resvg/filters/feColorMatrix/without-a-type.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_matrix_with_empty_values() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=matrix-with-empty-values.svg", "ref/resvg/filters/feColorMatrix/type=matrix-with-empty-values.png", "diff/resvg/filters/feColorMatrix/type=matrix-with-empty-values.png", false), 0)} #[test] fn resvg_filters_feColorMatrix_type_matrix_with_not_enough_values() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=matrix-with-not-enough-values.svg", "ref/resvg/filters/feColorMatrix/type=matrix-with-not-enough-values.png", "diff/resvg/filters/feColorMatrix/type=matrix-with-not-enough-values.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feColorMatrix_type_saturate_with_a_large_coefficient() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.svg", "ref/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.png", "diff/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.png", false), 0)} +#[test] fn resvg_filters_feColorMatrix_type_saturate_with_a_large_coefficient() {assert_eq!(run_test("svg/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.svg", "ref/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.png", "diff/resvg/filters/feColorMatrix/type=saturate-with-a-large-coefficient.png", false), 0)} #[test] fn resvg_filters_feBlend_with_subregion_on_input_2() {assert_eq!(run_test("svg/resvg/filters/feBlend/with-subregion-on-input-2.svg", "ref/resvg/filters/feBlend/with-subregion-on-input-2.png", "diff/resvg/filters/feBlend/with-subregion-on-input-2.png", false), 0)} #[test] fn resvg_filters_feBlend_mode_darken() {assert_eq!(run_test("svg/resvg/filters/feBlend/mode=darken.svg", "ref/resvg/filters/feBlend/mode=darken.png", "diff/resvg/filters/feBlend/mode=darken.png", false), 0)} #[test] fn resvg_filters_feBlend_with_subregion_on_input_1() {assert_eq!(run_test("svg/resvg/filters/feBlend/with-subregion-on-input-1.svg", "ref/resvg/filters/feBlend/with-subregion-on-input-1.png", "diff/resvg/filters/feBlend/with-subregion-on-input-1.png", false), 0)} @@ -97,7 +97,7 @@ use crate::run_test; #[test] fn resvg_filters_feComposite_default_operator() {assert_eq!(run_test("svg/resvg/filters/feComposite/default-operator.svg", "ref/resvg/filters/feComposite/default-operator.png", "diff/resvg/filters/feComposite/default-operator.png", false), 0)} #[test] fn resvg_filters_feComposite_operator_arithmetic_with_opacity() {assert_eq!(run_test("svg/resvg/filters/feComposite/operator=arithmetic-with-opacity.svg", "ref/resvg/filters/feComposite/operator=arithmetic-with-opacity.png", "diff/resvg/filters/feComposite/operator=arithmetic-with-opacity.png", false), 0)} #[test] fn resvg_filters_filter_functions_two_drop_shadow_function() {assert_eq!(run_test("svg/resvg/filters/filter-functions/two-drop-shadow-function.svg", "ref/resvg/filters/filter-functions/two-drop-shadow-function.png", "diff/resvg/filters/filter-functions/two-drop-shadow-function.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_functions_two_exact_urls() {assert_eq!(run_test("svg/resvg/filters/filter-functions/two-exact-urls.svg", "ref/resvg/filters/filter-functions/two-exact-urls.png", "diff/resvg/filters/filter-functions/two-exact-urls.png", false), 0)} +#[test] fn resvg_filters_filter_functions_two_exact_urls() {assert_eq!(run_test("svg/resvg/filters/filter-functions/two-exact-urls.svg", "ref/resvg/filters/filter-functions/two-exact-urls.png", "diff/resvg/filters/filter-functions/two-exact-urls.png", false), 0)} #[test] fn resvg_filters_filter_functions_color_adjust_functions_0percent() {assert_eq!(run_test("svg/resvg/filters/filter-functions/color-adjust-functions-0percent.svg", "ref/resvg/filters/filter-functions/color-adjust-functions-0percent.png", "diff/resvg/filters/filter-functions/color-adjust-functions-0percent.png", false), 0)} #[test] fn resvg_filters_filter_functions_hue_rotate_function_999deg() {assert_eq!(run_test("svg/resvg/filters/filter-functions/hue-rotate-function-999deg.svg", "ref/resvg/filters/filter-functions/hue-rotate-function-999deg.png", "diff/resvg/filters/filter-functions/hue-rotate-function-999deg.png", false), 0)} #[test] fn resvg_filters_filter_functions_hue_rotate_function_default_value() {assert_eq!(run_test("svg/resvg/filters/filter-functions/hue-rotate-function-default-value.svg", "ref/resvg/filters/filter-functions/hue-rotate-function-default-value.png", "diff/resvg/filters/filter-functions/hue-rotate-function-default-value.png", false), 0)} @@ -139,6 +139,7 @@ use crate::run_test; #[test] fn resvg_filters_filter_functions_hue_rotate_function_0_25turn() {assert_eq!(run_test("svg/resvg/filters/filter-functions/hue-rotate-function-0.25turn.svg", "ref/resvg/filters/filter-functions/hue-rotate-function-0.25turn.png", "diff/resvg/filters/filter-functions/hue-rotate-function-0.25turn.png", false), 0)} #[test] fn resvg_filters_filter_functions_drop_shadow_function_mm_values() {assert_eq!(run_test("svg/resvg/filters/filter-functions/drop-shadow-function-mm-values.svg", "ref/resvg/filters/filter-functions/drop-shadow-function-mm-values.png", "diff/resvg/filters/filter-functions/drop-shadow-function-mm-values.png", false), 0)} #[test] fn resvg_filters_filter_functions_blur_function_negative_value() {assert_eq!(run_test("svg/resvg/filters/filter-functions/blur-function-negative-value.svg", "ref/resvg/filters/filter-functions/blur-function-negative-value.png", "diff/resvg/filters/filter-functions/blur-function-negative-value.png", false), 0)} +#[test] fn resvg_filters_feTile_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feTile/complex-transform.svg", "ref/resvg/filters/feTile/complex-transform.png", "diff/resvg/filters/feTile/complex-transform.png", false), 0)} #[test] fn resvg_filters_feTile_empty_region() {assert_eq!(run_test("svg/resvg/filters/feTile/empty-region.svg", "ref/resvg/filters/feTile/empty-region.png", "diff/resvg/filters/feTile/empty-region.png", false), 0)} #[test] fn resvg_filters_feTile_simple_case() {assert_eq!(run_test("svg/resvg/filters/feTile/simple-case.svg", "ref/resvg/filters/feTile/simple-case.png", "diff/resvg/filters/feTile/simple-case.png", false), 0)} #[test] fn resvg_filters_feTile_with_region() {assert_eq!(run_test("svg/resvg/filters/feTile/with-region.svg", "ref/resvg/filters/feTile/with-region.png", "diff/resvg/filters/feTile/with-region.png", false), 0)} @@ -149,7 +150,7 @@ use crate::run_test; #[test] fn resvg_filters_feGaussianBlur_stdDeviation_with_two_values() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/stdDeviation-with-two-values.svg", "ref/resvg/filters/feGaussianBlur/stdDeviation-with-two-values.png", "diff/resvg/filters/feGaussianBlur/stdDeviation-with-two-values.png", false), 0)} #[test] fn resvg_filters_feGaussianBlur_small_stdDeviation() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/small-stdDeviation.svg", "ref/resvg/filters/feGaussianBlur/small-stdDeviation.png", "diff/resvg/filters/feGaussianBlur/small-stdDeviation.png", false), 0)} #[test] fn resvg_filters_feGaussianBlur_stdDeviation_5_0() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/stdDeviation=5-0.svg", "ref/resvg/filters/feGaussianBlur/stdDeviation=5-0.png", "diff/resvg/filters/feGaussianBlur/stdDeviation=5-0.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feGaussianBlur_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/complex-transform.svg", "ref/resvg/filters/feGaussianBlur/complex-transform.png", "diff/resvg/filters/feGaussianBlur/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feGaussianBlur_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/complex-transform.svg", "ref/resvg/filters/feGaussianBlur/complex-transform.png", "diff/resvg/filters/feGaussianBlur/complex-transform.png", false), 0)} #[test] fn resvg_filters_feGaussianBlur_stdDeviation_0_5() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/stdDeviation=0-5.svg", "ref/resvg/filters/feGaussianBlur/stdDeviation=0-5.png", "diff/resvg/filters/feGaussianBlur/stdDeviation=0-5.png", false), 0)} #[test] fn resvg_filters_feGaussianBlur_negative_stdDeviation() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/negative-stdDeviation.svg", "ref/resvg/filters/feGaussianBlur/negative-stdDeviation.png", "diff/resvg/filters/feGaussianBlur/negative-stdDeviation.png", false), 0)} #[test] fn resvg_filters_feGaussianBlur_simple_case() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/simple-case.svg", "ref/resvg/filters/feGaussianBlur/simple-case.png", "diff/resvg/filters/feGaussianBlur/simple-case.png", false), 0)} @@ -160,7 +161,7 @@ use crate::run_test; #[test] fn resvg_filters_feGaussianBlur_tiny_stdDeviation() {assert_eq!(run_test("svg/resvg/filters/feGaussianBlur/tiny-stdDeviation.svg", "ref/resvg/filters/feGaussianBlur/tiny-stdDeviation.png", "diff/resvg/filters/feGaussianBlur/tiny-stdDeviation.png", false), 0)} #[test] fn resvg_filters_feTurbulence_baseFrequency__0_05() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=-0.05.svg", "ref/resvg/filters/feTurbulence/baseFrequency=-0.05.png", "diff/resvg/filters/feTurbulence/baseFrequency=-0.05.png", false), 0)} #[test] fn resvg_filters_feTurbulence_type_fractalNoise() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/type=fractalNoise.svg", "ref/resvg/filters/feTurbulence/type=fractalNoise.png", "diff/resvg/filters/feTurbulence/type=fractalNoise.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feTurbulence_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/complex-transform.svg", "ref/resvg/filters/feTurbulence/complex-transform.png", "diff/resvg/filters/feTurbulence/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feTurbulence_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/complex-transform.svg", "ref/resvg/filters/feTurbulence/complex-transform.png", "diff/resvg/filters/feTurbulence/complex-transform.png", false), 0)} #[test] fn resvg_filters_feTurbulence_numOctaves__1() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/numOctaves=-1.svg", "ref/resvg/filters/feTurbulence/numOctaves=-1.png", "diff/resvg/filters/feTurbulence/numOctaves=-1.png", false), 0)} #[test] fn resvg_filters_feTurbulence_seed_1_5() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/seed=1.5.svg", "ref/resvg/filters/feTurbulence/seed=1.5.png", "diff/resvg/filters/feTurbulence/seed=1.5.png", false), 0)} #[test] fn resvg_filters_feTurbulence_no_attributes() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/no-attributes.svg", "ref/resvg/filters/feTurbulence/no-attributes.png", "diff/resvg/filters/feTurbulence/no-attributes.png", false), 0)} @@ -169,7 +170,7 @@ use crate::run_test; #[test] fn resvg_filters_feTurbulence_numOctaves_5() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/numOctaves=5.svg", "ref/resvg/filters/feTurbulence/numOctaves=5.png", "diff/resvg/filters/feTurbulence/numOctaves=5.png", false), 0)} #[test] fn resvg_filters_feTurbulence_numOctaves_0() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/numOctaves=0.svg", "ref/resvg/filters/feTurbulence/numOctaves=0.png", "diff/resvg/filters/feTurbulence/numOctaves=0.png", false), 0)} #[test] fn resvg_filters_feTurbulence_seed__20() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/seed=-20.svg", "ref/resvg/filters/feTurbulence/seed=-20.png", "diff/resvg/filters/feTurbulence/seed=-20.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feTurbulence_stitchTiles_stitch() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/stitchTiles=stitch.svg", "ref/resvg/filters/feTurbulence/stitchTiles=stitch.png", "diff/resvg/filters/feTurbulence/stitchTiles=stitch.png", false), 0)} +#[test] fn resvg_filters_feTurbulence_stitchTiles_stitch() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/stitchTiles=stitch.svg", "ref/resvg/filters/feTurbulence/stitchTiles=stitch.png", "diff/resvg/filters/feTurbulence/stitchTiles=stitch.png", false), 0)} #[test] fn resvg_filters_feTurbulence_baseFrequency_0_05_0() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=0.05-0.svg", "ref/resvg/filters/feTurbulence/baseFrequency=0.05-0.png", "diff/resvg/filters/feTurbulence/baseFrequency=0.05-0.png", false), 0)} #[test] fn resvg_filters_feTurbulence_seed_20() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/seed=20.svg", "ref/resvg/filters/feTurbulence/seed=20.png", "diff/resvg/filters/feTurbulence/seed=20.png", false), 0)} #[test] fn resvg_filters_feTurbulence_baseFrequency_0_05_0_05() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=0.05-0.05.svg", "ref/resvg/filters/feTurbulence/baseFrequency=0.05-0.05.png", "diff/resvg/filters/feTurbulence/baseFrequency=0.05-0.05.png", false), 0)} @@ -177,32 +178,33 @@ use crate::run_test; #[test] fn resvg_filters_feTurbulence_baseFrequency_0_01() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=0.01.svg", "ref/resvg/filters/feTurbulence/baseFrequency=0.01.png", "diff/resvg/filters/feTurbulence/baseFrequency=0.01.png", false), 0)} #[test] fn resvg_filters_feTurbulence_baseFrequency_0_05_0_01() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=0.05-0.01.svg", "ref/resvg/filters/feTurbulence/baseFrequency=0.05-0.01.png", "diff/resvg/filters/feTurbulence/baseFrequency=0.05-0.01.png", false), 0)} #[test] fn resvg_filters_feTurbulence_baseFrequency_0_05__0_01() {assert_eq!(run_test("svg/resvg/filters/feTurbulence/baseFrequency=0.05--0.01.svg", "ref/resvg/filters/feTurbulence/baseFrequency=0.05--0.01.png", "diff/resvg/filters/feTurbulence/baseFrequency=0.05--0.01.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_filter() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-filter.svg", "ref/resvg/filters/enable-background/with-filter.png", "diff/resvg/filters/enable-background/with-filter.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_filter_on_the_same_element() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-filter-on-the-same-element.svg", "ref/resvg/filters/enable-background/with-filter-on-the-same-element.png", "diff/resvg/filters/enable-background/with-filter-on-the-same-element.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_opacity_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-1.svg", "ref/resvg/filters/enable-background/with-opacity-1.png", "diff/resvg/filters/enable-background/with-opacity-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_accumulate() {assert_eq!(run_test("svg/resvg/filters/enable-background/accumulate.svg", "ref/resvg/filters/enable-background/accumulate.png", "diff/resvg/filters/enable-background/accumulate.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_opacity_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-2.svg", "ref/resvg/filters/enable-background/with-opacity-2.png", "diff/resvg/filters/enable-background/with-opacity-2.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_opacity_3() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-3.svg", "ref/resvg/filters/enable-background/with-opacity-3.png", "diff/resvg/filters/enable-background/with-opacity-3.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_stop_on_the_first_new_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/stop-on-the-first-new-1.svg", "ref/resvg/filters/enable-background/stop-on-the-first-new-1.png", "diff/resvg/filters/enable-background/stop-on-the-first-new-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_stop_on_the_first_new_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/stop-on-the-first-new-2.svg", "ref/resvg/filters/enable-background/stop-on-the-first-new-2.png", "diff/resvg/filters/enable-background/stop-on-the-first-new-2.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_opacity_4() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-4.svg", "ref/resvg/filters/enable-background/with-opacity-4.png", "diff/resvg/filters/enable-background/with-opacity-4.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_accumulate_with_new() {assert_eq!(run_test("svg/resvg/filters/enable-background/accumulate-with-new.svg", "ref/resvg/filters/enable-background/accumulate-with-new.png", "diff/resvg/filters/enable-background/accumulate-with-new.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_new_with_invalid_region_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-1.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-1.png", "diff/resvg/filters/enable-background/new-with-invalid-region-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_new_with_invalid_region_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-2.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-2.png", "diff/resvg/filters/enable-background/new-with-invalid-region-2.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_new_with_invalid_region_3() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-3.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-3.png", "diff/resvg/filters/enable-background/new-with-invalid-region-3.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_mask() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-mask.svg", "ref/resvg/filters/enable-background/with-mask.png", "diff/resvg/filters/enable-background/with-mask.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_inherit() {assert_eq!(run_test("svg/resvg/filters/enable-background/inherit.svg", "ref/resvg/filters/enable-background/inherit.png", "diff/resvg/filters/enable-background/inherit.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_clip_path() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-clip-path.svg", "ref/resvg/filters/enable-background/with-clip-path.png", "diff/resvg/filters/enable-background/with-clip-path.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_new() {assert_eq!(run_test("svg/resvg/filters/enable-background/new.svg", "ref/resvg/filters/enable-background/new.png", "diff/resvg/filters/enable-background/new.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_filter_on_shape() {assert_eq!(run_test("svg/resvg/filters/enable-background/filter-on-shape.svg", "ref/resvg/filters/enable-background/filter-on-shape.png", "diff/resvg/filters/enable-background/filter-on-shape.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_shapes_after_filter() {assert_eq!(run_test("svg/resvg/filters/enable-background/shapes-after-filter.svg", "ref/resvg/filters/enable-background/shapes-after-filter.png", "diff/resvg/filters/enable-background/shapes-after-filter.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_with_transform() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-transform.svg", "ref/resvg/filters/enable-background/with-transform.png", "diff/resvg/filters/enable-background/with-transform.png", false), 0)} -#[ignore] #[test] fn resvg_filters_enable_background_new_with_region() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-region.svg", "ref/resvg/filters/enable-background/new-with-region.png", "diff/resvg/filters/enable-background/new-with-region.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_filter() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-filter.svg", "ref/resvg/filters/enable-background/with-filter.png", "diff/resvg/filters/enable-background/with-filter.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_filter_on_the_same_element() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-filter-on-the-same-element.svg", "ref/resvg/filters/enable-background/with-filter-on-the-same-element.png", "diff/resvg/filters/enable-background/with-filter-on-the-same-element.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_opacity_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-1.svg", "ref/resvg/filters/enable-background/with-opacity-1.png", "diff/resvg/filters/enable-background/with-opacity-1.png", false), 0)} +#[test] fn resvg_filters_enable_background_accumulate() {assert_eq!(run_test("svg/resvg/filters/enable-background/accumulate.svg", "ref/resvg/filters/enable-background/accumulate.png", "diff/resvg/filters/enable-background/accumulate.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_opacity_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-2.svg", "ref/resvg/filters/enable-background/with-opacity-2.png", "diff/resvg/filters/enable-background/with-opacity-2.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_opacity_3() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-3.svg", "ref/resvg/filters/enable-background/with-opacity-3.png", "diff/resvg/filters/enable-background/with-opacity-3.png", false), 0)} +#[test] fn resvg_filters_enable_background_stop_on_the_first_new_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/stop-on-the-first-new-1.svg", "ref/resvg/filters/enable-background/stop-on-the-first-new-1.png", "diff/resvg/filters/enable-background/stop-on-the-first-new-1.png", false), 0)} +#[test] fn resvg_filters_enable_background_stop_on_the_first_new_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/stop-on-the-first-new-2.svg", "ref/resvg/filters/enable-background/stop-on-the-first-new-2.png", "diff/resvg/filters/enable-background/stop-on-the-first-new-2.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_opacity_4() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-opacity-4.svg", "ref/resvg/filters/enable-background/with-opacity-4.png", "diff/resvg/filters/enable-background/with-opacity-4.png", false), 0)} +#[test] fn resvg_filters_enable_background_accumulate_with_new() {assert_eq!(run_test("svg/resvg/filters/enable-background/accumulate-with-new.svg", "ref/resvg/filters/enable-background/accumulate-with-new.png", "diff/resvg/filters/enable-background/accumulate-with-new.png", false), 0)} +#[test] fn resvg_filters_enable_background_new_with_invalid_region_1() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-1.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-1.png", "diff/resvg/filters/enable-background/new-with-invalid-region-1.png", false), 0)} +#[test] fn resvg_filters_enable_background_new_with_invalid_region_2() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-2.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-2.png", "diff/resvg/filters/enable-background/new-with-invalid-region-2.png", false), 0)} +#[test] fn resvg_filters_enable_background_new_with_invalid_region_3() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-invalid-region-3.svg", "ref/resvg/filters/enable-background/new-with-invalid-region-3.png", "diff/resvg/filters/enable-background/new-with-invalid-region-3.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_mask() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-mask.svg", "ref/resvg/filters/enable-background/with-mask.png", "diff/resvg/filters/enable-background/with-mask.png", false), 0)} +#[test] fn resvg_filters_enable_background_inherit() {assert_eq!(run_test("svg/resvg/filters/enable-background/inherit.svg", "ref/resvg/filters/enable-background/inherit.png", "diff/resvg/filters/enable-background/inherit.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_clip_path() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-clip-path.svg", "ref/resvg/filters/enable-background/with-clip-path.png", "diff/resvg/filters/enable-background/with-clip-path.png", false), 0)} +#[test] fn resvg_filters_enable_background_new() {assert_eq!(run_test("svg/resvg/filters/enable-background/new.svg", "ref/resvg/filters/enable-background/new.png", "diff/resvg/filters/enable-background/new.png", false), 0)} +#[test] fn resvg_filters_enable_background_filter_on_shape() {assert_eq!(run_test("svg/resvg/filters/enable-background/filter-on-shape.svg", "ref/resvg/filters/enable-background/filter-on-shape.png", "diff/resvg/filters/enable-background/filter-on-shape.png", false), 0)} +#[test] fn resvg_filters_enable_background_shapes_after_filter() {assert_eq!(run_test("svg/resvg/filters/enable-background/shapes-after-filter.svg", "ref/resvg/filters/enable-background/shapes-after-filter.png", "diff/resvg/filters/enable-background/shapes-after-filter.png", false), 0)} +#[test] fn resvg_filters_enable_background_with_transform() {assert_eq!(run_test("svg/resvg/filters/enable-background/with-transform.svg", "ref/resvg/filters/enable-background/with-transform.png", "diff/resvg/filters/enable-background/with-transform.png", false), 0)} +#[test] fn resvg_filters_enable_background_new_with_region() {assert_eq!(run_test("svg/resvg/filters/enable-background/new-with-region.svg", "ref/resvg/filters/enable-background/new-with-region.png", "diff/resvg/filters/enable-background/new-with-region.png", false), 0)} #[test] fn resvg_filters_feMorphology_radius_10_1() {assert_eq!(run_test("svg/resvg/filters/feMorphology/radius=10-1.svg", "ref/resvg/filters/feMorphology/radius=10-1.png", "diff/resvg/filters/feMorphology/radius=10-1.png", false), 0)} #[test] fn resvg_filters_feMorphology_source_with_opacity() {assert_eq!(run_test("svg/resvg/filters/feMorphology/source-with-opacity.svg", "ref/resvg/filters/feMorphology/source-with-opacity.png", "diff/resvg/filters/feMorphology/source-with-opacity.png", false), 0)} #[test] fn resvg_filters_feMorphology_radius_10_0() {assert_eq!(run_test("svg/resvg/filters/feMorphology/radius=10-0.svg", "ref/resvg/filters/feMorphology/radius=10-0.png", "diff/resvg/filters/feMorphology/radius=10-0.png", false), 0)} #[test] fn resvg_filters_feMorphology_empty_radius() {assert_eq!(run_test("svg/resvg/filters/feMorphology/empty-radius.svg", "ref/resvg/filters/feMorphology/empty-radius.png", "diff/resvg/filters/feMorphology/empty-radius.png", false), 0)} #[test] fn resvg_filters_feMorphology_radius_0_5_with_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/feMorphology/radius=0.5-with-objectBoundingBox.svg", "ref/resvg/filters/feMorphology/radius=0.5-with-objectBoundingBox.png", "diff/resvg/filters/feMorphology/radius=0.5-with-objectBoundingBox.png", false), 0)} +// will timeout CI #[ignore] #[test] fn resvg_filters_feMorphology_huge_radius() {assert_eq!(run_test("svg/resvg/filters/feMorphology/huge-radius.svg", "ref/resvg/filters/feMorphology/huge-radius.png", "diff/resvg/filters/feMorphology/huge-radius.png", false), 0)} #[test] fn resvg_filters_feMorphology_operator_dilate() {assert_eq!(run_test("svg/resvg/filters/feMorphology/operator=dilate.svg", "ref/resvg/filters/feMorphology/operator=dilate.png", "diff/resvg/filters/feMorphology/operator=dilate.png", false), 0)} #[test] fn resvg_filters_feMorphology_simple_case() {assert_eq!(run_test("svg/resvg/filters/feMorphology/simple-case.svg", "ref/resvg/filters/feMorphology/simple-case.png", "diff/resvg/filters/feMorphology/simple-case.png", false), 0)} @@ -212,7 +214,7 @@ use crate::run_test; #[test] fn resvg_filters_feMorphology_radius_with_too_many_values() {assert_eq!(run_test("svg/resvg/filters/feMorphology/radius-with-too-many-values.svg", "ref/resvg/filters/feMorphology/radius-with-too-many-values.png", "diff/resvg/filters/feMorphology/radius-with-too-many-values.png", false), 0)} #[test] fn resvg_filters_feMorphology_negative_radius() {assert_eq!(run_test("svg/resvg/filters/feMorphology/negative-radius.svg", "ref/resvg/filters/feMorphology/negative-radius.png", "diff/resvg/filters/feMorphology/negative-radius.png", false), 0)} #[test] fn resvg_filters_feMorphology_zero_radius() {assert_eq!(run_test("svg/resvg/filters/feMorphology/zero-radius.svg", "ref/resvg/filters/feMorphology/zero-radius.png", "diff/resvg/filters/feMorphology/zero-radius.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feMerge_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feMerge/complex-transform.svg", "ref/resvg/filters/feMerge/complex-transform.png", "diff/resvg/filters/feMerge/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feMerge_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feMerge/complex-transform.svg", "ref/resvg/filters/feMerge/complex-transform.png", "diff/resvg/filters/feMerge/complex-transform.png", false), 0)} #[test] fn resvg_filters_feMerge_color_interpolation_filters_linearRGB() {assert_eq!(run_test("svg/resvg/filters/feMerge/color-interpolation-filters=linearRGB.svg", "ref/resvg/filters/feMerge/color-interpolation-filters=linearRGB.png", "diff/resvg/filters/feMerge/color-interpolation-filters=linearRGB.png", false), 0)} #[test] fn resvg_filters_feMerge_color_interpolation_filters_sRGB() {assert_eq!(run_test("svg/resvg/filters/feMerge/color-interpolation-filters=sRGB.svg", "ref/resvg/filters/feMerge/color-interpolation-filters=sRGB.png", "diff/resvg/filters/feMerge/color-interpolation-filters=sRGB.png", false), 0)} #[test] fn resvg_filters_feDropShadow_hsla_color() {assert_eq!(run_test("svg/resvg/filters/feDropShadow/hsla-color.svg", "ref/resvg/filters/feDropShadow/hsla-color.png", "diff/resvg/filters/feDropShadow/hsla-color.png", false), 0)} @@ -229,8 +231,9 @@ use crate::run_test; #[test] fn resvg_filters_feConvolveMatrix_kernelMatrix_with_not_enough_values() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/kernelMatrix-with-not-enough-values.svg", "ref/resvg/filters/feConvolveMatrix/kernelMatrix-with-not-enough-values.png", "diff/resvg/filters/feConvolveMatrix/kernelMatrix-with-not-enough-values.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_order_with_a_negative_value_2() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/order-with-a-negative-value-2.svg", "ref/resvg/filters/feConvolveMatrix/order-with-a-negative-value-2.png", "diff/resvg/filters/feConvolveMatrix/order-with-a-negative-value-2.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_order_0() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/order=0.svg", "ref/resvg/filters/feConvolveMatrix/order=0.png", "diff/resvg/filters/feConvolveMatrix/order=0.png", false), 0)} +#[test] fn resvg_filters_feConvolveMatrix_bias_9999() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/bias=9999.svg", "ref/resvg/filters/feConvolveMatrix/bias=9999.png", "diff/resvg/filters/feConvolveMatrix/bias=9999.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_edgeMode_wrap() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/edgeMode=wrap.svg", "ref/resvg/filters/feConvolveMatrix/edgeMode=wrap.png", "diff/resvg/filters/feConvolveMatrix/edgeMode=wrap.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feConvolveMatrix_edgeMode_wrap_with_matrix_larger_than_target() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.svg", "ref/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png", "diff/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png", false), 0)} +#[test] fn resvg_filters_feConvolveMatrix_edgeMode_wrap_with_matrix_larger_than_target() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.svg", "ref/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png", "diff/resvg/filters/feConvolveMatrix/edgeMode=wrap-with-matrix-larger-than-target.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_divisor_0() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/divisor=0.svg", "ref/resvg/filters/feConvolveMatrix/divisor=0.png", "diff/resvg/filters/feConvolveMatrix/divisor=0.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_targetX_2() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/targetX=2.svg", "ref/resvg/filters/feConvolveMatrix/targetX=2.png", "diff/resvg/filters/feConvolveMatrix/targetX=2.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_kernelMatrix_with_zero_sum_and_no_divisor() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/kernelMatrix-with-zero-sum-and-no-divisor.svg", "ref/resvg/filters/feConvolveMatrix/kernelMatrix-with-zero-sum-and-no-divisor.png", "diff/resvg/filters/feConvolveMatrix/kernelMatrix-with-zero-sum-and-no-divisor.png", false), 0)} @@ -238,13 +241,13 @@ use crate::run_test; #[test] fn resvg_filters_feConvolveMatrix_empty_kernelMatrix() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/empty-kernelMatrix.svg", "ref/resvg/filters/feConvolveMatrix/empty-kernelMatrix.png", "diff/resvg/filters/feConvolveMatrix/empty-kernelMatrix.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_unset_order() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/unset-order.svg", "ref/resvg/filters/feConvolveMatrix/unset-order.png", "diff/resvg/filters/feConvolveMatrix/unset-order.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_targetX_0() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/targetX=0.svg", "ref/resvg/filters/feConvolveMatrix/targetX=0.png", "diff/resvg/filters/feConvolveMatrix/targetX=0.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feConvolveMatrix_bias_0_5() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/bias=0.5.svg", "ref/resvg/filters/feConvolveMatrix/bias=0.5.png", "diff/resvg/filters/feConvolveMatrix/bias=0.5.png", false), 0)} +#[test] fn resvg_filters_feConvolveMatrix_bias_0_5() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/bias=0.5.svg", "ref/resvg/filters/feConvolveMatrix/bias=0.5.png", "diff/resvg/filters/feConvolveMatrix/bias=0.5.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_targetX__1() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/targetX=-1.svg", "ref/resvg/filters/feConvolveMatrix/targetX=-1.png", "diff/resvg/filters/feConvolveMatrix/targetX=-1.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_order_4_4() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/order=4-4.svg", "ref/resvg/filters/feConvolveMatrix/order=4-4.png", "diff/resvg/filters/feConvolveMatrix/order=4-4.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_custom_divisor() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/custom-divisor.svg", "ref/resvg/filters/feConvolveMatrix/custom-divisor.png", "diff/resvg/filters/feConvolveMatrix/custom-divisor.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_no_kernelMatrix() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/no-kernelMatrix.svg", "ref/resvg/filters/feConvolveMatrix/no-kernelMatrix.png", "diff/resvg/filters/feConvolveMatrix/no-kernelMatrix.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_preserveAlpha_true() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/preserveAlpha=true.svg", "ref/resvg/filters/feConvolveMatrix/preserveAlpha=true.png", "diff/resvg/filters/feConvolveMatrix/preserveAlpha=true.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feConvolveMatrix_bias__0_5() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/bias=-0.5.svg", "ref/resvg/filters/feConvolveMatrix/bias=-0.5.png", "diff/resvg/filters/feConvolveMatrix/bias=-0.5.png", false), 0)} +#[test] fn resvg_filters_feConvolveMatrix_bias__0_5() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/bias=-0.5.svg", "ref/resvg/filters/feConvolveMatrix/bias=-0.5.png", "diff/resvg/filters/feConvolveMatrix/bias=-0.5.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_kernelMatrix_with_too_many_values() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/kernelMatrix-with-too-many-values.svg", "ref/resvg/filters/feConvolveMatrix/kernelMatrix-with-too-many-values.png", "diff/resvg/filters/feConvolveMatrix/kernelMatrix-with-too-many-values.png", false), 0)} #[test] fn resvg_filters_feConvolveMatrix_order_4_2() {assert_eq!(run_test("svg/resvg/filters/feConvolveMatrix/order=4-2.svg", "ref/resvg/filters/feConvolveMatrix/order=4-2.png", "diff/resvg/filters/feConvolveMatrix/order=4-2.png", false), 0)} #[test] fn resvg_filters_flood_opacity_simple_case() {assert_eq!(run_test("svg/resvg/filters/flood-opacity/simple-case.svg", "ref/resvg/filters/flood-opacity/simple-case.png", "diff/resvg/filters/flood-opacity/simple-case.png", false), 0)} @@ -253,27 +256,30 @@ use crate::run_test; #[test] fn resvg_filters_feDistantLight_only_azimuth() {assert_eq!(run_test("svg/resvg/filters/feDistantLight/only-azimuth.svg", "ref/resvg/filters/feDistantLight/only-azimuth.png", "diff/resvg/filters/feDistantLight/only-azimuth.png", false), 0)} #[test] fn resvg_filters_feDistantLight_only_elevation() {assert_eq!(run_test("svg/resvg/filters/feDistantLight/only-elevation.svg", "ref/resvg/filters/feDistantLight/only-elevation.png", "diff/resvg/filters/feDistantLight/only-elevation.png", false), 0)} #[test] fn resvg_filters_feDistantLight_default_attributes() {assert_eq!(run_test("svg/resvg/filters/feDistantLight/default-attributes.svg", "ref/resvg/filters/feDistantLight/default-attributes.png", "diff/resvg/filters/feDistantLight/default-attributes.png", false), 0)} -#[ignore] #[test] fn resvg_filters_fePointLight_complex_transform() {assert_eq!(run_test("svg/resvg/filters/fePointLight/complex-transform.svg", "ref/resvg/filters/fePointLight/complex-transform.png", "diff/resvg/filters/fePointLight/complex-transform.png", false), 0)} +#[test] fn resvg_filters_fePointLight_complex_transform() {assert_eq!(run_test("svg/resvg/filters/fePointLight/complex-transform.svg", "ref/resvg/filters/fePointLight/complex-transform.png", "diff/resvg/filters/fePointLight/complex-transform.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_filters_fePointLight_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/fePointLight/primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/fePointLight/primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/fePointLight/primitiveUnits=objectBoundingBox.png", false), 0)} #[test] fn resvg_filters_fePointLight_custom_attributes() {assert_eq!(run_test("svg/resvg/filters/fePointLight/custom-attributes.svg", "ref/resvg/filters/fePointLight/custom-attributes.png", "diff/resvg/filters/fePointLight/custom-attributes.png", false), 0)} #[test] fn resvg_filters_fePointLight_default_attributes() {assert_eq!(run_test("svg/resvg/filters/fePointLight/default-attributes.svg", "ref/resvg/filters/fePointLight/default-attributes.png", "diff/resvg/filters/fePointLight/default-attributes.png", false), 0)} #[test] fn resvg_filters_filter_in_to_invalid_1() {assert_eq!(run_test("svg/resvg/filters/filter/in-to-invalid-1.svg", "ref/resvg/filters/filter/in-to-invalid-1.png", "diff/resvg/filters/filter/in-to-invalid-1.png", false), 0)} #[test] fn resvg_filters_filter_invalid_primitive_2() {assert_eq!(run_test("svg/resvg/filters/filter/invalid-primitive-2.svg", "ref/resvg/filters/filter/invalid-primitive-2.png", "diff/resvg/filters/filter/invalid-primitive-2.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_transform_on_shape_with_filter_region() {assert_eq!(run_test("svg/resvg/filters/filter/transform-on-shape-with-filter-region.svg", "ref/resvg/filters/filter/transform-on-shape-with-filter-region.png", "diff/resvg/filters/filter/transform-on-shape-with-filter-region.png", false), 0)} +#[test] fn resvg_filters_filter_transform_on_shape_with_filter_region() {assert_eq!(run_test("svg/resvg/filters/filter/transform-on-shape-with-filter-region.svg", "ref/resvg/filters/filter/transform-on-shape-with-filter-region.png", "diff/resvg/filters/filter/transform-on-shape-with-filter-region.png", false), 0)} #[test] fn resvg_filters_filter_region_with_stroke() {assert_eq!(run_test("svg/resvg/filters/filter/region-with-stroke.svg", "ref/resvg/filters/filter/region-with-stroke.png", "diff/resvg/filters/filter/region-with-stroke.png", false), 0)} #[test] fn resvg_filters_filter_in_SourceAlpha() {assert_eq!(run_test("svg/resvg/filters/filter/in=SourceAlpha.svg", "ref/resvg/filters/filter/in=SourceAlpha.png", "diff/resvg/filters/filter/in=SourceAlpha.png", false), 0)} #[test] fn resvg_filters_filter_on_a_vertical_line() {assert_eq!(run_test("svg/resvg/filters/filter/on-a-vertical-line.svg", "ref/resvg/filters/filter/on-a-vertical-line.png", "diff/resvg/filters/filter/on-a-vertical-line.png", false), 0)} +// will sigkill #[ignore] #[test] fn resvg_filters_filter_huge_region() {assert_eq!(run_test("svg/resvg/filters/filter/huge-region.svg", "ref/resvg/filters/filter/huge-region.png", "diff/resvg/filters/filter/huge-region.png", false), 0)} #[test] fn resvg_filters_filter_invalid_primitive_1() {assert_eq!(run_test("svg/resvg/filters/filter/invalid-primitive-1.svg", "ref/resvg/filters/filter/invalid-primitive-1.png", "diff/resvg/filters/filter/invalid-primitive-1.png", false), 0)} #[test] fn resvg_filters_filter_in_to_invalid_2() {assert_eq!(run_test("svg/resvg/filters/filter/in-to-invalid-2.svg", "ref/resvg/filters/filter/in-to-invalid-2.png", "diff/resvg/filters/filter/in-to-invalid-2.png", false), 0)} +#[test] fn resvg_filters_filter_path_bbox() {assert_eq!(run_test("svg/resvg/filters/filter/path-bbox.svg", "ref/resvg/filters/filter/path-bbox.png", "diff/resvg/filters/filter/path-bbox.png", false), 0)} #[test] fn resvg_filters_filter_content_outside_the_canvas() {assert_eq!(run_test("svg/resvg/filters/filter/content-outside-the-canvas.svg", "ref/resvg/filters/filter/content-outside-the-canvas.png", "diff/resvg/filters/filter/content-outside-the-canvas.png", false), 0)} #[test] fn resvg_filters_filter_transform_on_filter() {assert_eq!(run_test("svg/resvg/filters/filter/transform-on-filter.svg", "ref/resvg/filters/filter/transform-on-filter.png", "diff/resvg/filters/filter/transform-on-filter.png", false), 0)} #[test] fn resvg_filters_filter_with_region_and_subregion() {assert_eq!(run_test("svg/resvg/filters/filter/with-region-and-subregion.svg", "ref/resvg/filters/filter/with-region-and-subregion.png", "diff/resvg/filters/filter/with-region-and-subregion.png", false), 0)} #[test] fn resvg_filters_filter_with_region_and_filterUnits_userSpaceOnUse() {assert_eq!(run_test("svg/resvg/filters/filter/with-region-and-filterUnits=userSpaceOnUse.svg", "ref/resvg/filters/filter/with-region-and-filterUnits=userSpaceOnUse.png", "diff/resvg/filters/filter/with-region-and-filterUnits=userSpaceOnUse.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_BackgroundAlpha_with_enable_background() {assert_eq!(run_test("svg/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.svg", "ref/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png", "diff/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_StrokePaint() {assert_eq!(run_test("svg/resvg/filters/filter/in=StrokePaint.svg", "ref/resvg/filters/filter/in=StrokePaint.png", "diff/resvg/filters/filter/in=StrokePaint.png", false), 0)} +#[test] fn resvg_filters_filter_in_BackgroundAlpha_with_enable_background() {assert_eq!(run_test("svg/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.svg", "ref/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png", "diff/resvg/filters/filter/in=BackgroundAlpha-with-enable-background.png", false), 0)} +#[test] fn resvg_filters_filter_in_StrokePaint() {assert_eq!(run_test("svg/resvg/filters/filter/in=StrokePaint.svg", "ref/resvg/filters/filter/in=StrokePaint.png", "diff/resvg/filters/filter/in=StrokePaint.png", false), 0)} #[test] fn resvg_filters_filter_no_children() {assert_eq!(run_test("svg/resvg/filters/filter/no-children.svg", "ref/resvg/filters/filter/no-children.png", "diff/resvg/filters/filter/no-children.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_on_an_empty_group_1() {assert_eq!(run_test("svg/resvg/filters/filter/on-an-empty-group-1.svg", "ref/resvg/filters/filter/on-an-empty-group-1.png", "diff/resvg/filters/filter/on-an-empty-group-1.png", false), 0)} +#[test] fn resvg_filters_filter_on_an_empty_group_1() {assert_eq!(run_test("svg/resvg/filters/filter/on-an-empty-group-1.svg", "ref/resvg/filters/filter/on-an-empty-group-1.png", "diff/resvg/filters/filter/on-an-empty-group-1.png", false), 0)} #[test] fn resvg_filters_filter_invalid_subregion() {assert_eq!(run_test("svg/resvg/filters/filter/invalid-subregion.svg", "ref/resvg/filters/filter/invalid-subregion.png", "diff/resvg/filters/filter/invalid-subregion.png", false), 0)} #[test] fn resvg_filters_filter_everything_via_xlink_href() {assert_eq!(run_test("svg/resvg/filters/filter/everything-via-xlink-href.svg", "ref/resvg/filters/filter/everything-via-xlink-href.png", "diff/resvg/filters/filter/everything-via-xlink-href.png", false), 0)} #[test] fn resvg_filters_filter_zero_sized_subregion() {assert_eq!(run_test("svg/resvg/filters/filter/zero-sized-subregion.svg", "ref/resvg/filters/filter/zero-sized-subregion.png", "diff/resvg/filters/filter/zero-sized-subregion.png", false), 0)} @@ -282,32 +288,34 @@ use crate::run_test; #[test] fn resvg_filters_filter_on_an_empty_group_2() {assert_eq!(run_test("svg/resvg/filters/filter/on-an-empty-group-2.svg", "ref/resvg/filters/filter/on-an-empty-group-2.png", "diff/resvg/filters/filter/on-an-empty-group-2.png", false), 0)} #[test] fn resvg_filters_filter_in_BackgroundAlpha() {assert_eq!(run_test("svg/resvg/filters/filter/in=BackgroundAlpha.svg", "ref/resvg/filters/filter/in=BackgroundAlpha.png", "diff/resvg/filters/filter/in=BackgroundAlpha.png", false), 0)} #[test] fn resvg_filters_filter_with_clip_path_and_mask() {assert_eq!(run_test("svg/resvg/filters/filter/with-clip-path-and-mask.svg", "ref/resvg/filters/filter/with-clip-path-and-mask.png", "diff/resvg/filters/filter/with-clip-path-and-mask.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_filters_filter_with_mask_on_parent() {assert_eq!(run_test("svg/resvg/filters/filter/with-mask-on-parent.svg", "ref/resvg/filters/filter/with-mask-on-parent.png", "diff/resvg/filters/filter/with-mask-on-parent.png", false), 0)} #[test] fn resvg_filters_filter_with_region_outside_the_canvas() {assert_eq!(run_test("svg/resvg/filters/filter/with-region-outside-the-canvas.svg", "ref/resvg/filters/filter/with-region-outside-the-canvas.png", "diff/resvg/filters/filter/with-region-outside-the-canvas.png", false), 0)} #[test] fn resvg_filters_filter_transform_on_shape() {assert_eq!(run_test("svg/resvg/filters/filter/transform-on-shape.svg", "ref/resvg/filters/filter/transform-on-shape.png", "diff/resvg/filters/filter/transform-on-shape.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_BackgroundImage_with_enable_background() {assert_eq!(run_test("svg/resvg/filters/filter/in=BackgroundImage-with-enable-background.svg", "ref/resvg/filters/filter/in=BackgroundImage-with-enable-background.png", "diff/resvg/filters/filter/in=BackgroundImage-with-enable-background.png", false), 0)} +#[test] fn resvg_filters_filter_in_BackgroundImage_with_enable_background() {assert_eq!(run_test("svg/resvg/filters/filter/in=BackgroundImage-with-enable-background.svg", "ref/resvg/filters/filter/in=BackgroundImage-with-enable-background.png", "diff/resvg/filters/filter/in=BackgroundImage-with-enable-background.png", false), 0)} #[test] fn resvg_filters_filter_subregion_bigger_that_region() {assert_eq!(run_test("svg/resvg/filters/filter/subregion-bigger-that-region.svg", "ref/resvg/filters/filter/subregion-bigger-that-region.png", "diff/resvg/filters/filter/subregion-bigger-that-region.png", false), 0)} #[test] fn resvg_filters_filter_global_transform() {assert_eq!(run_test("svg/resvg/filters/filter/global-transform.svg", "ref/resvg/filters/filter/global-transform.png", "diff/resvg/filters/filter/global-transform.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_FillPaint_with_pattern() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-with-pattern.svg", "ref/resvg/filters/filter/in=FillPaint-with-pattern.png", "diff/resvg/filters/filter/in=FillPaint-with-pattern.png", false), 0)} +#[test] fn resvg_filters_filter_in_FillPaint_with_gradient() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-with-gradient.svg", "ref/resvg/filters/filter/in=FillPaint-with-gradient.png", "diff/resvg/filters/filter/in=FillPaint-with-gradient.png", false), 0)} +#[test] fn resvg_filters_filter_in_FillPaint_with_pattern() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-with-pattern.svg", "ref/resvg/filters/filter/in=FillPaint-with-pattern.png", "diff/resvg/filters/filter/in=FillPaint-with-pattern.png", false), 0)} #[test] fn resvg_filters_filter_simple_case() {assert_eq!(run_test("svg/resvg/filters/filter/simple-case.svg", "ref/resvg/filters/filter/simple-case.png", "diff/resvg/filters/filter/simple-case.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_on_the_root_svg() {assert_eq!(run_test("svg/resvg/filters/filter/on-the-root-svg.svg", "ref/resvg/filters/filter/on-the-root-svg.png", "diff/resvg/filters/filter/on-the-root-svg.png", false), 0)} +#[test] fn resvg_filters_filter_on_the_root_svg() {assert_eq!(run_test("svg/resvg/filters/filter/on-the-root-svg.svg", "ref/resvg/filters/filter/on-the-root-svg.png", "diff/resvg/filters/filter/on-the-root-svg.png", false), 0)} #[test] fn resvg_filters_filter_some_attributes_via_xlink_href() {assert_eq!(run_test("svg/resvg/filters/filter/some-attributes-via-xlink-href.svg", "ref/resvg/filters/filter/some-attributes-via-xlink-href.png", "diff/resvg/filters/filter/some-attributes-via-xlink-href.png", false), 0)} #[test] fn resvg_filters_filter_invalid_region() {assert_eq!(run_test("svg/resvg/filters/filter/invalid-region.svg", "ref/resvg/filters/filter/invalid-region.png", "diff/resvg/filters/filter/invalid-region.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_subregion_and_primitiveUnits_objectBoundingBox_2() {assert_eq!(run_test("svg/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.svg", "ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.png", "diff/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.png", false), 0)} +#[test] fn resvg_filters_filter_subregion_and_primitiveUnits_objectBoundingBox_2() {assert_eq!(run_test("svg/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.svg", "ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.png", "diff/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-2.png", false), 0)} #[test] fn resvg_filters_filter_content_outside_the_canvas_2() {assert_eq!(run_test("svg/resvg/filters/filter/content-outside-the-canvas-2.svg", "ref/resvg/filters/filter/content-outside-the-canvas-2.png", "diff/resvg/filters/filter/content-outside-the-canvas-2.png", false), 0)} #[test] fn resvg_filters_filter_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/filter/primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/filter/primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/filter/primitiveUnits=objectBoundingBox.png", false), 0)} #[test] fn resvg_filters_filter_color_interpolation_filters_sRGB() {assert_eq!(run_test("svg/resvg/filters/filter/color-interpolation-filters=sRGB.svg", "ref/resvg/filters/filter/color-interpolation-filters=sRGB.png", "diff/resvg/filters/filter/color-interpolation-filters=sRGB.png", false), 0)} #[test] fn resvg_filters_filter_with_region() {assert_eq!(run_test("svg/resvg/filters/filter/with-region.svg", "ref/resvg/filters/filter/with-region.png", "diff/resvg/filters/filter/with-region.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_subregion_and_primitiveUnits_objectBoundingBox_1() {assert_eq!(run_test("svg/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.svg", "ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.png", "diff/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_FillPaint_with_target_on_g() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-with-target-on-g.svg", "ref/resvg/filters/filter/in=FillPaint-with-target-on-g.png", "diff/resvg/filters/filter/in=FillPaint-with-target-on-g.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_FillPaint() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint.svg", "ref/resvg/filters/filter/in=FillPaint.png", "diff/resvg/filters/filter/in=FillPaint.png", false), 0)} +#[test] fn resvg_filters_filter_subregion_and_primitiveUnits_objectBoundingBox_1() {assert_eq!(run_test("svg/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.svg", "ref/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.png", "diff/resvg/filters/filter/subregion-and-primitiveUnits=objectBoundingBox-1.png", false), 0)} +#[test] fn resvg_filters_filter_in_FillPaint_with_target_on_g() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-with-target-on-g.svg", "ref/resvg/filters/filter/in=FillPaint-with-target-on-g.png", "diff/resvg/filters/filter/in=FillPaint-with-target-on-g.png", false), 0)} +#[test] fn resvg_filters_filter_in_FillPaint() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint.svg", "ref/resvg/filters/filter/in=FillPaint.png", "diff/resvg/filters/filter/in=FillPaint.png", false), 0)} #[test] fn resvg_filters_filter_negative_subregion() {assert_eq!(run_test("svg/resvg/filters/filter/negative-subregion.svg", "ref/resvg/filters/filter/negative-subregion.png", "diff/resvg/filters/filter/negative-subregion.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_in_FillPaint_on_g_without_children() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-on-g-without-children.svg", "ref/resvg/filters/filter/in=FillPaint-on-g-without-children.png", "diff/resvg/filters/filter/in=FillPaint-on-g-without-children.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_with_mask() {assert_eq!(run_test("svg/resvg/filters/filter/with-mask.svg", "ref/resvg/filters/filter/with-mask.png", "diff/resvg/filters/filter/with-mask.png", false), 0)} +#[test] fn resvg_filters_filter_in_FillPaint_on_g_without_children() {assert_eq!(run_test("svg/resvg/filters/filter/in=FillPaint-on-g-without-children.svg", "ref/resvg/filters/filter/in=FillPaint-on-g-without-children.png", "diff/resvg/filters/filter/in=FillPaint-on-g-without-children.png", false), 0)} +#[test] fn resvg_filters_filter_with_mask() {assert_eq!(run_test("svg/resvg/filters/filter/with-mask.svg", "ref/resvg/filters/filter/with-mask.png", "diff/resvg/filters/filter/with-mask.png", false), 0)} #[test] fn resvg_filters_filter_invalid_filterUnits() {assert_eq!(run_test("svg/resvg/filters/filter/invalid-filterUnits.svg", "ref/resvg/filters/filter/invalid-filterUnits.png", "diff/resvg/filters/filter/invalid-filterUnits.png", false), 0)} #[test] fn resvg_filters_filter_with_multiple_transforms_1() {assert_eq!(run_test("svg/resvg/filters/filter/with-multiple-transforms-1.svg", "ref/resvg/filters/filter/with-multiple-transforms-1.png", "diff/resvg/filters/filter/with-multiple-transforms-1.png", false), 0)} #[test] fn resvg_filters_filter_with_subregion_1() {assert_eq!(run_test("svg/resvg/filters/filter/with-subregion-1.svg", "ref/resvg/filters/filter/with-subregion-1.png", "diff/resvg/filters/filter/with-subregion-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_filter_on_a_thin_rect() {assert_eq!(run_test("svg/resvg/filters/filter/on-a-thin-rect.svg", "ref/resvg/filters/filter/on-a-thin-rect.png", "diff/resvg/filters/filter/on-a-thin-rect.png", false), 0)} +#[test] fn resvg_filters_filter_on_a_thin_rect() {assert_eq!(run_test("svg/resvg/filters/filter/on-a-thin-rect.svg", "ref/resvg/filters/filter/on-a-thin-rect.png", "diff/resvg/filters/filter/on-a-thin-rect.png", false), 0)} #[test] fn resvg_filters_filter_default_color_interpolation_filters() {assert_eq!(run_test("svg/resvg/filters/filter/default-color-interpolation-filters.svg", "ref/resvg/filters/filter/default-color-interpolation-filters.png", "diff/resvg/filters/filter/default-color-interpolation-filters.png", false), 0)} #[test] fn resvg_filters_filter_with_clip_path() {assert_eq!(run_test("svg/resvg/filters/filter/with-clip-path.svg", "ref/resvg/filters/filter/with-clip-path.png", "diff/resvg/filters/filter/with-clip-path.png", false), 0)} #[test] fn resvg_filters_filter_with_subregion_3() {assert_eq!(run_test("svg/resvg/filters/filter/with-subregion-3.svg", "ref/resvg/filters/filter/with-subregion-3.png", "diff/resvg/filters/filter/with-subregion-3.png", false), 0)} @@ -331,20 +339,21 @@ use crate::run_test; #[test] fn resvg_filters_feImage_link_to_g() {assert_eq!(run_test("svg/resvg/filters/feImage/link-to-g.svg", "ref/resvg/filters/feImage/link-to-g.png", "diff/resvg/filters/feImage/link-to-g.png", false), 0)} #[test] fn resvg_filters_feImage_empty() {assert_eq!(run_test("svg/resvg/filters/feImage/empty.svg", "ref/resvg/filters/feImage/empty.png", "diff/resvg/filters/feImage/empty.png", false), 0)} #[test] fn resvg_filters_feImage_link_to_an_element_with_transform() {assert_eq!(run_test("svg/resvg/filters/feImage/link-to-an-element-with-transform.svg", "ref/resvg/filters/feImage/link-to-an-element-with-transform.png", "diff/resvg/filters/feImage/link-to-an-element-with-transform.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feImage_with_x_y() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y.svg", "ref/resvg/filters/feImage/with-x-y.png", "diff/resvg/filters/feImage/with-x-y.png", false), 0)} +#[test] fn resvg_filters_feImage_with_x_y() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y.svg", "ref/resvg/filters/feImage/with-x-y.png", "diff/resvg/filters/feImage/with-x-y.png", false), 0)} #[test] fn resvg_filters_feImage_link_to_an_invalid_element() {assert_eq!(run_test("svg/resvg/filters/feImage/link-to-an-invalid-element.svg", "ref/resvg/filters/feImage/link-to-an-invalid-element.png", "diff/resvg/filters/feImage/link-to-an-invalid-element.png", false), 0)} #[test] fn resvg_filters_feImage_link_on_an_element_with_transform() {assert_eq!(run_test("svg/resvg/filters/feImage/link-on-an-element-with-transform.svg", "ref/resvg/filters/feImage/link-on-an-element-with-transform.png", "diff/resvg/filters/feImage/link-on-an-element-with-transform.png", false), 0)} #[test] fn resvg_filters_feImage_embedded_png() {assert_eq!(run_test("svg/resvg/filters/feImage/embedded-png.svg", "ref/resvg/filters/feImage/embedded-png.png", "diff/resvg/filters/feImage/embedded-png.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_filters_feImage_simple_case() {assert_eq!(run_test("svg/resvg/filters/feImage/simple-case.svg", "ref/resvg/filters/feImage/simple-case.png", "diff/resvg/filters/feImage/simple-case.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feImage_with_x_y_and_protruding_subregion_2() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.svg", "ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png", "diff/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feImage_with_x_y_and_protruding_subregion_1() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.svg", "ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png", "diff/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feImage_with_subregion_5() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-5.svg", "ref/resvg/filters/feImage/with-subregion-5.png", "diff/resvg/filters/feImage/with-subregion-5.png", false), 0)} +#[test] fn resvg_filters_feImage_with_x_y_and_protruding_subregion_2() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.svg", "ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png", "diff/resvg/filters/feImage/with-x-y-and-protruding-subregion-2.png", false), 0)} +#[test] fn resvg_filters_feImage_with_x_y_and_protruding_subregion_1() {assert_eq!(run_test("svg/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.svg", "ref/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png", "diff/resvg/filters/feImage/with-x-y-and-protruding-subregion-1.png", false), 0)} +#[test] fn resvg_filters_feImage_with_subregion_5() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-5.svg", "ref/resvg/filters/feImage/with-subregion-5.png", "diff/resvg/filters/feImage/with-subregion-5.png", false), 0)} #[test] fn resvg_filters_feImage_link_to_an_element_with_opacity() {assert_eq!(run_test("svg/resvg/filters/feImage/link-to-an-element-with-opacity.svg", "ref/resvg/filters/feImage/link-to-an-element-with-opacity.png", "diff/resvg/filters/feImage/link-to-an-element-with-opacity.png", false), 0)} #[test] fn resvg_filters_feImage_preserveAspectRatio_none() {assert_eq!(run_test("svg/resvg/filters/feImage/preserveAspectRatio=none.svg", "ref/resvg/filters/feImage/preserveAspectRatio=none.png", "diff/resvg/filters/feImage/preserveAspectRatio=none.png", false), 0)} #[test] fn resvg_filters_feImage_with_subregion_4() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-4.svg", "ref/resvg/filters/feImage/with-subregion-4.png", "diff/resvg/filters/feImage/with-subregion-4.png", false), 0)} #[test] fn resvg_filters_feImage_svg() {assert_eq!(run_test("svg/resvg/filters/feImage/svg.svg", "ref/resvg/filters/feImage/svg.png", "diff/resvg/filters/feImage/svg.png", false), 0)} #[test] fn resvg_filters_feImage_with_subregion_1() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-1.svg", "ref/resvg/filters/feImage/with-subregion-1.png", "diff/resvg/filters/feImage/with-subregion-1.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feImage_link_on_an_element_with_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feImage/link-on-an-element-with-complex-transform.svg", "ref/resvg/filters/feImage/link-on-an-element-with-complex-transform.png", "diff/resvg/filters/feImage/link-on-an-element-with-complex-transform.png", false), 0)} +#[test] fn resvg_filters_feImage_link_on_an_element_with_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feImage/link-on-an-element-with-complex-transform.svg", "ref/resvg/filters/feImage/link-on-an-element-with-complex-transform.png", "diff/resvg/filters/feImage/link-on-an-element-with-complex-transform.png", false), 0)} #[test] fn resvg_filters_feImage_with_subregion_3() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-3.svg", "ref/resvg/filters/feImage/with-subregion-3.png", "diff/resvg/filters/feImage/with-subregion-3.png", false), 0)} #[test] fn resvg_filters_feImage_link_to_an_element() {assert_eq!(run_test("svg/resvg/filters/feImage/link-to-an-element.svg", "ref/resvg/filters/feImage/link-to-an-element.png", "diff/resvg/filters/feImage/link-to-an-element.png", false), 0)} #[test] fn resvg_filters_feImage_with_subregion_2() {assert_eq!(run_test("svg/resvg/filters/feImage/with-subregion-2.svg", "ref/resvg/filters/feImage/with-subregion-2.png", "diff/resvg/filters/feImage/with-subregion-2.png", false), 0)} @@ -360,7 +369,7 @@ use crate::run_test; #[test] fn resvg_filters_feDiffuseLighting_lighting_color_hsla() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/lighting-color=hsla.svg", "ref/resvg/filters/feDiffuseLighting/lighting-color=hsla.png", "diff/resvg/filters/feDiffuseLighting/lighting-color=hsla.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_single_light_source_with_title_and_desc() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/single-light-source-with-title-and-desc.svg", "ref/resvg/filters/feDiffuseLighting/single-light-source-with-title-and-desc.png", "diff/resvg/filters/feDiffuseLighting/single-light-source-with-title-and-desc.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_single_light_source_with_invalid_child() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/single-light-source-with-invalid-child.svg", "ref/resvg/filters/feDiffuseLighting/single-light-source-with-invalid-child.png", "diff/resvg/filters/feDiffuseLighting/single-light-source-with-invalid-child.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feDiffuseLighting_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/complex-transform.svg", "ref/resvg/filters/feDiffuseLighting/complex-transform.png", "diff/resvg/filters/feDiffuseLighting/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feDiffuseLighting_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/complex-transform.svg", "ref/resvg/filters/feDiffuseLighting/complex-transform.png", "diff/resvg/filters/feDiffuseLighting/complex-transform.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_lighting_color_currentColor() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/lighting-color=currentColor.svg", "ref/resvg/filters/feDiffuseLighting/lighting-color=currentColor.png", "diff/resvg/filters/feDiffuseLighting/lighting-color=currentColor.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_surfaceScale_1_33() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/surfaceScale=1.33.svg", "ref/resvg/filters/feDiffuseLighting/surfaceScale=1.33.png", "diff/resvg/filters/feDiffuseLighting/surfaceScale=1.33.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_no_light_source() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/no-light-source.svg", "ref/resvg/filters/feDiffuseLighting/no-light-source.png", "diff/resvg/filters/feDiffuseLighting/no-light-source.png", false), 0)} @@ -376,18 +385,18 @@ use crate::run_test; #[test] fn resvg_filters_feDiffuseLighting_lighting_color_currentColor_without_color() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/lighting-color=currentColor-without-color.svg", "ref/resvg/filters/feDiffuseLighting/lighting-color=currentColor-without-color.png", "diff/resvg/filters/feDiffuseLighting/lighting-color=currentColor-without-color.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_multiple_light_sources() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/multiple-light-sources.svg", "ref/resvg/filters/feDiffuseLighting/multiple-light-sources.png", "diff/resvg/filters/feDiffuseLighting/multiple-light-sources.png", false), 0)} #[test] fn resvg_filters_feDiffuseLighting_diffuseConstant_5() {assert_eq!(run_test("svg/resvg/filters/feDiffuseLighting/diffuseConstant=5.svg", "ref/resvg/filters/feDiffuseLighting/diffuseConstant=5.png", "diff/resvg/filters/feDiffuseLighting/diffuseConstant=5.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feFlood_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feFlood/complex-transform.svg", "ref/resvg/filters/feFlood/complex-transform.png", "diff/resvg/filters/feFlood/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feFlood_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feFlood/complex-transform.svg", "ref/resvg/filters/feFlood/complex-transform.png", "diff/resvg/filters/feFlood/complex-transform.png", false), 0)} #[test] fn resvg_filters_feFlood_with_opacity_on_target_element() {assert_eq!(run_test("svg/resvg/filters/feFlood/with-opacity-on-target-element.svg", "ref/resvg/filters/feFlood/with-opacity-on-target-element.png", "diff/resvg/filters/feFlood/with-opacity-on-target-element.png", false), 0)} #[test] fn resvg_filters_feFlood_with_opacity() {assert_eq!(run_test("svg/resvg/filters/feFlood/with-opacity.svg", "ref/resvg/filters/feFlood/with-opacity.png", "diff/resvg/filters/feFlood/with-opacity.png", false), 0)} #[test] fn resvg_filters_feFlood_subregion_with_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/feFlood/subregion-with-primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/feFlood/subregion-with-primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/feFlood/subregion-with-primitiveUnits=objectBoundingBox.png", false), 0)} #[test] fn resvg_filters_feFlood_default_values() {assert_eq!(run_test("svg/resvg/filters/feFlood/default-values.svg", "ref/resvg/filters/feFlood/default-values.png", "diff/resvg/filters/feFlood/default-values.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feFlood_partial_subregion() {assert_eq!(run_test("svg/resvg/filters/feFlood/partial-subregion.svg", "ref/resvg/filters/feFlood/partial-subregion.png", "diff/resvg/filters/feFlood/partial-subregion.png", false), 0)} +#[test] fn resvg_filters_feFlood_partial_subregion() {assert_eq!(run_test("svg/resvg/filters/feFlood/partial-subregion.svg", "ref/resvg/filters/feFlood/partial-subregion.png", "diff/resvg/filters/feFlood/partial-subregion.png", false), 0)} #[test] fn resvg_filters_feFlood_seagreen() {assert_eq!(run_test("svg/resvg/filters/feFlood/seagreen.svg", "ref/resvg/filters/feFlood/seagreen.png", "diff/resvg/filters/feFlood/seagreen.png", false), 0)} #[test] fn resvg_filters_feFlood_subregion_inheritance() {assert_eq!(run_test("svg/resvg/filters/feFlood/subregion-inheritance.svg", "ref/resvg/filters/feFlood/subregion-inheritance.png", "diff/resvg/filters/feFlood/subregion-inheritance.png", false), 0)} #[test] fn resvg_filters_feSpotLight_with_all_pointsAt() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/with-all-pointsAt.svg", "ref/resvg/filters/feSpotLight/with-all-pointsAt.png", "diff/resvg/filters/feSpotLight/with-all-pointsAt.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feSpotLight_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/complex-transform.svg", "ref/resvg/filters/feSpotLight/complex-transform.png", "diff/resvg/filters/feSpotLight/complex-transform.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feSpotLight_limitingConeAngle_0() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/limitingConeAngle=0.svg", "ref/resvg/filters/feSpotLight/limitingConeAngle=0.png", "diff/resvg/filters/feSpotLight/limitingConeAngle=0.png", false), 0)} -#[ignore] #[test] fn resvg_filters_feSpotLight_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png", false), 0)} +#[test] fn resvg_filters_feSpotLight_complex_transform() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/complex-transform.svg", "ref/resvg/filters/feSpotLight/complex-transform.png", "diff/resvg/filters/feSpotLight/complex-transform.png", false), 0)} +#[test] fn resvg_filters_feSpotLight_limitingConeAngle_0() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/limitingConeAngle=0.svg", "ref/resvg/filters/feSpotLight/limitingConeAngle=0.png", "diff/resvg/filters/feSpotLight/limitingConeAngle=0.png", false), 0)} +#[test] fn resvg_filters_feSpotLight_primitiveUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.svg", "ref/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png", "diff/resvg/filters/feSpotLight/primitiveUnits=objectBoundingBox.png", false), 0)} #[test] fn resvg_filters_feSpotLight_limitingConeAngle_anti_aliasing() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/limitingConeAngle-anti-aliasing.svg", "ref/resvg/filters/feSpotLight/limitingConeAngle-anti-aliasing.png", "diff/resvg/filters/feSpotLight/limitingConeAngle-anti-aliasing.png", false), 0)} #[test] fn resvg_filters_feSpotLight_specularExponent_10() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/specularExponent=10.svg", "ref/resvg/filters/feSpotLight/specularExponent=10.png", "diff/resvg/filters/feSpotLight/specularExponent=10.png", false), 0)} #[test] fn resvg_filters_feSpotLight_specularExponent__10() {assert_eq!(run_test("svg/resvg/filters/feSpotLight/specularExponent=-10.svg", "ref/resvg/filters/feSpotLight/specularExponent=-10.png", "diff/resvg/filters/feSpotLight/specularExponent=-10.png", false), 0)} @@ -404,44 +413,55 @@ use crate::run_test; #[test] fn resvg_paint_servers_radialGradient_attributes_via_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/attributes-via-xlink-href.png", "diff/resvg/paint-servers/radialGradient/attributes-via-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_gradientTransform_and_transform() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/gradientTransform-and-transform.svg", "ref/resvg/paint-servers/radialGradient/gradientTransform-and-transform.png", "diff/resvg/paint-servers/radialGradient/gradientTransform-and-transform.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_stops_via_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/stops-via-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/stops-via-xlink-href.png", "diff/resvg/paint-servers/radialGradient/stops-via-xlink-href.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_radialGradient_fr__1() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fr=-1.svg", "ref/resvg/paint-servers/radialGradient/fr=-1.png", "diff/resvg/paint-servers/radialGradient/fr=-1.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_no_stops() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/no-stops.svg", "ref/resvg/paint-servers/radialGradient/no-stops.png", "diff/resvg/paint-servers/radialGradient/no-stops.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_radialGradient_fr_0_2() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fr=0.2.svg", "ref/resvg/paint-servers/radialGradient/fr=0.2.png", "diff/resvg/paint-servers/radialGradient/fr=0.2.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_spreadMethod_pad() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/spreadMethod=pad.svg", "ref/resvg/paint-servers/radialGradient/spreadMethod=pad.png", "diff/resvg/paint-servers/radialGradient/spreadMethod=pad.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_radialGradient_invalid_gradientUnits() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/invalid-gradientUnits.svg", "ref/resvg/paint-servers/radialGradient/invalid-gradientUnits.png", "diff/resvg/paint-servers/radialGradient/invalid-gradientUnits.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_gradientUnits_objectBoundingBox_with_percent() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/gradientUnits=objectBoundingBox-with-percent.svg", "ref/resvg/paint-servers/radialGradient/gradientUnits=objectBoundingBox-with-percent.png", "diff/resvg/paint-servers/radialGradient/gradientUnits=objectBoundingBox-with-percent.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_invalid_spreadMethod() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/invalid-spreadMethod.svg", "ref/resvg/paint-servers/radialGradient/invalid-spreadMethod.png", "diff/resvg/paint-servers/radialGradient/invalid-spreadMethod.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_radialGradient_fr_0_5() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fr=0.5.svg", "ref/resvg/paint-servers/radialGradient/fr=0.5.png", "diff/resvg/paint-servers/radialGradient/fr=0.5.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_fx_resolving_1() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fx-resolving-1.svg", "ref/resvg/paint-servers/radialGradient/fx-resolving-1.png", "diff/resvg/paint-servers/radialGradient/fx-resolving-1.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_stops_via_xlink_href_from_linearGradient() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-linearGradient.svg", "ref/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-linearGradient.png", "diff/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-linearGradient.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_many_stops() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/many-stops.svg", "ref/resvg/paint-servers/radialGradient/many-stops.png", "diff/resvg/paint-servers/radialGradient/many-stops.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_fx_resolving_2() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fx-resolving-2.svg", "ref/resvg/paint-servers/radialGradient/fx-resolving-2.png", "diff/resvg/paint-servers/radialGradient/fx-resolving-2.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_fx_resolving_3() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fx-resolving-3.svg", "ref/resvg/paint-servers/radialGradient/fx-resolving-3.png", "diff/resvg/paint-servers/radialGradient/fx-resolving-3.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_radialGradient_fr_0_7() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/fr=0.7.svg", "ref/resvg/paint-servers/radialGradient/fr=0.7.png", "diff/resvg/paint-servers/radialGradient/fr=0.7.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/gradientTransform.svg", "ref/resvg/paint-servers/radialGradient/gradientTransform.png", "diff/resvg/paint-servers/radialGradient/gradientTransform.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_gradientUnits_userSpaceOnUse() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse.svg", "ref/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse.png", "diff/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_zero_r_with_stop_opacity_2() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-2.svg", "ref/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-2.png", "diff/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-2.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_radialGradient_attributes_via_xlink_href_from_linearGradient() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-linearGradient.svg", "ref/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-linearGradient.png", "diff/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-linearGradient.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_zero_r_with_stop_opacity_1() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-1.svg", "ref/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-1.png", "diff/resvg/paint-servers/radialGradient/zero-r-with-stop-opacity-1.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_stops_via_xlink_href_complex_order() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/stops-via-xlink-href-complex-order.svg", "ref/resvg/paint-servers/radialGradient/stops-via-xlink-href-complex-order.png", "diff/resvg/paint-servers/radialGradient/stops-via-xlink-href-complex-order.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_single_stop() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/single-stop.svg", "ref/resvg/paint-servers/radialGradient/single-stop.png", "diff/resvg/paint-servers/radialGradient/single-stop.png", false), 0)} -#[ignore] #[test] fn resvg_paint_servers_radialGradient_invalid_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/invalid-gradientTransform.svg", "ref/resvg/paint-servers/radialGradient/invalid-gradientTransform.png", "diff/resvg/paint-servers/radialGradient/invalid-gradientTransform.png", false), 0)} +#[test] fn resvg_paint_servers_radialGradient_invalid_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/invalid-gradientTransform.svg", "ref/resvg/paint-servers/radialGradient/invalid-gradientTransform.png", "diff/resvg/paint-servers/radialGradient/invalid-gradientTransform.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_stops_via_xlink_href_from_rect() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-rect.svg", "ref/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-rect.png", "diff/resvg/paint-servers/radialGradient/stops-via-xlink-href-from-rect.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_zero_r() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/zero-r.svg", "ref/resvg/paint-servers/radialGradient/zero-r.png", "diff/resvg/paint-servers/radialGradient/zero-r.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_recursive_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/recursive-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/recursive-xlink-href.png", "diff/resvg/paint-servers/radialGradient/recursive-xlink-href.png", false), 0)} +#[test] fn resvg_paint_servers_radialGradient_negative_r() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/negative-r.svg", "ref/resvg/paint-servers/radialGradient/negative-r.png", "diff/resvg/paint-servers/radialGradient/negative-r.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_focal_point_correction() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/focal-point-correction.svg", "ref/resvg/paint-servers/radialGradient/focal-point-correction.png", "diff/resvg/paint-servers/radialGradient/focal-point-correction.png", false), 0)} +// spreadMethod repeat not supported #[ignore] #[test] fn resvg_paint_servers_radialGradient_spreadMethod_repeat() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/spreadMethod=repeat.svg", "ref/resvg/paint-servers/radialGradient/spreadMethod=repeat.png", "diff/resvg/paint-servers/radialGradient/spreadMethod=repeat.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_unresolved_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/unresolved-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/unresolved-xlink-href.png", "diff/resvg/paint-servers/radialGradient/unresolved-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_invalid_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/invalid-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/invalid-xlink-href.png", "diff/resvg/paint-servers/radialGradient/invalid-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_attributes_via_xlink_href_from_rect() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-rect.svg", "ref/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-rect.png", "diff/resvg/paint-servers/radialGradient/attributes-via-xlink-href-from-rect.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_radialGradient_attributes_via_xlink_href_complex_order() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/attributes-via-xlink-href-complex-order.svg", "ref/resvg/paint-servers/radialGradient/attributes-via-xlink-href-complex-order.png", "diff/resvg/paint-servers/radialGradient/attributes-via-xlink-href-complex-order.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_xlink_href_not_to_gradient() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/xlink-href-not-to-gradient.svg", "ref/resvg/paint-servers/radialGradient/xlink-href-not-to-gradient.png", "diff/resvg/paint-servers/radialGradient/xlink-href-not-to-gradient.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_gradientUnits_userSpaceOnUse_with_percent() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse-with-percent.svg", "ref/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse-with-percent.png", "diff/resvg/paint-servers/radialGradient/gradientUnits=userSpaceOnUse-with-percent.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_self_recursive_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/self-recursive-xlink-href.svg", "ref/resvg/paint-servers/radialGradient/self-recursive-xlink-href.png", "diff/resvg/paint-servers/radialGradient/self-recursive-xlink-href.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_radialGradient_spreadMethod_reflect() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/spreadMethod=reflect.svg", "ref/resvg/paint-servers/radialGradient/spreadMethod=reflect.png", "diff/resvg/paint-servers/radialGradient/spreadMethod=reflect.png", false), 0)} #[test] fn resvg_paint_servers_radialGradient_default_attributes() {assert_eq!(run_test("svg/resvg/paint-servers/radialGradient/default-attributes.svg", "ref/resvg/paint-servers/radialGradient/default-attributes.png", "diff/resvg/paint-servers/radialGradient/default-attributes.png", false), 0)} #[test] fn resvg_paint_servers_stop_opacity_simple_case() {assert_eq!(run_test("svg/resvg/paint-servers/stop-opacity/simple-case.svg", "ref/resvg/paint-servers/stop-opacity/simple-case.png", "diff/resvg/paint-servers/stop-opacity/simple-case.png", false), 0)} #[test] fn resvg_paint_servers_stop_opacity_50percent() {assert_eq!(run_test("svg/resvg/paint-servers/stop-opacity/50percent.svg", "ref/resvg/paint-servers/stop-opacity/50percent.png", "diff/resvg/paint-servers/stop-opacity/50percent.png", false), 0)} +#[test] fn resvg_paint_servers_stop_hsla_color() {assert_eq!(run_test("svg/resvg/paint-servers/stop/hsla-color.svg", "ref/resvg/paint-servers/stop/hsla-color.png", "diff/resvg/paint-servers/stop/hsla-color.png", false), 0)} #[test] fn resvg_paint_servers_stop_zero_offset_in_the_middle() {assert_eq!(run_test("svg/resvg/paint-servers/stop/zero-offset-in-the-middle.svg", "ref/resvg/paint-servers/stop/zero-offset-in-the-middle.png", "diff/resvg/paint-servers/stop/zero-offset-in-the-middle.png", false), 0)} #[test] fn resvg_paint_servers_stop_stop_with_smaller_offset() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-with-smaller-offset.svg", "ref/resvg/paint-servers/stop/stop-with-smaller-offset.png", "diff/resvg/paint-servers/stop/stop-with-smaller-offset.png", false), 0)} #[test] fn resvg_paint_servers_stop_stops_with_equal_offset_3() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stops-with-equal-offset-3.svg", "ref/resvg/paint-servers/stop/stops-with-equal-offset-3.png", "diff/resvg/paint-servers/stop/stops-with-equal-offset-3.png", false), 0)} @@ -469,7 +489,7 @@ use crate::run_test; #[test] fn resvg_paint_servers_stop_stop_color_with_inherit_4() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-color-with-inherit-4.svg", "ref/resvg/paint-servers/stop/stop-color-with-inherit-4.png", "diff/resvg/paint-servers/stop/stop-color-with-inherit-4.png", false), 0)} #[test] fn resvg_paint_servers_stop_offset_with_percent() {assert_eq!(run_test("svg/resvg/paint-servers/stop/offset-with-percent.svg", "ref/resvg/paint-servers/stop/offset-with-percent.png", "diff/resvg/paint-servers/stop/offset-with-percent.png", false), 0)} #[test] fn resvg_paint_servers_stop_stop_color_with_inherit_5() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-color-with-inherit-5.svg", "ref/resvg/paint-servers/stop/stop-color-with-inherit-5.png", "diff/resvg/paint-servers/stop/stop-color-with-inherit-5.png", false), 0)} -#[ignore] #[test] fn resvg_paint_servers_stop_equal_stop_color() {assert_eq!(run_test("svg/resvg/paint-servers/stop/equal-stop-color.svg", "ref/resvg/paint-servers/stop/equal-stop-color.png", "diff/resvg/paint-servers/stop/equal-stop-color.png", false), 0)} +#[test] fn resvg_paint_servers_stop_equal_stop_color() {assert_eq!(run_test("svg/resvg/paint-servers/stop/equal-stop-color.svg", "ref/resvg/paint-servers/stop/equal-stop-color.png", "diff/resvg/paint-servers/stop/equal-stop-color.png", false), 0)} #[test] fn resvg_paint_servers_stop_stop_color_with_inherit_2() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-color-with-inherit-2.svg", "ref/resvg/paint-servers/stop/stop-color-with-inherit-2.png", "diff/resvg/paint-servers/stop/stop-color-with-inherit-2.png", false), 0)} #[test] fn resvg_paint_servers_stop_stop_color_with_inherit_3() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-color-with-inherit-3.svg", "ref/resvg/paint-servers/stop/stop-color-with-inherit-3.png", "diff/resvg/paint-servers/stop/stop-color-with-inherit-3.png", false), 0)} #[test] fn resvg_paint_servers_stop_stop_color_with_inherit_1() {assert_eq!(run_test("svg/resvg/paint-servers/stop/stop-color-with-inherit-1.svg", "ref/resvg/paint-servers/stop/stop-color-with-inherit-1.png", "diff/resvg/paint-servers/stop/stop-color-with-inherit-1.png", false), 0)} @@ -494,21 +514,25 @@ use crate::run_test; #[test] fn resvg_paint_servers_linearGradient_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/gradientTransform.svg", "ref/resvg/paint-servers/linearGradient/gradientTransform.png", "diff/resvg/paint-servers/linearGradient/gradientTransform.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_gradientUnits_userSpaceOnUse() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse.svg", "ref/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse.png", "diff/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_recursive_xlink_href_3() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/recursive-xlink-href-3.svg", "ref/resvg/paint-servers/linearGradient/recursive-xlink-href-3.png", "diff/resvg/paint-servers/linearGradient/recursive-xlink-href-3.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_linearGradient_attributes_via_xlink_href_from_radialGradient() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-radialGradient.svg", "ref/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-radialGradient.png", "diff/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-radialGradient.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_recursive_xlink_href_2() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/recursive-xlink-href-2.svg", "ref/resvg/paint-servers/linearGradient/recursive-xlink-href-2.png", "diff/resvg/paint-servers/linearGradient/recursive-xlink-href-2.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_recursive_xlink_href_1() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/recursive-xlink-href-1.svg", "ref/resvg/paint-servers/linearGradient/recursive-xlink-href-1.png", "diff/resvg/paint-servers/linearGradient/recursive-xlink-href-1.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_single_stop_with_opacity_used_by_stroke() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-stroke.svg", "ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-stroke.png", "diff/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-stroke.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_single_stop() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/single-stop.svg", "ref/resvg/paint-servers/linearGradient/single-stop.png", "diff/resvg/paint-servers/linearGradient/single-stop.png", false), 0)} -#[ignore] #[test] fn resvg_paint_servers_linearGradient_invalid_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/invalid-gradientTransform.svg", "ref/resvg/paint-servers/linearGradient/invalid-gradientTransform.png", "diff/resvg/paint-servers/linearGradient/invalid-gradientTransform.png", false), 0)} +#[test] fn resvg_paint_servers_linearGradient_invalid_gradientTransform() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/invalid-gradientTransform.svg", "ref/resvg/paint-servers/linearGradient/invalid-gradientTransform.png", "diff/resvg/paint-servers/linearGradient/invalid-gradientTransform.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_stops_via_xlink_href_from_rect() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/stops-via-xlink-href-from-rect.svg", "ref/resvg/paint-servers/linearGradient/stops-via-xlink-href-from-rect.png", "diff/resvg/paint-servers/linearGradient/stops-via-xlink-href-from-rect.png", false), 0)} +// spreadMethod repeat not supported #[ignore] #[test] fn resvg_paint_servers_linearGradient_spreadMethod_repeat() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/spreadMethod=repeat.svg", "ref/resvg/paint-servers/linearGradient/spreadMethod=repeat.png", "diff/resvg/paint-servers/linearGradient/spreadMethod=repeat.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_unresolved_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/unresolved-xlink-href.svg", "ref/resvg/paint-servers/linearGradient/unresolved-xlink-href.png", "diff/resvg/paint-servers/linearGradient/unresolved-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_invalid_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/invalid-xlink-href.svg", "ref/resvg/paint-servers/linearGradient/invalid-xlink-href.png", "diff/resvg/paint-servers/linearGradient/invalid-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_attributes_via_xlink_href_from_rect() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-rect.svg", "ref/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-rect.png", "diff/resvg/paint-servers/linearGradient/attributes-via-xlink-href-from-rect.png", false), 0)} -#[ignore] #[test] fn resvg_paint_servers_linearGradient_single_stop_with_opacity_used_by_fill_and_stroke() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.svg", "ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png", "diff/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png", false), 0)} +#[test] fn resvg_paint_servers_linearGradient_single_stop_with_opacity_used_by_fill_and_stroke() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.svg", "ref/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png", "diff/resvg/paint-servers/linearGradient/single-stop-with-opacity-used-by-fill-and-stroke.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_linearGradient_attributes_via_xlink_href_complex_order() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/attributes-via-xlink-href-complex-order.svg", "ref/resvg/paint-servers/linearGradient/attributes-via-xlink-href-complex-order.png", "diff/resvg/paint-servers/linearGradient/attributes-via-xlink-href-complex-order.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_gradientUnits_userSpaceOnUse_with_percent() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse-with-percent.svg", "ref/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse-with-percent.png", "diff/resvg/paint-servers/linearGradient/gradientUnits=userSpaceOnUse-with-percent.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_self_recursive_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/self-recursive-xlink-href.svg", "ref/resvg/paint-servers/linearGradient/self-recursive-xlink-href.png", "diff/resvg/paint-servers/linearGradient/self-recursive-xlink-href.png", false), 0)} +// spreadMethod reflect not supported #[ignore] #[test] fn resvg_paint_servers_linearGradient_spreadMethod_reflect() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/spreadMethod=reflect.svg", "ref/resvg/paint-servers/linearGradient/spreadMethod=reflect.png", "diff/resvg/paint-servers/linearGradient/spreadMethod=reflect.png", false), 0)} #[test] fn resvg_paint_servers_linearGradient_default_attributes() {assert_eq!(run_test("svg/resvg/paint-servers/linearGradient/default-attributes.svg", "ref/resvg/paint-servers/linearGradient/default-attributes.png", "diff/resvg/paint-servers/linearGradient/default-attributes.png", false), 0)} #[test] fn resvg_paint_servers_stop_color_simple_case() {assert_eq!(run_test("svg/resvg/paint-servers/stop-color/simple-case.svg", "ref/resvg/paint-servers/stop-color/simple-case.png", "diff/resvg/paint-servers/stop-color/simple-case.png", false), 0)} @@ -527,6 +551,7 @@ use crate::run_test; #[test] fn resvg_paint_servers_pattern_out_of_order_referencing() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/out-of-order-referencing.svg", "ref/resvg/paint-servers/pattern/out-of-order-referencing.png", "diff/resvg/paint-servers/pattern/out-of-order-referencing.png", false), 0)} #[test] fn resvg_paint_servers_pattern_with_patternTransform() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/with-patternTransform.svg", "ref/resvg/paint-servers/pattern/with-patternTransform.png", "diff/resvg/paint-servers/pattern/with-patternTransform.png", false), 0)} #[test] fn resvg_paint_servers_pattern_with_x_and_y() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/with-x-and-y.svg", "ref/resvg/paint-servers/pattern/with-x-and-y.png", "diff/resvg/paint-servers/pattern/with-x-and-y.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_paint_servers_pattern_nested_objectBoundingBox() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/nested-objectBoundingBox.svg", "ref/resvg/paint-servers/pattern/nested-objectBoundingBox.png", "diff/resvg/paint-servers/pattern/nested-objectBoundingBox.png", false), 0)} #[test] fn resvg_paint_servers_pattern_preserveAspectRatio() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/preserveAspectRatio.svg", "ref/resvg/paint-servers/pattern/preserveAspectRatio.png", "diff/resvg/paint-servers/pattern/preserveAspectRatio.png", false), 0)} #[test] fn resvg_paint_servers_pattern_simple_case() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/simple-case.svg", "ref/resvg/paint-servers/pattern/simple-case.png", "diff/resvg/paint-servers/pattern/simple-case.png", false), 0)} @@ -536,28 +561,30 @@ use crate::run_test; #[test] fn resvg_paint_servers_pattern_children_via_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/children-via-xlink-href.svg", "ref/resvg/paint-servers/pattern/children-via-xlink-href.png", "diff/resvg/paint-servers/pattern/children-via-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_pattern_invalid_patternUnits_and_patternContentUnits() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/invalid-patternUnits-and-patternContentUnits.svg", "ref/resvg/paint-servers/pattern/invalid-patternUnits-and-patternContentUnits.png", "diff/resvg/paint-servers/pattern/invalid-patternUnits-and-patternContentUnits.png", false), 0)} #[test] fn resvg_paint_servers_pattern_pattern_on_child() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/pattern-on-child.svg", "ref/resvg/paint-servers/pattern/pattern-on-child.png", "diff/resvg/paint-servers/pattern/pattern-on-child.png", false), 0)} -#[ignore] #[test] fn resvg_paint_servers_pattern_overflow_visible() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/overflow=visible.svg", "ref/resvg/paint-servers/pattern/overflow=visible.png", "diff/resvg/paint-servers/pattern/overflow=visible.png", false), 0)} +#[test] fn resvg_paint_servers_pattern_overflow_visible() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/overflow=visible.svg", "ref/resvg/paint-servers/pattern/overflow=visible.png", "diff/resvg/paint-servers/pattern/overflow=visible.png", false), 0)} #[test] fn resvg_paint_servers_pattern_child_with_invalid_FuncIRI() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/child-with-invalid-FuncIRI.svg", "ref/resvg/paint-servers/pattern/child-with-invalid-FuncIRI.png", "diff/resvg/paint-servers/pattern/child-with-invalid-FuncIRI.png", false), 0)} #[test] fn resvg_paint_servers_pattern_self_recursive() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/self-recursive.svg", "ref/resvg/paint-servers/pattern/self-recursive.png", "diff/resvg/paint-servers/pattern/self-recursive.png", false), 0)} #[test] fn resvg_paint_servers_pattern_text_child() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/text-child.svg", "ref/resvg/paint-servers/pattern/text-child.png", "diff/resvg/paint-servers/pattern/text-child.png", false), 0)} +#[test] fn resvg_paint_servers_pattern_invalid_patternTransform() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/invalid-patternTransform.svg", "ref/resvg/paint-servers/pattern/invalid-patternTransform.png", "diff/resvg/paint-servers/pattern/invalid-patternTransform.png", false), 0)} #[test] fn resvg_paint_servers_pattern_viewBox_via_xlink_href() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/viewBox-via-xlink-href.svg", "ref/resvg/paint-servers/pattern/viewBox-via-xlink-href.png", "diff/resvg/paint-servers/pattern/viewBox-via-xlink-href.png", false), 0)} #[test] fn resvg_paint_servers_pattern_self_recursive_on_child() {assert_eq!(run_test("svg/resvg/paint-servers/pattern/self-recursive-on-child.svg", "ref/resvg/paint-servers/pattern/self-recursive-on-child.png", "diff/resvg/paint-servers/pattern/self-recursive-on-child.png", false), 0)} #[test] fn resvg_shapes_rect_with_child() {assert_eq!(run_test("svg/resvg/shapes/rect/with-child.svg", "ref/resvg/shapes/rect/with-child.png", "diff/resvg/shapes/rect/with-child.png", false), 0)} #[test] fn resvg_shapes_rect_y_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/y-attribute-resolving.svg", "ref/resvg/shapes/rect/y-attribute-resolving.png", "diff/resvg/shapes/rect/y-attribute-resolving.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_vi_and_vb_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vi-and-vb-values.svg", "ref/resvg/shapes/rect/vi-and-vb-values.png", "diff/resvg/shapes/rect/vi-and-vb-values.png", false), 0)} +#[test] fn resvg_shapes_rect_vi_and_vb_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vi-and-vb-values.svg", "ref/resvg/shapes/rect/vi-and-vb-values.png", "diff/resvg/shapes/rect/vi-and-vb-values.png", false), 0)} #[test] fn resvg_shapes_rect_ry_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/ry-attribute-resolving.svg", "ref/resvg/shapes/rect/ry-attribute-resolving.png", "diff/resvg/shapes/rect/ry-attribute-resolving.png", false), 0)} #[test] fn resvg_shapes_rect_ry_attribute_clamping() {assert_eq!(run_test("svg/resvg/shapes/rect/ry-attribute-clamping.svg", "ref/resvg/shapes/rect/ry-attribute-clamping.png", "diff/resvg/shapes/rect/ry-attribute-clamping.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_ch_values() {assert_eq!(run_test("svg/resvg/shapes/rect/ch-values.svg", "ref/resvg/shapes/rect/ch-values.png", "diff/resvg/shapes/rect/ch-values.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_cap_values() {assert_eq!(run_test("svg/resvg/shapes/rect/cap-values.svg", "ref/resvg/shapes/rect/cap-values.png", "diff/resvg/shapes/rect/cap-values.png", false), 0)} +#[test] fn resvg_shapes_rect_ch_values() {assert_eq!(run_test("svg/resvg/shapes/rect/ch-values.svg", "ref/resvg/shapes/rect/ch-values.png", "diff/resvg/shapes/rect/ch-values.png", false), 0)} +#[test] fn resvg_shapes_rect_cap_values() {assert_eq!(run_test("svg/resvg/shapes/rect/cap-values.svg", "ref/resvg/shapes/rect/cap-values.png", "diff/resvg/shapes/rect/cap-values.png", false), 0)} #[test] fn resvg_shapes_rect_zero_width_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/zero-width-attribute-processing.svg", "ref/resvg/shapes/rect/zero-width-attribute-processing.png", "diff/resvg/shapes/rect/zero-width-attribute-processing.png", false), 0)} #[test] fn resvg_shapes_rect_zero_rx_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/zero-rx-attribute-resolving.svg", "ref/resvg/shapes/rect/zero-rx-attribute-resolving.png", "diff/resvg/shapes/rect/zero-rx-attribute-resolving.png", false), 0)} #[test] fn resvg_shapes_rect_em_values() {assert_eq!(run_test("svg/resvg/shapes/rect/em-values.svg", "ref/resvg/shapes/rect/em-values.png", "diff/resvg/shapes/rect/em-values.png", false), 0)} #[test] fn resvg_shapes_rect_invalid_length() {assert_eq!(run_test("svg/resvg/shapes/rect/invalid-length.svg", "ref/resvg/shapes/rect/invalid-length.png", "diff/resvg/shapes/rect/invalid-length.png", false), 0)} #[test] fn resvg_shapes_rect_rx_attribute_clamping() {assert_eq!(run_test("svg/resvg/shapes/rect/rx-attribute-clamping.svg", "ref/resvg/shapes/rect/rx-attribute-clamping.png", "diff/resvg/shapes/rect/rx-attribute-clamping.png", false), 0)} #[test] fn resvg_shapes_rect_negative_rx_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/negative-rx-attribute-resolving.svg", "ref/resvg/shapes/rect/negative-rx-attribute-resolving.png", "diff/resvg/shapes/rect/negative-rx-attribute-resolving.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_lh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/lh-values.svg", "ref/resvg/shapes/rect/lh-values.png", "diff/resvg/shapes/rect/lh-values.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_vw_and_vh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vw-and-vh-values.svg", "ref/resvg/shapes/rect/vw-and-vh-values.png", "diff/resvg/shapes/rect/vw-and-vh-values.png", false), 0)} +#[test] fn resvg_shapes_rect_lh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/lh-values.svg", "ref/resvg/shapes/rect/lh-values.png", "diff/resvg/shapes/rect/lh-values.png", false), 0)} +#[test] fn resvg_shapes_rect_vw_and_vh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vw-and-vh-values.svg", "ref/resvg/shapes/rect/vw-and-vh-values.png", "diff/resvg/shapes/rect/vw-and-vh-values.png", false), 0)} #[test] fn resvg_shapes_rect_simple_case() {assert_eq!(run_test("svg/resvg/shapes/rect/simple-case.svg", "ref/resvg/shapes/rect/simple-case.png", "diff/resvg/shapes/rect/simple-case.png", false), 0)} +#[test] fn resvg_shapes_rect_ic_values() {assert_eq!(run_test("svg/resvg/shapes/rect/ic-values.svg", "ref/resvg/shapes/rect/ic-values.png", "diff/resvg/shapes/rect/ic-values.png", false), 0)} #[test] fn resvg_shapes_rect_negative_width_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/negative-width-attribute-processing.svg", "ref/resvg/shapes/rect/negative-width-attribute-processing.png", "diff/resvg/shapes/rect/negative-width-attribute-processing.png", false), 0)} #[test] fn resvg_shapes_rect_rounded_rect() {assert_eq!(run_test("svg/resvg/shapes/rect/rounded-rect.svg", "ref/resvg/shapes/rect/rounded-rect.png", "diff/resvg/shapes/rect/rounded-rect.png", false), 0)} #[test] fn resvg_shapes_rect_missing_height_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/missing-height-attribute-processing.svg", "ref/resvg/shapes/rect/missing-height-attribute-processing.png", "diff/resvg/shapes/rect/missing-height-attribute-processing.png", false), 0)} @@ -566,16 +593,16 @@ use crate::run_test; #[test] fn resvg_shapes_rect_negative_height_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/negative-height-attribute-processing.svg", "ref/resvg/shapes/rect/negative-height-attribute-processing.png", "diff/resvg/shapes/rect/negative-height-attribute-processing.png", false), 0)} #[test] fn resvg_shapes_rect_rx_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/rx-attribute-resolving.svg", "ref/resvg/shapes/rect/rx-attribute-resolving.png", "diff/resvg/shapes/rect/rx-attribute-resolving.png", false), 0)} #[test] fn resvg_shapes_rect_x_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/x-attribute-resolving.svg", "ref/resvg/shapes/rect/x-attribute-resolving.png", "diff/resvg/shapes/rect/x-attribute-resolving.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_rlh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/rlh-values.svg", "ref/resvg/shapes/rect/rlh-values.png", "diff/resvg/shapes/rect/rlh-values.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_vmin_and_vmax_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vmin-and-vmax-values.svg", "ref/resvg/shapes/rect/vmin-and-vmax-values.png", "diff/resvg/shapes/rect/vmin-and-vmax-values.png", false), 0)} +#[test] fn resvg_shapes_rect_rlh_values() {assert_eq!(run_test("svg/resvg/shapes/rect/rlh-values.svg", "ref/resvg/shapes/rect/rlh-values.png", "diff/resvg/shapes/rect/rlh-values.png", false), 0)} +#[test] fn resvg_shapes_rect_vmin_and_vmax_values() {assert_eq!(run_test("svg/resvg/shapes/rect/vmin-and-vmax-values.svg", "ref/resvg/shapes/rect/vmin-and-vmax-values.png", "diff/resvg/shapes/rect/vmin-and-vmax-values.png", false), 0)} #[test] fn resvg_shapes_rect_percentage_values_2() {assert_eq!(run_test("svg/resvg/shapes/rect/percentage-values-2.svg", "ref/resvg/shapes/rect/percentage-values-2.png", "diff/resvg/shapes/rect/percentage-values-2.png", false), 0)} #[test] fn resvg_shapes_rect_negative_ry_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/negative-ry-attribute-resolving.svg", "ref/resvg/shapes/rect/negative-ry-attribute-resolving.png", "diff/resvg/shapes/rect/negative-ry-attribute-resolving.png", false), 0)} #[test] fn resvg_shapes_rect_zero_height_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/zero-height-attribute-processing.svg", "ref/resvg/shapes/rect/zero-height-attribute-processing.png", "diff/resvg/shapes/rect/zero-height-attribute-processing.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_q_values() {assert_eq!(run_test("svg/resvg/shapes/rect/q-values.svg", "ref/resvg/shapes/rect/q-values.png", "diff/resvg/shapes/rect/q-values.png", false), 0)} +#[test] fn resvg_shapes_rect_q_values() {assert_eq!(run_test("svg/resvg/shapes/rect/q-values.svg", "ref/resvg/shapes/rect/q-values.png", "diff/resvg/shapes/rect/q-values.png", false), 0)} #[test] fn resvg_shapes_rect_rx_and_ry_attributes_clamping_order() {assert_eq!(run_test("svg/resvg/shapes/rect/rx-and-ry-attributes-clamping-order.svg", "ref/resvg/shapes/rect/rx-and-ry-attributes-clamping-order.png", "diff/resvg/shapes/rect/rx-and-ry-attributes-clamping-order.png", false), 0)} #[test] fn resvg_shapes_rect_missing_width_attribute_processing() {assert_eq!(run_test("svg/resvg/shapes/rect/missing-width-attribute-processing.svg", "ref/resvg/shapes/rect/missing-width-attribute-processing.png", "diff/resvg/shapes/rect/missing-width-attribute-processing.png", false), 0)} #[test] fn resvg_shapes_rect_percentage_values_1() {assert_eq!(run_test("svg/resvg/shapes/rect/percentage-values-1.svg", "ref/resvg/shapes/rect/percentage-values-1.png", "diff/resvg/shapes/rect/percentage-values-1.png", false), 0)} -#[ignore] #[test] fn resvg_shapes_rect_rem_values() {assert_eq!(run_test("svg/resvg/shapes/rect/rem-values.svg", "ref/resvg/shapes/rect/rem-values.png", "diff/resvg/shapes/rect/rem-values.png", false), 0)} +#[test] fn resvg_shapes_rect_rem_values() {assert_eq!(run_test("svg/resvg/shapes/rect/rem-values.svg", "ref/resvg/shapes/rect/rem-values.png", "diff/resvg/shapes/rect/rem-values.png", false), 0)} #[test] fn resvg_shapes_rect_zero_ry_attribute_resolving() {assert_eq!(run_test("svg/resvg/shapes/rect/zero-ry-attribute-resolving.svg", "ref/resvg/shapes/rect/zero-ry-attribute-resolving.png", "diff/resvg/shapes/rect/zero-ry-attribute-resolving.png", false), 0)} #[test] fn resvg_shapes_rect_mm_values() {assert_eq!(run_test("svg/resvg/shapes/rect/mm-values.svg", "ref/resvg/shapes/rect/mm-values.png", "diff/resvg/shapes/rect/mm-values.png", false), 0)} #[test] fn resvg_shapes_rect_invalid_coordinates() {assert_eq!(run_test("svg/resvg/shapes/rect/invalid-coordinates.svg", "ref/resvg/shapes/rect/invalid-coordinates.png", "diff/resvg/shapes/rect/invalid-coordinates.png", false), 0)} @@ -701,16 +728,17 @@ use crate::run_test; #[test] fn resvg_painting_visibility_bbox_impact_1() {assert_eq!(run_test("svg/resvg/painting/visibility/bbox-impact-1.svg", "ref/resvg/painting/visibility/bbox-impact-1.png", "diff/resvg/painting/visibility/bbox-impact-1.png", false), 0)} #[test] fn resvg_painting_visibility_bbox_impact_2() {assert_eq!(run_test("svg/resvg/painting/visibility/bbox-impact-2.svg", "ref/resvg/painting/visibility/bbox-impact-2.png", "diff/resvg/painting/visibility/bbox-impact-2.png", false), 0)} #[test] fn resvg_painting_visibility_bbox_impact_3() {assert_eq!(run_test("svg/resvg/painting/visibility/bbox-impact-3.svg", "ref/resvg/painting/visibility/bbox-impact-3.png", "diff/resvg/painting/visibility/bbox-impact-3.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dashoffset_mm_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/mm-units.svg", "ref/resvg/painting/stroke-dashoffset/mm-units.png", "diff/resvg/painting/stroke-dashoffset/mm-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dashoffset_mm_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/mm-units.svg", "ref/resvg/painting/stroke-dashoffset/mm-units.png", "diff/resvg/painting/stroke-dashoffset/mm-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dashoffset_em_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/em-units.svg", "ref/resvg/painting/stroke-dashoffset/em-units.png", "diff/resvg/painting/stroke-dashoffset/em-units.png", false), 0)} #[test] fn resvg_painting_stroke_dashoffset_negative_value() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/negative-value.svg", "ref/resvg/painting/stroke-dashoffset/negative-value.png", "diff/resvg/painting/stroke-dashoffset/negative-value.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dashoffset_percent_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/percent-units.svg", "ref/resvg/painting/stroke-dashoffset/percent-units.png", "diff/resvg/painting/stroke-dashoffset/percent-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dashoffset_percent_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/percent-units.svg", "ref/resvg/painting/stroke-dashoffset/percent-units.png", "diff/resvg/painting/stroke-dashoffset/percent-units.png", false), 0)} #[test] fn resvg_painting_stroke_dashoffset_default() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/default.svg", "ref/resvg/painting/stroke-dashoffset/default.png", "diff/resvg/painting/stroke-dashoffset/default.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dashoffset_px_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/px-units.svg", "ref/resvg/painting/stroke-dashoffset/px-units.png", "diff/resvg/painting/stroke-dashoffset/px-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dashoffset_px_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dashoffset/px-units.svg", "ref/resvg/painting/stroke-dashoffset/px-units.png", "diff/resvg/painting/stroke-dashoffset/px-units.png", false), 0)} #[test] fn resvg_painting_fill_RRGGBB_uppercase_color() {assert_eq!(run_test("svg/resvg/painting/fill/#RRGGBB-uppercase-color.svg", "ref/resvg/painting/fill/#RRGGBB-uppercase-color.png", "diff/resvg/painting/fill/#RRGGBB-uppercase-color.png", false), 0)} #[test] fn resvg_painting_fill_RGB_color() {assert_eq!(run_test("svg/resvg/painting/fill/#RGB-color.svg", "ref/resvg/painting/fill/#RGB-color.png", "diff/resvg/painting/fill/#RGB-color.png", false), 0)} #[test] fn resvg_painting_fill_radial_gradient_on_text() {assert_eq!(run_test("svg/resvg/painting/fill/radial-gradient-on-text.svg", "ref/resvg/painting/fill/radial-gradient-on-text.png", "diff/resvg/painting/fill/radial-gradient-on-text.png", false), 0)} #[test] fn resvg_painting_fill_named_color_in_uppercase() {assert_eq!(run_test("svg/resvg/painting/fill/named-color-in-uppercase.svg", "ref/resvg/painting/fill/named-color-in-uppercase.png", "diff/resvg/painting/fill/named-color-in-uppercase.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_rgb_int_int_int() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-int-int-int.svg", "ref/resvg/painting/fill/rgb-int-int-int.png", "diff/resvg/painting/fill/rgb-int-int-int.png", false), 0)} +#[test] fn resvg_painting_fill_rgb_int_int_int() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-int-int-int.svg", "ref/resvg/painting/fill/rgb-int-int-int.png", "diff/resvg/painting/fill/rgb-int-int-int.png", false), 0)} #[test] fn resvg_painting_fill_random_value() {assert_eq!(run_test("svg/resvg/painting/fill/random-value.svg", "ref/resvg/painting/fill/random-value.png", "diff/resvg/painting/fill/random-value.png", false), 0)} #[test] fn resvg_painting_fill_rgb_color_with_extra_spaces() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-color-with-extra-spaces.svg", "ref/resvg/painting/fill/rgb-color-with-extra-spaces.png", "diff/resvg/painting/fill/rgb-color-with-extra-spaces.png", false), 0)} #[test] fn resvg_painting_fill_named_color_in_mixedcase() {assert_eq!(run_test("svg/resvg/painting/fill/named-color-in-mixedcase.svg", "ref/resvg/painting/fill/named-color-in-mixedcase.png", "diff/resvg/painting/fill/named-color-in-mixedcase.png", false), 0)} @@ -721,16 +749,16 @@ use crate::run_test; #[test] fn resvg_painting_fill_not_trimmed_attribute_value() {assert_eq!(run_test("svg/resvg/painting/fill/not-trimmed-attribute-value.svg", "ref/resvg/painting/fill/not-trimmed-attribute-value.png", "diff/resvg/painting/fill/not-trimmed-attribute-value.png", false), 0)} #[test] fn resvg_painting_fill_funcIRI_to_a_missing_element_with_a_none_fallback() {assert_eq!(run_test("svg/resvg/painting/fill/funcIRI-to-a-missing-element-with-a-none-fallback.svg", "ref/resvg/painting/fill/funcIRI-to-a-missing-element-with-a-none-fallback.png", "diff/resvg/painting/fill/funcIRI-to-a-missing-element-with-a-none-fallback.png", false), 0)} #[test] fn resvg_painting_fill_inherit_without_parent() {assert_eq!(run_test("svg/resvg/painting/fill/inherit-without-parent.svg", "ref/resvg/painting/fill/inherit-without-parent.png", "diff/resvg/painting/fill/inherit-without-parent.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_valid_FuncIRI_with_a_fallback_ICC_color() {assert_eq!(run_test("svg/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.svg", "ref/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.png", "diff/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.png", false), 0)} +#[test] fn resvg_painting_fill_valid_FuncIRI_with_a_fallback_ICC_color() {assert_eq!(run_test("svg/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.svg", "ref/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.png", "diff/resvg/painting/fill/valid-FuncIRI-with-a-fallback-ICC-color.png", false), 0)} #[test] fn resvg_painting_fill_radial_gradient_on_shape() {assert_eq!(run_test("svg/resvg/painting/fill/radial-gradient-on-shape.svg", "ref/resvg/painting/fill/radial-gradient-on-shape.png", "diff/resvg/painting/fill/radial-gradient-on-shape.png", false), 0)} #[test] fn resvg_painting_fill_hsl_120_200percent_25percent() {assert_eq!(run_test("svg/resvg/painting/fill/hsl-120-200percent-25percent.svg", "ref/resvg/painting/fill/hsl-120-200percent-25percent.png", "diff/resvg/painting/fill/hsl-120-200percent-25percent.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_RGBA() {assert_eq!(run_test("svg/resvg/painting/fill/#RGBA.svg", "ref/resvg/painting/fill/#RGBA.png", "diff/resvg/painting/fill/#RGBA.png", false), 0)} +#[test] fn resvg_painting_fill_RGBA() {assert_eq!(run_test("svg/resvg/painting/fill/#RGBA.svg", "ref/resvg/painting/fill/#RGBA.png", "diff/resvg/painting/fill/#RGBA.png", false), 0)} #[test] fn resvg_painting_fill_rgb_color_with_a_big_fraction_part() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-color-with-a-big-fraction-part.svg", "ref/resvg/painting/fill/rgb-color-with-a-big-fraction-part.png", "diff/resvg/painting/fill/rgb-color-with-a-big-fraction-part.png", false), 0)} #[test] fn resvg_painting_fill_pattern_on_shape() {assert_eq!(run_test("svg/resvg/painting/fill/pattern-on-shape.svg", "ref/resvg/painting/fill/pattern-on-shape.png", "diff/resvg/painting/fill/pattern-on-shape.png", false), 0)} #[test] fn resvg_painting_fill_uppercase_rgb_color() {assert_eq!(run_test("svg/resvg/painting/fill/uppercase-rgb-color.svg", "ref/resvg/painting/fill/uppercase-rgb-color.png", "diff/resvg/painting/fill/uppercase-rgb-color.png", false), 0)} #[test] fn resvg_painting_fill_double_inherit() {assert_eq!(run_test("svg/resvg/painting/fill/double-inherit.svg", "ref/resvg/painting/fill/double-inherit.png", "diff/resvg/painting/fill/double-inherit.png", false), 0)} #[test] fn resvg_painting_fill_pattern_on_text() {assert_eq!(run_test("svg/resvg/painting/fill/pattern-on-text.svg", "ref/resvg/painting/fill/pattern-on-text.png", "diff/resvg/painting/fill/pattern-on-text.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_rgba_0_127_0_50percent() {assert_eq!(run_test("svg/resvg/painting/fill/rgba-0-127-0-50percent.svg", "ref/resvg/painting/fill/rgba-0-127-0-50percent.png", "diff/resvg/painting/fill/rgba-0-127-0-50percent.png", false), 0)} +#[test] fn resvg_painting_fill_rgba_0_127_0_50percent() {assert_eq!(run_test("svg/resvg/painting/fill/rgba-0-127-0-50percent.svg", "ref/resvg/painting/fill/rgba-0-127-0-50percent.png", "diff/resvg/painting/fill/rgba-0-127-0-50percent.png", false), 0)} #[test] fn resvg_painting_fill_missing_FuncIRI_with_a_currentColor_fallback() {assert_eq!(run_test("svg/resvg/painting/fill/missing-FuncIRI-with-a-currentColor-fallback.svg", "ref/resvg/painting/fill/missing-FuncIRI-with-a-currentColor-fallback.png", "diff/resvg/painting/fill/missing-FuncIRI-with-a-currentColor-fallback.png", false), 0)} #[test] fn resvg_painting_fill_rgb_0_127_0_0_5() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-0-127-0-0.5.svg", "ref/resvg/painting/fill/rgb-0-127-0-0.5.png", "diff/resvg/painting/fill/rgb-0-127-0-0.5.png", false), 0)} #[test] fn resvg_painting_fill_rgba_0_50percent_0_0_5() {assert_eq!(run_test("svg/resvg/painting/fill/rgba-0-50percent-0-0.5.svg", "ref/resvg/painting/fill/rgba-0-50percent-0-0.5.png", "diff/resvg/painting/fill/rgba-0-50percent-0-0.5.png", false), 0)} @@ -752,8 +780,8 @@ use crate::run_test; #[test] fn resvg_painting_fill_none() {assert_eq!(run_test("svg/resvg/painting/fill/none.svg", "ref/resvg/painting/fill/none.png", "diff/resvg/painting/fill/none.png", false), 0)} #[test] fn resvg_painting_fill_RRGGBB_color() {assert_eq!(run_test("svg/resvg/painting/fill/#RRGGBB-color.svg", "ref/resvg/painting/fill/#RRGGBB-color.png", "diff/resvg/painting/fill/#RRGGBB-color.png", false), 0)} #[test] fn resvg_painting_fill_linear_gradient_on_text() {assert_eq!(run_test("svg/resvg/painting/fill/linear-gradient-on-text.svg", "ref/resvg/painting/fill/linear-gradient-on-text.png", "diff/resvg/painting/fill/linear-gradient-on-text.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_icc_color() {assert_eq!(run_test("svg/resvg/painting/fill/icc-color.svg", "ref/resvg/painting/fill/icc-color.png", "diff/resvg/painting/fill/icc-color.png", false), 0)} -#[ignore] #[test] fn resvg_painting_fill_RRGGBBAA() {assert_eq!(run_test("svg/resvg/painting/fill/#RRGGBBAA.svg", "ref/resvg/painting/fill/#RRGGBBAA.png", "diff/resvg/painting/fill/#RRGGBBAA.png", false), 0)} +#[test] fn resvg_painting_fill_icc_color() {assert_eq!(run_test("svg/resvg/painting/fill/icc-color.svg", "ref/resvg/painting/fill/icc-color.png", "diff/resvg/painting/fill/icc-color.png", false), 0)} +#[test] fn resvg_painting_fill_RRGGBBAA() {assert_eq!(run_test("svg/resvg/painting/fill/#RRGGBBAA.svg", "ref/resvg/painting/fill/#RRGGBBAA.png", "diff/resvg/painting/fill/#RRGGBBAA.png", false), 0)} #[test] fn resvg_painting_fill_rgba_0_127_0_0_5() {assert_eq!(run_test("svg/resvg/painting/fill/rgba-0-127-0-0.5.svg", "ref/resvg/painting/fill/rgba-0-127-0-0.5.png", "diff/resvg/painting/fill/rgba-0-127-0-0.5.png", false), 0)} #[test] fn resvg_painting_fill_funcIRI_with_a_fallback_color() {assert_eq!(run_test("svg/resvg/painting/fill/funcIRI-with-a-fallback-color.svg", "ref/resvg/painting/fill/funcIRI-with-a-fallback-color.png", "diff/resvg/painting/fill/funcIRI-with-a-fallback-color.png", false), 0)} #[test] fn resvg_painting_fill_rgb_color_with_floats() {assert_eq!(run_test("svg/resvg/painting/fill/rgb-color-with-floats.svg", "ref/resvg/painting/fill/rgb-color-with-floats.png", "diff/resvg/painting/fill/rgb-color-with-floats.png", false), 0)} @@ -799,17 +827,19 @@ use crate::run_test; #[test] fn resvg_painting_stroke_linecap_butt() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/butt.svg", "ref/resvg/painting/stroke-linecap/butt.png", "diff/resvg/painting/stroke-linecap/butt.png", false), 0)} #[test] fn resvg_painting_stroke_linecap_open_path_with_square() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/open-path-with-square.svg", "ref/resvg/painting/stroke-linecap/open-path-with-square.png", "diff/resvg/painting/stroke-linecap/open-path-with-square.png", false), 0)} #[test] fn resvg_painting_stroke_linecap_round() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/round.svg", "ref/resvg/painting/stroke-linecap/round.png", "diff/resvg/painting/stroke-linecap/round.png", false), 0)} +// not supported in PDF #[ignore] #[test] fn resvg_painting_stroke_linecap_zero_length_path_with_square() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/zero-length-path-with-square.svg", "ref/resvg/painting/stroke-linecap/zero-length-path-with-square.png", "diff/resvg/painting/stroke-linecap/zero-length-path-with-square.png", false), 0)} #[test] fn resvg_painting_stroke_linecap_square() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/square.svg", "ref/resvg/painting/stroke-linecap/square.png", "diff/resvg/painting/stroke-linecap/square.png", false), 0)} +// not supported in PDF #[ignore] #[test] fn resvg_painting_stroke_linecap_zero_length_path_with_round() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/zero-length-path-with-round.svg", "ref/resvg/painting/stroke-linecap/zero-length-path-with-round.png", "diff/resvg/painting/stroke-linecap/zero-length-path-with-round.png", false), 0)} #[test] fn resvg_painting_stroke_linecap_open_path_with_butt() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/open-path-with-butt.svg", "ref/resvg/painting/stroke-linecap/open-path-with-butt.png", "diff/resvg/painting/stroke-linecap/open-path-with-butt.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_linecap_zero_length_path_with_butt() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/zero-length-path-with-butt.svg", "ref/resvg/painting/stroke-linecap/zero-length-path-with-butt.png", "diff/resvg/painting/stroke-linecap/zero-length-path-with-butt.png", false), 0)} +#[test] fn resvg_painting_stroke_linecap_zero_length_path_with_butt() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/zero-length-path-with-butt.svg", "ref/resvg/painting/stroke-linecap/zero-length-path-with-butt.png", "diff/resvg/painting/stroke-linecap/zero-length-path-with-butt.png", false), 0)} #[test] fn resvg_painting_stroke_linecap_open_path_with_round() {assert_eq!(run_test("svg/resvg/painting/stroke-linecap/open-path-with-round.svg", "ref/resvg/painting/stroke-linecap/open-path-with-round.png", "diff/resvg/painting/stroke-linecap/open-path-with-round.png", false), 0)} #[test] fn resvg_painting_stroke_width_zero() {assert_eq!(run_test("svg/resvg/painting/stroke-width/zero.svg", "ref/resvg/painting/stroke-width/zero.png", "diff/resvg/painting/stroke-width/zero.png", false), 0)} #[test] fn resvg_painting_stroke_width_percentage() {assert_eq!(run_test("svg/resvg/painting/stroke-width/percentage.svg", "ref/resvg/painting/stroke-width/percentage.png", "diff/resvg/painting/stroke-width/percentage.png", false), 0)} #[test] fn resvg_painting_stroke_width_bold() {assert_eq!(run_test("svg/resvg/painting/stroke-width/bold.svg", "ref/resvg/painting/stroke-width/bold.png", "diff/resvg/painting/stroke-width/bold.png", false), 0)} #[test] fn resvg_painting_stroke_width_default() {assert_eq!(run_test("svg/resvg/painting/stroke-width/default.svg", "ref/resvg/painting/stroke-width/default.png", "diff/resvg/painting/stroke-width/default.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_width_negative() {assert_eq!(run_test("svg/resvg/painting/stroke-width/negative.svg", "ref/resvg/painting/stroke-width/negative.png", "diff/resvg/painting/stroke-width/negative.png", false), 0)} +#[test] fn resvg_painting_stroke_width_negative() {assert_eq!(run_test("svg/resvg/painting/stroke-width/negative.svg", "ref/resvg/painting/stroke-width/negative.png", "diff/resvg/painting/stroke-width/negative.png", false), 0)} #[test] fn resvg_painting_overflow_visible_on_marker() {assert_eq!(run_test("svg/resvg/painting/overflow/visible-on-marker.svg", "ref/resvg/painting/overflow/visible-on-marker.png", "diff/resvg/painting/overflow/visible-on-marker.png", false), 0)} #[test] fn resvg_painting_overflow_inherit_on_marker_without_parent() {assert_eq!(run_test("svg/resvg/painting/overflow/inherit-on-marker-without-parent.svg", "ref/resvg/painting/overflow/inherit-on-marker-without-parent.png", "diff/resvg/painting/overflow/inherit-on-marker-without-parent.png", false), 0)} #[test] fn resvg_painting_overflow_auto_on_marker() {assert_eq!(run_test("svg/resvg/painting/overflow/auto-on-marker.svg", "ref/resvg/painting/overflow/auto-on-marker.png", "diff/resvg/painting/overflow/auto-on-marker.png", false), 0)} @@ -827,9 +857,10 @@ use crate::run_test; #[test] fn resvg_painting_isolation_isolate() {assert_eq!(run_test("svg/resvg/painting/isolation/isolate.svg", "ref/resvg/painting/isolation/isolate.png", "diff/resvg/painting/isolation/isolate.png", false), 0)} #[test] fn resvg_painting_isolation_as_property() {assert_eq!(run_test("svg/resvg/painting/isolation/as-property.svg", "ref/resvg/painting/isolation/as-property.png", "diff/resvg/painting/isolation/as-property.png", false), 0)} #[test] fn resvg_painting_stroke_linejoin_miter() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/miter.svg", "ref/resvg/painting/stroke-linejoin/miter.png", "diff/resvg/painting/stroke-linejoin/miter.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_linejoin_arcs() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/arcs.svg", "ref/resvg/painting/stroke-linejoin/arcs.png", "diff/resvg/painting/stroke-linejoin/arcs.png", false), 0)} +#[test] fn resvg_painting_stroke_linejoin_arcs() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/arcs.svg", "ref/resvg/painting/stroke-linejoin/arcs.png", "diff/resvg/painting/stroke-linejoin/arcs.png", false), 0)} #[test] fn resvg_painting_stroke_linejoin_round() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/round.svg", "ref/resvg/painting/stroke-linejoin/round.png", "diff/resvg/painting/stroke-linejoin/round.png", false), 0)} #[test] fn resvg_painting_stroke_linejoin_bevel() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/bevel.svg", "ref/resvg/painting/stroke-linejoin/bevel.png", "diff/resvg/painting/stroke-linejoin/bevel.png", false), 0)} +// not supported in PDF #[ignore] #[test] fn resvg_painting_stroke_linejoin_miter_clip() {assert_eq!(run_test("svg/resvg/painting/stroke-linejoin/miter-clip.svg", "ref/resvg/painting/stroke-linejoin/miter-clip.png", "diff/resvg/painting/stroke-linejoin/miter-clip.png", false), 0)} #[test] fn resvg_painting_stroke_miterlimit_valid_value() {assert_eq!(run_test("svg/resvg/painting/stroke-miterlimit/valid-value.svg", "ref/resvg/painting/stroke-miterlimit/valid-value.png", "diff/resvg/painting/stroke-miterlimit/valid-value.png", false), 0)} #[test] fn resvg_painting_stroke_miterlimit_value_with_mm() {assert_eq!(run_test("svg/resvg/painting/stroke-miterlimit/value-with-mm.svg", "ref/resvg/painting/stroke-miterlimit/value-with-mm.png", "diff/resvg/painting/stroke-miterlimit/value-with-mm.png", false), 0)} @@ -853,23 +884,24 @@ use crate::run_test; #[test] fn resvg_painting_fill_opacity_nested() {assert_eq!(run_test("svg/resvg/painting/fill-opacity/nested.svg", "ref/resvg/painting/fill-opacity/nested.png", "diff/resvg/painting/fill-opacity/nested.png", false), 0)} #[test] fn resvg_painting_fill_opacity_with_opacity() {assert_eq!(run_test("svg/resvg/painting/fill-opacity/with-opacity.svg", "ref/resvg/painting/fill-opacity/with-opacity.png", "diff/resvg/painting/fill-opacity/with-opacity.png", false), 0)} #[test] fn resvg_painting_fill_opacity_50percent() {assert_eq!(run_test("svg/resvg/painting/fill-opacity/50percent.svg", "ref/resvg/painting/fill-opacity/50percent.png", "diff/resvg/painting/fill-opacity/50percent.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_0_n_with_butt_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-butt-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_mm_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/mm-units.svg", "ref/resvg/painting/stroke-dasharray/mm-units.png", "diff/resvg/painting/stroke-dasharray/mm-units.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_negative_sum() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/negative-sum.svg", "ref/resvg/painting/stroke-dasharray/negative-sum.png", "diff/resvg/painting/stroke-dasharray/negative-sum.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_em_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/em-units.svg", "ref/resvg/painting/stroke-dasharray/em-units.png", "diff/resvg/painting/stroke-dasharray/em-units.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_even_count() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/even-count.svg", "ref/resvg/painting/stroke-dasharray/even-count.png", "diff/resvg/painting/stroke-dasharray/even-count.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_0_n_with_butt_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-butt-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-butt-caps.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_mm_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/mm-units.svg", "ref/resvg/painting/stroke-dasharray/mm-units.png", "diff/resvg/painting/stroke-dasharray/mm-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_negative_sum() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/negative-sum.svg", "ref/resvg/painting/stroke-dasharray/negative-sum.png", "diff/resvg/painting/stroke-dasharray/negative-sum.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_em_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/em-units.svg", "ref/resvg/painting/stroke-dasharray/em-units.png", "diff/resvg/painting/stroke-dasharray/em-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_even_count() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/even-count.svg", "ref/resvg/painting/stroke-dasharray/even-count.png", "diff/resvg/painting/stroke-dasharray/even-count.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_ws_separator() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/ws-separator.svg", "ref/resvg/painting/stroke-dasharray/ws-separator.png", "diff/resvg/painting/stroke-dasharray/ws-separator.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_percent_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/percent-units.svg", "ref/resvg/painting/stroke-dasharray/percent-units.png", "diff/resvg/painting/stroke-dasharray/percent-units.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_0_n_with_square_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-square-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-square-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-square-caps.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_percent_units() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/percent-units.svg", "ref/resvg/painting/stroke-dasharray/percent-units.png", "diff/resvg/painting/stroke-dasharray/percent-units.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_0_n_with_square_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-square-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-square-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-square-caps.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_multiple_subpaths() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/multiple-subpaths.svg", "ref/resvg/painting/stroke-dasharray/multiple-subpaths.png", "diff/resvg/painting/stroke-dasharray/multiple-subpaths.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_negative_values() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/negative-values.svg", "ref/resvg/painting/stroke-dasharray/negative-values.png", "diff/resvg/painting/stroke-dasharray/negative-values.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_negative_values() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/negative-values.svg", "ref/resvg/painting/stroke-dasharray/negative-values.png", "diff/resvg/painting/stroke-dasharray/negative-values.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_on_a_circle() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/on-a-circle.svg", "ref/resvg/painting/stroke-dasharray/on-a-circle.png", "diff/resvg/painting/stroke-dasharray/on-a-circle.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_zero_sum() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/zero-sum.svg", "ref/resvg/painting/stroke-dasharray/zero-sum.png", "diff/resvg/painting/stroke-dasharray/zero-sum.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_none() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/none.svg", "ref/resvg/painting/stroke-dasharray/none.png", "diff/resvg/painting/stroke-dasharray/none.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_painting_stroke_dasharray_n_0() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/n-0.svg", "ref/resvg/painting/stroke-dasharray/n-0.png", "diff/resvg/painting/stroke-dasharray/n-0.png", false), 0)} #[test] fn resvg_painting_stroke_dasharray_comma_ws_separator() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/comma-ws-separator.svg", "ref/resvg/painting/stroke-dasharray/comma-ws-separator.png", "diff/resvg/painting/stroke-dasharray/comma-ws-separator.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_0_n_with_round_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-round-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-round-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-round-caps.png", false), 0)} -#[ignore] #[test] fn resvg_painting_stroke_dasharray_odd_count() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/odd-count.svg", "ref/resvg/painting/stroke-dasharray/odd-count.png", "diff/resvg/painting/stroke-dasharray/odd-count.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_0_n_with_round_caps() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/0-n-with-round-caps.svg", "ref/resvg/painting/stroke-dasharray/0-n-with-round-caps.png", "diff/resvg/painting/stroke-dasharray/0-n-with-round-caps.png", false), 0)} +#[test] fn resvg_painting_stroke_dasharray_odd_count() {assert_eq!(run_test("svg/resvg/painting/stroke-dasharray/odd-count.svg", "ref/resvg/painting/stroke-dasharray/odd-count.png", "diff/resvg/painting/stroke-dasharray/odd-count.png", false), 0)} #[test] fn resvg_painting_marker_with_a_text_child() {assert_eq!(run_test("svg/resvg/painting/marker/with-a-text-child.svg", "ref/resvg/painting/marker/with-a-text-child.png", "diff/resvg/painting/marker/with-a-text-child.png", false), 0)} #[test] fn resvg_painting_marker_orient_1_5rad() {assert_eq!(run_test("svg/resvg/painting/marker/orient=1.5rad.svg", "ref/resvg/painting/marker/orient=1.5rad.png", "diff/resvg/painting/marker/orient=1.5rad.png", false), 0)} #[test] fn resvg_painting_marker_orient_0_25turn() {assert_eq!(run_test("svg/resvg/painting/marker/orient=0.25turn.svg", "ref/resvg/painting/marker/orient=0.25turn.png", "diff/resvg/painting/marker/orient=0.25turn.png", false), 0)} @@ -897,6 +929,7 @@ use crate::run_test; #[test] fn resvg_painting_marker_default_clip() {assert_eq!(run_test("svg/resvg/painting/marker/default-clip.svg", "ref/resvg/painting/marker/default-clip.png", "diff/resvg/painting/marker/default-clip.png", false), 0)} #[test] fn resvg_painting_marker_only_marker_mid() {assert_eq!(run_test("svg/resvg/painting/marker/only-marker-mid.svg", "ref/resvg/painting/marker/only-marker-mid.png", "diff/resvg/painting/marker/only-marker-mid.png", false), 0)} #[test] fn resvg_painting_marker_with_markerUnits_userSpaceOnUse() {assert_eq!(run_test("svg/resvg/painting/marker/with-markerUnits=userSpaceOnUse.svg", "ref/resvg/painting/marker/with-markerUnits=userSpaceOnUse.png", "diff/resvg/painting/marker/with-markerUnits=userSpaceOnUse.png", false), 0)} +#[test] fn resvg_painting_marker_with_viewBox_1() {assert_eq!(run_test("svg/resvg/painting/marker/with-viewBox-1.svg", "ref/resvg/painting/marker/with-viewBox-1.png", "diff/resvg/painting/marker/with-viewBox-1.png", false), 0)} #[test] fn resvg_painting_marker_with_a_large_stroke() {assert_eq!(run_test("svg/resvg/painting/marker/with-a-large-stroke.svg", "ref/resvg/painting/marker/with-a-large-stroke.png", "diff/resvg/painting/marker/with-a-large-stroke.png", false), 0)} #[test] fn resvg_painting_marker_recursive_2() {assert_eq!(run_test("svg/resvg/painting/marker/recursive-2.svg", "ref/resvg/painting/marker/recursive-2.png", "diff/resvg/painting/marker/recursive-2.png", false), 0)} #[test] fn resvg_painting_marker_marker_on_rounded_rect() {assert_eq!(run_test("svg/resvg/painting/marker/marker-on-rounded-rect.svg", "ref/resvg/painting/marker/marker-on-rounded-rect.png", "diff/resvg/painting/marker/marker-on-rounded-rect.png", false), 0)} @@ -921,19 +954,20 @@ use crate::run_test; #[test] fn resvg_painting_marker_orient_auto_on_M_L_L_Z_Z_Z() {assert_eq!(run_test("svg/resvg/painting/marker/orient=auto-on-M-L-L-Z-Z-Z.svg", "ref/resvg/painting/marker/orient=auto-on-M-L-L-Z-Z-Z.png", "diff/resvg/painting/marker/orient=auto-on-M-L-L-Z-Z-Z.png", false), 0)} #[test] fn resvg_painting_marker_zero_length_path_2() {assert_eq!(run_test("svg/resvg/painting/marker/zero-length-path-2.svg", "ref/resvg/painting/marker/zero-length-path-2.png", "diff/resvg/painting/marker/zero-length-path-2.png", false), 0)} #[test] fn resvg_painting_marker_only_marker_end() {assert_eq!(run_test("svg/resvg/painting/marker/only-marker-end.svg", "ref/resvg/painting/marker/only-marker-end.png", "diff/resvg/painting/marker/only-marker-end.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_painting_marker_with_an_image_child() {assert_eq!(run_test("svg/resvg/painting/marker/with-an-image-child.svg", "ref/resvg/painting/marker/with-an-image-child.png", "diff/resvg/painting/marker/with-an-image-child.png", false), 0)} #[test] fn resvg_painting_marker_invalid_child() {assert_eq!(run_test("svg/resvg/painting/marker/invalid-child.svg", "ref/resvg/painting/marker/invalid-child.png", "diff/resvg/painting/marker/invalid-child.png", false), 0)} #[test] fn resvg_painting_marker_marker_on_rect() {assert_eq!(run_test("svg/resvg/painting/marker/marker-on-rect.svg", "ref/resvg/painting/marker/marker-on-rect.png", "diff/resvg/painting/marker/marker-on-rect.png", false), 0)} -#[ignore] #[test] fn resvg_painting_marker_on_ArcTo() {assert_eq!(run_test("svg/resvg/painting/marker/on-ArcTo.svg", "ref/resvg/painting/marker/on-ArcTo.png", "diff/resvg/painting/marker/on-ArcTo.png", false), 0)} +#[test] fn resvg_painting_marker_on_ArcTo() {assert_eq!(run_test("svg/resvg/painting/marker/on-ArcTo.svg", "ref/resvg/painting/marker/on-ArcTo.png", "diff/resvg/painting/marker/on-ArcTo.png", false), 0)} #[test] fn resvg_painting_marker_zero_length_path_1() {assert_eq!(run_test("svg/resvg/painting/marker/zero-length-path-1.svg", "ref/resvg/painting/marker/zero-length-path-1.png", "diff/resvg/painting/marker/zero-length-path-1.png", false), 0)} #[test] fn resvg_painting_marker_target_with_subpaths_1() {assert_eq!(run_test("svg/resvg/painting/marker/target-with-subpaths-1.svg", "ref/resvg/painting/marker/target-with-subpaths-1.png", "diff/resvg/painting/marker/target-with-subpaths-1.png", false), 0)} #[test] fn resvg_painting_marker_the_marker_property_in_CSS() {assert_eq!(run_test("svg/resvg/painting/marker/the-marker-property-in-CSS.svg", "ref/resvg/painting/marker/the-marker-property-in-CSS.png", "diff/resvg/painting/marker/the-marker-property-in-CSS.png", false), 0)} #[test] fn resvg_painting_marker_no_stroke_on_target() {assert_eq!(run_test("svg/resvg/painting/marker/no-stroke-on-target.svg", "ref/resvg/painting/marker/no-stroke-on-target.png", "diff/resvg/painting/marker/no-stroke-on-target.png", false), 0)} -#[ignore] #[test] fn resvg_painting_marker_target_with_subpaths_2() {assert_eq!(run_test("svg/resvg/painting/marker/target-with-subpaths-2.svg", "ref/resvg/painting/marker/target-with-subpaths-2.png", "diff/resvg/painting/marker/target-with-subpaths-2.png", false), 0)} +#[test] fn resvg_painting_marker_target_with_subpaths_2() {assert_eq!(run_test("svg/resvg/painting/marker/target-with-subpaths-2.svg", "ref/resvg/painting/marker/target-with-subpaths-2.png", "diff/resvg/painting/marker/target-with-subpaths-2.png", false), 0)} #[test] fn resvg_painting_marker_zero_sized() {assert_eq!(run_test("svg/resvg/painting/marker/zero-sized.svg", "ref/resvg/painting/marker/zero-sized.png", "diff/resvg/painting/marker/zero-sized.png", false), 0)} #[test] fn resvg_painting_marker_marker_on_polyline() {assert_eq!(run_test("svg/resvg/painting/marker/marker-on-polyline.svg", "ref/resvg/painting/marker/marker-on-polyline.png", "diff/resvg/painting/marker/marker-on-polyline.png", false), 0)} #[test] fn resvg_painting_image_rendering_optimizeSpeed_on_SVG() {assert_eq!(run_test("svg/resvg/painting/image-rendering/optimizeSpeed-on-SVG.svg", "ref/resvg/painting/image-rendering/optimizeSpeed-on-SVG.png", "diff/resvg/painting/image-rendering/optimizeSpeed-on-SVG.png", false), 0)} -#[ignore] #[test] fn resvg_painting_image_rendering_on_feImage() {assert_eq!(run_test("svg/resvg/painting/image-rendering/on-feImage.svg", "ref/resvg/painting/image-rendering/on-feImage.png", "diff/resvg/painting/image-rendering/on-feImage.png", false), 0)} +#[test] fn resvg_painting_image_rendering_on_feImage() {assert_eq!(run_test("svg/resvg/painting/image-rendering/on-feImage.svg", "ref/resvg/painting/image-rendering/on-feImage.png", "diff/resvg/painting/image-rendering/on-feImage.png", false), 0)} #[test] fn resvg_painting_image_rendering_optimizeSpeed() {assert_eq!(run_test("svg/resvg/painting/image-rendering/optimizeSpeed.svg", "ref/resvg/painting/image-rendering/optimizeSpeed.png", "diff/resvg/painting/image-rendering/optimizeSpeed.png", false), 0)} #[test] fn resvg_painting_fill_rule_nonzero() {assert_eq!(run_test("svg/resvg/painting/fill-rule/nonzero.svg", "ref/resvg/painting/fill-rule/nonzero.png", "diff/resvg/painting/fill-rule/nonzero.png", false), 0)} #[test] fn resvg_painting_fill_rule_evenodd() {assert_eq!(run_test("svg/resvg/painting/fill-rule/evenodd.svg", "ref/resvg/painting/fill-rule/evenodd.png", "diff/resvg/painting/fill-rule/evenodd.png", false), 0)} @@ -949,6 +983,7 @@ use crate::run_test; #[test] fn resvg_painting_mix_blend_mode_opacity_on_element() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/opacity-on-element.svg", "ref/resvg/painting/mix-blend-mode/opacity-on-element.png", "diff/resvg/painting/mix-blend-mode/opacity-on-element.png", false), 0)} #[test] fn resvg_painting_mix_blend_mode_saturation() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/saturation.svg", "ref/resvg/painting/mix-blend-mode/saturation.png", "diff/resvg/painting/mix-blend-mode/saturation.png", false), 0)} #[test] fn resvg_painting_mix_blend_mode_luminosity() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/luminosity.svg", "ref/resvg/painting/mix-blend-mode/luminosity.png", "diff/resvg/painting/mix-blend-mode/luminosity.png", false), 0)} +// pdfium bug #[ignore] #[test] fn resvg_painting_mix_blend_mode_color_dodge() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/color-dodge.svg", "ref/resvg/painting/mix-blend-mode/color-dodge.png", "diff/resvg/painting/mix-blend-mode/color-dodge.png", false), 0)} #[test] fn resvg_painting_mix_blend_mode_overlay() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/overlay.svg", "ref/resvg/painting/mix-blend-mode/overlay.png", "diff/resvg/painting/mix-blend-mode/overlay.png", false), 0)} #[test] fn resvg_painting_mix_blend_mode_lighten() {assert_eq!(run_test("svg/resvg/painting/mix-blend-mode/lighten.svg", "ref/resvg/painting/mix-blend-mode/lighten.png", "diff/resvg/painting/mix-blend-mode/lighten.png", false), 0)} @@ -962,26 +997,28 @@ use crate::run_test; #[test] fn resvg_text_alignment_baseline_middle_on_textPath() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/middle-on-textPath.svg", "ref/resvg/text/alignment-baseline/middle-on-textPath.png", "diff/resvg/text/alignment-baseline/middle-on-textPath.png", false), 0)} #[test] fn resvg_text_alignment_baseline_text_before_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/text-before-edge.svg", "ref/resvg/text/alignment-baseline/text-before-edge.png", "diff/resvg/text/alignment-baseline/text-before-edge.png", false), 0)} #[test] fn resvg_text_alignment_baseline_hanging_with_underline() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/hanging-with-underline.svg", "ref/resvg/text/alignment-baseline/hanging-with-underline.png", "diff/resvg/text/alignment-baseline/hanging-with-underline.png", false), 0)} -#[ignore] #[test] fn resvg_text_alignment_baseline_baseline() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/baseline.svg", "ref/resvg/text/alignment-baseline/baseline.png", "diff/resvg/text/alignment-baseline/baseline.png", false), 0)} +#[test] fn resvg_text_alignment_baseline_baseline() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/baseline.svg", "ref/resvg/text/alignment-baseline/baseline.png", "diff/resvg/text/alignment-baseline/baseline.png", false), 0)} #[test] fn resvg_text_alignment_baseline_alphabetic() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/alphabetic.svg", "ref/resvg/text/alignment-baseline/alphabetic.png", "diff/resvg/text/alignment-baseline/alphabetic.png", false), 0)} #[test] fn resvg_text_alignment_baseline_before_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/before-edge.svg", "ref/resvg/text/alignment-baseline/before-edge.png", "diff/resvg/text/alignment-baseline/before-edge.png", false), 0)} #[test] fn resvg_text_alignment_baseline_auto() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/auto.svg", "ref/resvg/text/alignment-baseline/auto.png", "diff/resvg/text/alignment-baseline/auto.png", false), 0)} #[test] fn resvg_text_alignment_baseline_middle() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/middle.svg", "ref/resvg/text/alignment-baseline/middle.png", "diff/resvg/text/alignment-baseline/middle.png", false), 0)} -#[ignore] #[test] fn resvg_text_alignment_baseline_text_after_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/text-after-edge.svg", "ref/resvg/text/alignment-baseline/text-after-edge.png", "diff/resvg/text/alignment-baseline/text-after-edge.png", false), 0)} +#[test] fn resvg_text_alignment_baseline_text_after_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/text-after-edge.svg", "ref/resvg/text/alignment-baseline/text-after-edge.png", "diff/resvg/text/alignment-baseline/text-after-edge.png", false), 0)} #[test] fn resvg_text_alignment_baseline_hanging_on_tspan() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/hanging-on-tspan.svg", "ref/resvg/text/alignment-baseline/hanging-on-tspan.png", "diff/resvg/text/alignment-baseline/hanging-on-tspan.png", false), 0)} #[test] fn resvg_text_alignment_baseline_inherit() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/inherit.svg", "ref/resvg/text/alignment-baseline/inherit.png", "diff/resvg/text/alignment-baseline/inherit.png", false), 0)} -#[ignore] #[test] fn resvg_text_alignment_baseline_ideographic() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/ideographic.svg", "ref/resvg/text/alignment-baseline/ideographic.png", "diff/resvg/text/alignment-baseline/ideographic.png", false), 0)} -#[ignore] #[test] fn resvg_text_alignment_baseline_after_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/after-edge.svg", "ref/resvg/text/alignment-baseline/after-edge.png", "diff/resvg/text/alignment-baseline/after-edge.png", false), 0)} +#[test] fn resvg_text_alignment_baseline_ideographic() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/ideographic.svg", "ref/resvg/text/alignment-baseline/ideographic.png", "diff/resvg/text/alignment-baseline/ideographic.png", false), 0)} +#[test] fn resvg_text_alignment_baseline_after_edge() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/after-edge.svg", "ref/resvg/text/alignment-baseline/after-edge.png", "diff/resvg/text/alignment-baseline/after-edge.png", false), 0)} #[test] fn resvg_text_alignment_baseline_hanging_and_baseline_shift_eq_20_on_tspan() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/hanging-and-baseline-shift-eq-20-on-tspan.svg", "ref/resvg/text/alignment-baseline/hanging-and-baseline-shift-eq-20-on-tspan.png", "diff/resvg/text/alignment-baseline/hanging-and-baseline-shift-eq-20-on-tspan.png", false), 0)} #[test] fn resvg_text_alignment_baseline_hanging() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/hanging.svg", "ref/resvg/text/alignment-baseline/hanging.png", "diff/resvg/text/alignment-baseline/hanging.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_alignment_baseline_hanging_on_vertical() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/hanging-on-vertical.svg", "ref/resvg/text/alignment-baseline/hanging-on-vertical.png", "diff/resvg/text/alignment-baseline/hanging-on-vertical.png", false), 0)} #[test] fn resvg_text_alignment_baseline_central() {assert_eq!(run_test("svg/resvg/text/alignment-baseline/central.svg", "ref/resvg/text/alignment-baseline/central.png", "diff/resvg/text/alignment-baseline/central.png", false), 0)} #[test] fn resvg_text_tspan_style_override() {assert_eq!(run_test("svg/resvg/text/tspan/style-override.svg", "ref/resvg/text/tspan/style-override.png", "diff/resvg/text/tspan/style-override.png", false), 0)} #[test] fn resvg_text_tspan_multiple_coordinates() {assert_eq!(run_test("svg/resvg/text/tspan/multiple-coordinates.svg", "ref/resvg/text/tspan/multiple-coordinates.png", "diff/resvg/text/tspan/multiple-coordinates.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_with_filter() {assert_eq!(run_test("svg/resvg/text/tspan/with-filter.svg", "ref/resvg/text/tspan/with-filter.png", "diff/resvg/text/tspan/with-filter.png", false), 0)} +#[test] fn resvg_text_tspan_with_filter() {assert_eq!(run_test("svg/resvg/text/tspan/with-filter.svg", "ref/resvg/text/tspan/with-filter.png", "diff/resvg/text/tspan/with-filter.png", false), 0)} #[test] fn resvg_text_tspan_transform() {assert_eq!(run_test("svg/resvg/text/tspan/transform.svg", "ref/resvg/text/tspan/transform.png", "diff/resvg/text/tspan/transform.png", false), 0)} #[test] fn resvg_text_tspan_pseudo_multi_line() {assert_eq!(run_test("svg/resvg/text/tspan/pseudo-multi-line.svg", "ref/resvg/text/tspan/pseudo-multi-line.png", "diff/resvg/text/tspan/pseudo-multi-line.png", false), 0)} #[test] fn resvg_text_tspan_nested_rotate() {assert_eq!(run_test("svg/resvg/text/tspan/nested-rotate.svg", "ref/resvg/text/tspan/nested-rotate.png", "diff/resvg/text/tspan/nested-rotate.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_tspan_bidi_reordering() {assert_eq!(run_test("svg/resvg/text/tspan/bidi-reordering.svg", "ref/resvg/text/tspan/bidi-reordering.png", "diff/resvg/text/tspan/bidi-reordering.png", false), 0)} #[test] fn resvg_text_tspan_nested() {assert_eq!(run_test("svg/resvg/text/tspan/nested.svg", "ref/resvg/text/tspan/nested.png", "diff/resvg/text/tspan/nested.png", false), 0)} #[test] fn resvg_text_tspan_without_attributes() {assert_eq!(run_test("svg/resvg/text/tspan/without-attributes.svg", "ref/resvg/text/tspan/without-attributes.png", "diff/resvg/text/tspan/without-attributes.png", false), 0)} @@ -992,13 +1029,13 @@ use crate::run_test; #[test] fn resvg_text_tspan_outside_the_text() {assert_eq!(run_test("svg/resvg/text/tspan/outside-the-text.svg", "ref/resvg/text/tspan/outside-the-text.png", "diff/resvg/text/tspan/outside-the-text.png", false), 0)} #[test] fn resvg_text_tspan_with_dy() {assert_eq!(run_test("svg/resvg/text/tspan/with-dy.svg", "ref/resvg/text/tspan/with-dy.png", "diff/resvg/text/tspan/with-dy.png", false), 0)} #[test] fn resvg_text_tspan_xml_space_2() {assert_eq!(run_test("svg/resvg/text/tspan/xml-space-2.svg", "ref/resvg/text/tspan/xml-space-2.png", "diff/resvg/text/tspan/xml-space-2.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_with_mask() {assert_eq!(run_test("svg/resvg/text/tspan/with-mask.svg", "ref/resvg/text/tspan/with-mask.png", "diff/resvg/text/tspan/with-mask.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_tspan_bbox_2() {assert_eq!(run_test("svg/resvg/text/tspan/tspan-bbox-2.svg", "ref/resvg/text/tspan/tspan-bbox-2.png", "diff/resvg/text/tspan/tspan-bbox-2.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_with_clip_path() {assert_eq!(run_test("svg/resvg/text/tspan/with-clip-path.svg", "ref/resvg/text/tspan/with-clip-path.png", "diff/resvg/text/tspan/with-clip-path.png", false), 0)} +#[test] fn resvg_text_tspan_with_mask() {assert_eq!(run_test("svg/resvg/text/tspan/with-mask.svg", "ref/resvg/text/tspan/with-mask.png", "diff/resvg/text/tspan/with-mask.png", false), 0)} +#[test] fn resvg_text_tspan_tspan_bbox_2() {assert_eq!(run_test("svg/resvg/text/tspan/tspan-bbox-2.svg", "ref/resvg/text/tspan/tspan-bbox-2.png", "diff/resvg/text/tspan/tspan-bbox-2.png", false), 0)} +#[test] fn resvg_text_tspan_with_clip_path() {assert_eq!(run_test("svg/resvg/text/tspan/with-clip-path.svg", "ref/resvg/text/tspan/with-clip-path.png", "diff/resvg/text/tspan/with-clip-path.png", false), 0)} #[test] fn resvg_text_tspan_xml_space_1() {assert_eq!(run_test("svg/resvg/text/tspan/xml-space-1.svg", "ref/resvg/text/tspan/xml-space-1.png", "diff/resvg/text/tspan/xml-space-1.png", false), 0)} #[test] fn resvg_text_tspan_nested_whitespaces() {assert_eq!(run_test("svg/resvg/text/tspan/nested-whitespaces.svg", "ref/resvg/text/tspan/nested-whitespaces.png", "diff/resvg/text/tspan/nested-whitespaces.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_with_opacity() {assert_eq!(run_test("svg/resvg/text/tspan/with-opacity.svg", "ref/resvg/text/tspan/with-opacity.png", "diff/resvg/text/tspan/with-opacity.png", false), 0)} -#[ignore] #[test] fn resvg_text_tspan_tspan_bbox_1() {assert_eq!(run_test("svg/resvg/text/tspan/tspan-bbox-1.svg", "ref/resvg/text/tspan/tspan-bbox-1.png", "diff/resvg/text/tspan/tspan-bbox-1.png", false), 0)} +#[test] fn resvg_text_tspan_with_opacity() {assert_eq!(run_test("svg/resvg/text/tspan/with-opacity.svg", "ref/resvg/text/tspan/with-opacity.png", "diff/resvg/text/tspan/with-opacity.png", false), 0)} +#[test] fn resvg_text_tspan_tspan_bbox_1() {assert_eq!(run_test("svg/resvg/text/tspan/tspan-bbox-1.svg", "ref/resvg/text/tspan/tspan-bbox-1.png", "diff/resvg/text/tspan/tspan-bbox-1.png", false), 0)} #[test] fn resvg_text_tspan_rotate_and_display_none() {assert_eq!(run_test("svg/resvg/text/tspan/rotate-and-display-none.svg", "ref/resvg/text/tspan/rotate-and-display-none.png", "diff/resvg/text/tspan/rotate-and-display-none.png", false), 0)} #[test] fn resvg_text_tspan_only_with_y() {assert_eq!(run_test("svg/resvg/text/tspan/only-with-y.svg", "ref/resvg/text/tspan/only-with-y.png", "diff/resvg/text/tspan/only-with-y.png", false), 0)} #[test] fn resvg_text_tspan_mixed_xml_space_2() {assert_eq!(run_test("svg/resvg/text/tspan/mixed-xml-space-2.svg", "ref/resvg/text/tspan/mixed-xml-space-2.png", "diff/resvg/text/tspan/mixed-xml-space-2.png", false), 0)} @@ -1011,37 +1048,47 @@ use crate::run_test; #[test] fn resvg_text_writing_mode_tb_rl() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-rl.svg", "ref/resvg/text/writing-mode/tb-rl.png", "diff/resvg/text/writing-mode/tb-rl.png", false), 0)} #[test] fn resvg_text_writing_mode_tb_with_dx_on_second_tspan() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-with-dx-on-second-tspan.svg", "ref/resvg/text/writing-mode/tb-with-dx-on-second-tspan.png", "diff/resvg/text/writing-mode/tb-with-dx-on-second-tspan.png", false), 0)} #[test] fn resvg_text_writing_mode_lr_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/lr-tb.svg", "ref/resvg/text/writing-mode/lr-tb.png", "diff/resvg/text/writing-mode/lr-tb.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_mixed_languages_with_tb_and_underline() {assert_eq!(run_test("svg/resvg/text/writing-mode/mixed-languages-with-tb-and-underline.svg", "ref/resvg/text/writing-mode/mixed-languages-with-tb-and-underline.png", "diff/resvg/text/writing-mode/mixed-languages-with-tb-and-underline.png", false), 0)} #[test] fn resvg_text_writing_mode_rl_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/rl-tb.svg", "ref/resvg/text/writing-mode/rl-tb.png", "diff/resvg/text/writing-mode/rl-tb.png", false), 0)} #[test] fn resvg_text_writing_mode_lr() {assert_eq!(run_test("svg/resvg/text/writing-mode/lr.svg", "ref/resvg/text/writing-mode/lr.png", "diff/resvg/text/writing-mode/lr.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_japanese_with_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/japanese-with-tb.svg", "ref/resvg/text/writing-mode/japanese-with-tb.png", "diff/resvg/text/writing-mode/japanese-with-tb.png", false), 0)} #[test] fn resvg_text_writing_mode_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb.svg", "ref/resvg/text/writing-mode/tb.png", "diff/resvg/text/writing-mode/tb.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_tb_with_rotate_and_underline() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-with-rotate-and-underline.svg", "ref/resvg/text/writing-mode/tb-with-rotate-and-underline.png", "diff/resvg/text/writing-mode/tb-with-rotate-and-underline.png", false), 0)} #[test] fn resvg_text_writing_mode_invalid_value() {assert_eq!(run_test("svg/resvg/text/writing-mode/invalid-value.svg", "ref/resvg/text/writing-mode/invalid-value.png", "diff/resvg/text/writing-mode/invalid-value.png", false), 0)} #[test] fn resvg_text_writing_mode_tb_with_alignment() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-with-alignment.svg", "ref/resvg/text/writing-mode/tb-with-alignment.png", "diff/resvg/text/writing-mode/tb-with-alignment.png", false), 0)} -#[ignore] #[test] fn resvg_text_writing_mode_vertical_rl() {assert_eq!(run_test("svg/resvg/text/writing-mode/vertical-rl.svg", "ref/resvg/text/writing-mode/vertical-rl.png", "diff/resvg/text/writing-mode/vertical-rl.png", false), 0)} +#[test] fn resvg_text_writing_mode_vertical_rl() {assert_eq!(run_test("svg/resvg/text/writing-mode/vertical-rl.svg", "ref/resvg/text/writing-mode/vertical-rl.png", "diff/resvg/text/writing-mode/vertical-rl.png", false), 0)} #[test] fn resvg_text_writing_mode_tb_with_dx_on_tspan() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-with-dx-on-tspan.svg", "ref/resvg/text/writing-mode/tb-with-dx-on-tspan.png", "diff/resvg/text/writing-mode/tb-with-dx-on-tspan.png", false), 0)} #[test] fn resvg_text_writing_mode_inheritance() {assert_eq!(run_test("svg/resvg/text/writing-mode/inheritance.svg", "ref/resvg/text/writing-mode/inheritance.png", "diff/resvg/text/writing-mode/inheritance.png", false), 0)} #[test] fn resvg_text_writing_mode_on_tspan() {assert_eq!(run_test("svg/resvg/text/writing-mode/on-tspan.svg", "ref/resvg/text/writing-mode/on-tspan.png", "diff/resvg/text/writing-mode/on-tspan.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_mixed_languages_with_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/mixed-languages-with-tb.svg", "ref/resvg/text/writing-mode/mixed-languages-with-tb.png", "diff/resvg/text/writing-mode/mixed-languages-with-tb.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_tb_and_punctuation() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-and-punctuation.svg", "ref/resvg/text/writing-mode/tb-and-punctuation.png", "diff/resvg/text/writing-mode/tb-and-punctuation.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_tb_with_rotate() {assert_eq!(run_test("svg/resvg/text/writing-mode/tb-with-rotate.svg", "ref/resvg/text/writing-mode/tb-with-rotate.png", "diff/resvg/text/writing-mode/tb-with-rotate.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_writing_mode_arabic_with_rl() {assert_eq!(run_test("svg/resvg/text/writing-mode/arabic-with-rl.svg", "ref/resvg/text/writing-mode/arabic-with-rl.png", "diff/resvg/text/writing-mode/arabic-with-rl.png", false), 0)} #[test] fn resvg_text_writing_mode_horizontal_tb() {assert_eq!(run_test("svg/resvg/text/writing-mode/horizontal-tb.svg", "ref/resvg/text/writing-mode/horizontal-tb.png", "diff/resvg/text/writing-mode/horizontal-tb.png", false), 0)} -#[ignore] #[test] fn resvg_text_writing_mode_vertical_lr() {assert_eq!(run_test("svg/resvg/text/writing-mode/vertical-lr.svg", "ref/resvg/text/writing-mode/vertical-lr.png", "diff/resvg/text/writing-mode/vertical-lr.png", false), 0)} +#[test] fn resvg_text_writing_mode_vertical_lr() {assert_eq!(run_test("svg/resvg/text/writing-mode/vertical-lr.svg", "ref/resvg/text/writing-mode/vertical-lr.png", "diff/resvg/text/writing-mode/vertical-lr.png", false), 0)} #[test] fn resvg_text_writing_mode_rl() {assert_eq!(run_test("svg/resvg/text/writing-mode/rl.svg", "ref/resvg/text/writing-mode/rl.png", "diff/resvg/text/writing-mode/rl.png", false), 0)} -#[ignore] #[test] fn resvg_text_glyph_orientation_horizontal_simple_case() {assert_eq!(run_test("svg/resvg/text/glyph-orientation-horizontal/simple-case.svg", "ref/resvg/text/glyph-orientation-horizontal/simple-case.png", "diff/resvg/text/glyph-orientation-horizontal/simple-case.png", false), 0)} +#[test] fn resvg_text_glyph_orientation_horizontal_simple_case() {assert_eq!(run_test("svg/resvg/text/glyph-orientation-horizontal/simple-case.svg", "ref/resvg/text/glyph-orientation-horizontal/simple-case.png", "diff/resvg/text/glyph-orientation-horizontal/simple-case.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_letter_spacing_non_ASCII_character() {assert_eq!(run_test("svg/resvg/text/letter-spacing/non-ASCII-character.svg", "ref/resvg/text/letter-spacing/non-ASCII-character.png", "diff/resvg/text/letter-spacing/non-ASCII-character.png", false), 0)} -#[ignore] #[test] fn resvg_text_letter_spacing_large_negative() {assert_eq!(run_test("svg/resvg/text/letter-spacing/large-negative.svg", "ref/resvg/text/letter-spacing/large-negative.png", "diff/resvg/text/letter-spacing/large-negative.png", false), 0)} +#[test] fn resvg_text_letter_spacing_large_negative() {assert_eq!(run_test("svg/resvg/text/letter-spacing/large-negative.svg", "ref/resvg/text/letter-spacing/large-negative.png", "diff/resvg/text/letter-spacing/large-negative.png", false), 0)} #[test] fn resvg_text_letter_spacing_0() {assert_eq!(run_test("svg/resvg/text/letter-spacing/0.svg", "ref/resvg/text/letter-spacing/0.png", "diff/resvg/text/letter-spacing/0.png", false), 0)} #[test] fn resvg_text_letter_spacing_mixed_spacing() {assert_eq!(run_test("svg/resvg/text/letter-spacing/mixed-spacing.svg", "ref/resvg/text/letter-spacing/mixed-spacing.png", "diff/resvg/text/letter-spacing/mixed-spacing.png", false), 0)} #[test] fn resvg_text_letter_spacing_3() {assert_eq!(run_test("svg/resvg/text/letter-spacing/3.svg", "ref/resvg/text/letter-spacing/3.png", "diff/resvg/text/letter-spacing/3.png", false), 0)} #[test] fn resvg_text_letter_spacing_5percent() {assert_eq!(run_test("svg/resvg/text/letter-spacing/5percent.svg", "ref/resvg/text/letter-spacing/5percent.png", "diff/resvg/text/letter-spacing/5percent.png", false), 0)} #[test] fn resvg_text_letter_spacing__3() {assert_eq!(run_test("svg/resvg/text/letter-spacing/-3.svg", "ref/resvg/text/letter-spacing/-3.png", "diff/resvg/text/letter-spacing/-3.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_letter_spacing_on_Arabic() {assert_eq!(run_test("svg/resvg/text/letter-spacing/on-Arabic.svg", "ref/resvg/text/letter-spacing/on-Arabic.png", "diff/resvg/text/letter-spacing/on-Arabic.png", false), 0)} #[test] fn resvg_text_letter_spacing_1mm() {assert_eq!(run_test("svg/resvg/text/letter-spacing/1mm.svg", "ref/resvg/text/letter-spacing/1mm.png", "diff/resvg/text/letter-spacing/1mm.png", false), 0)} #[test] fn resvg_text_letter_spacing_normal() {assert_eq!(run_test("svg/resvg/text/letter-spacing/normal.svg", "ref/resvg/text/letter-spacing/normal.png", "diff/resvg/text/letter-spacing/normal.png", false), 0)} -#[ignore] #[test] fn resvg_text_letter_spacing_filter_bbox() {assert_eq!(run_test("svg/resvg/text/letter-spacing/filter-bbox.svg", "ref/resvg/text/letter-spacing/filter-bbox.png", "diff/resvg/text/letter-spacing/filter-bbox.png", false), 0)} +#[test] fn resvg_text_letter_spacing_filter_bbox() {assert_eq!(run_test("svg/resvg/text/letter-spacing/filter-bbox.svg", "ref/resvg/text/letter-spacing/filter-bbox.png", "diff/resvg/text/letter-spacing/filter-bbox.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_letter_spacing_mixed_scripts() {assert_eq!(run_test("svg/resvg/text/letter-spacing/mixed-scripts.svg", "ref/resvg/text/letter-spacing/mixed-scripts.png", "diff/resvg/text/letter-spacing/mixed-scripts.png", false), 0)} #[test] fn resvg_text_dominant_baseline_mathematical() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/mathematical.svg", "ref/resvg/text/dominant-baseline/mathematical.png", "diff/resvg/text/dominant-baseline/mathematical.png", false), 0)} #[test] fn resvg_text_dominant_baseline_dummy_tspan() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/dummy-tspan.svg", "ref/resvg/text/dominant-baseline/dummy-tspan.png", "diff/resvg/text/dominant-baseline/dummy-tspan.png", false), 0)} @@ -1050,6 +1097,7 @@ use crate::run_test; #[test] fn resvg_text_dominant_baseline_complex() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/complex.svg", "ref/resvg/text/dominant-baseline/complex.png", "diff/resvg/text/dominant-baseline/complex.png", false), 0)} #[test] fn resvg_text_dominant_baseline_alphabetic() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/alphabetic.svg", "ref/resvg/text/dominant-baseline/alphabetic.png", "diff/resvg/text/dominant-baseline/alphabetic.png", false), 0)} #[test] fn resvg_text_dominant_baseline_nested() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/nested.svg", "ref/resvg/text/dominant-baseline/nested.png", "diff/resvg/text/dominant-baseline/nested.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_dominant_baseline_use_script() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/use-script.svg", "ref/resvg/text/dominant-baseline/use-script.png", "diff/resvg/text/dominant-baseline/use-script.png", false), 0)} #[test] fn resvg_text_dominant_baseline_auto() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/auto.svg", "ref/resvg/text/dominant-baseline/auto.png", "diff/resvg/text/dominant-baseline/auto.png", false), 0)} #[test] fn resvg_text_dominant_baseline_middle() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/middle.svg", "ref/resvg/text/dominant-baseline/middle.png", "diff/resvg/text/dominant-baseline/middle.png", false), 0)} @@ -1059,9 +1107,10 @@ use crate::run_test; #[test] fn resvg_text_dominant_baseline_inherit() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/inherit.svg", "ref/resvg/text/dominant-baseline/inherit.png", "diff/resvg/text/dominant-baseline/inherit.png", false), 0)} #[test] fn resvg_text_dominant_baseline_ideographic() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/ideographic.svg", "ref/resvg/text/dominant-baseline/ideographic.png", "diff/resvg/text/dominant-baseline/ideographic.png", false), 0)} #[test] fn resvg_text_dominant_baseline_alignment_baseline_baseline_on_tspan() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/alignment-baseline=baseline-on-tspan.svg", "ref/resvg/text/dominant-baseline/alignment-baseline=baseline-on-tspan.png", "diff/resvg/text/dominant-baseline/alignment-baseline=baseline-on-tspan.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_dominant_baseline_hanging() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/hanging.svg", "ref/resvg/text/dominant-baseline/hanging.png", "diff/resvg/text/dominant-baseline/hanging.png", false), 0)} #[test] fn resvg_text_dominant_baseline_different_alignment_baseline_on_tspan() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/different-alignment-baseline-on-tspan.svg", "ref/resvg/text/dominant-baseline/different-alignment-baseline-on-tspan.png", "diff/resvg/text/dominant-baseline/different-alignment-baseline-on-tspan.png", false), 0)} -#[ignore] #[test] fn resvg_text_dominant_baseline_reset_size() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/reset-size.svg", "ref/resvg/text/dominant-baseline/reset-size.png", "diff/resvg/text/dominant-baseline/reset-size.png", false), 0)} +#[test] fn resvg_text_dominant_baseline_reset_size() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/reset-size.svg", "ref/resvg/text/dominant-baseline/reset-size.png", "diff/resvg/text/dominant-baseline/reset-size.png", false), 0)} #[test] fn resvg_text_dominant_baseline_central() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/central.svg", "ref/resvg/text/dominant-baseline/central.png", "diff/resvg/text/dominant-baseline/central.png", false), 0)} #[test] fn resvg_text_dominant_baseline_sequential() {assert_eq!(run_test("svg/resvg/text/dominant-baseline/sequential.svg", "ref/resvg/text/dominant-baseline/sequential.png", "diff/resvg/text/dominant-baseline/sequential.png", false), 0)} #[test] fn resvg_text_baseline_shift_10() {assert_eq!(run_test("svg/resvg/text/baseline-shift/10.svg", "ref/resvg/text/baseline-shift/10.png", "diff/resvg/text/baseline-shift/10.png", false), 0)} @@ -1086,15 +1135,16 @@ use crate::run_test; #[test] fn resvg_text_baseline_shift_nested_with_baseline_2() {assert_eq!(run_test("svg/resvg/text/baseline-shift/nested-with-baseline-2.svg", "ref/resvg/text/baseline-shift/nested-with-baseline-2.png", "diff/resvg/text/baseline-shift/nested-with-baseline-2.png", false), 0)} #[test] fn resvg_text_baseline_shift_2mm() {assert_eq!(run_test("svg/resvg/text/baseline-shift/2mm.svg", "ref/resvg/text/baseline-shift/2mm.png", "diff/resvg/text/baseline-shift/2mm.png", false), 0)} #[test] fn resvg_text_baseline_shift_nested_with_baseline_1() {assert_eq!(run_test("svg/resvg/text/baseline-shift/nested-with-baseline-1.svg", "ref/resvg/text/baseline-shift/nested-with-baseline-1.png", "diff/resvg/text/baseline-shift/nested-with-baseline-1.png", false), 0)} -#[ignore] #[test] fn resvg_text_lengthAdjust_vertical() {assert_eq!(run_test("svg/resvg/text/lengthAdjust/vertical.svg", "ref/resvg/text/lengthAdjust/vertical.png", "diff/resvg/text/lengthAdjust/vertical.png", false), 0)} +#[test] fn resvg_text_lengthAdjust_vertical() {assert_eq!(run_test("svg/resvg/text/lengthAdjust/vertical.svg", "ref/resvg/text/lengthAdjust/vertical.png", "diff/resvg/text/lengthAdjust/vertical.png", false), 0)} #[test] fn resvg_text_lengthAdjust_text_on_path() {assert_eq!(run_test("svg/resvg/text/lengthAdjust/text-on-path.svg", "ref/resvg/text/lengthAdjust/text-on-path.png", "diff/resvg/text/lengthAdjust/text-on-path.png", false), 0)} #[test] fn resvg_text_lengthAdjust_spacingAndGlyphs() {assert_eq!(run_test("svg/resvg/text/lengthAdjust/spacingAndGlyphs.svg", "ref/resvg/text/lengthAdjust/spacingAndGlyphs.png", "diff/resvg/text/lengthAdjust/spacingAndGlyphs.png", false), 0)} #[test] fn resvg_text_lengthAdjust_with_underline() {assert_eq!(run_test("svg/resvg/text/lengthAdjust/with-underline.svg", "ref/resvg/text/lengthAdjust/with-underline.png", "diff/resvg/text/lengthAdjust/with-underline.png", false), 0)} #[test] fn resvg_text_text_anchor_end_with_letter_spacing() {assert_eq!(run_test("svg/resvg/text/text-anchor/end-with-letter-spacing.svg", "ref/resvg/text/text-anchor/end-with-letter-spacing.png", "diff/resvg/text/text-anchor/end-with-letter-spacing.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_anchor_coordinates_list() {assert_eq!(run_test("svg/resvg/text/text-anchor/coordinates-list.svg", "ref/resvg/text/text-anchor/coordinates-list.png", "diff/resvg/text/text-anchor/coordinates-list.png", false), 0)} +#[test] fn resvg_text_text_anchor_coordinates_list() {assert_eq!(run_test("svg/resvg/text/text-anchor/coordinates-list.svg", "ref/resvg/text/text-anchor/coordinates-list.png", "diff/resvg/text/text-anchor/coordinates-list.png", false), 0)} #[test] fn resvg_text_text_anchor_middle_on_text() {assert_eq!(run_test("svg/resvg/text/text-anchor/middle-on-text.svg", "ref/resvg/text/text-anchor/middle-on-text.png", "diff/resvg/text/text-anchor/middle-on-text.png", false), 0)} #[test] fn resvg_text_text_anchor_text_anchor_not_on_text_chunk() {assert_eq!(run_test("svg/resvg/text/text-anchor/text-anchor-not-on-text-chunk.svg", "ref/resvg/text/text-anchor/text-anchor-not-on-text-chunk.png", "diff/resvg/text/text-anchor/text-anchor-not-on-text-chunk.png", false), 0)} #[test] fn resvg_text_text_anchor_on_tspan() {assert_eq!(run_test("svg/resvg/text/text-anchor/on-tspan.svg", "ref/resvg/text/text-anchor/on-tspan.png", "diff/resvg/text/text-anchor/on-tspan.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_anchor_on_tspan_with_arabic() {assert_eq!(run_test("svg/resvg/text/text-anchor/on-tspan-with-arabic.svg", "ref/resvg/text/text-anchor/on-tspan-with-arabic.png", "diff/resvg/text/text-anchor/on-tspan-with-arabic.png", false), 0)} #[test] fn resvg_text_text_anchor_inheritance_1() {assert_eq!(run_test("svg/resvg/text/text-anchor/inheritance-1.svg", "ref/resvg/text/text-anchor/inheritance-1.png", "diff/resvg/text/text-anchor/inheritance-1.png", false), 0)} #[test] fn resvg_text_text_anchor_inheritance_3() {assert_eq!(run_test("svg/resvg/text/text-anchor/inheritance-3.svg", "ref/resvg/text/text-anchor/inheritance-3.png", "diff/resvg/text/text-anchor/inheritance-3.png", false), 0)} @@ -1103,18 +1153,20 @@ use crate::run_test; #[test] fn resvg_text_text_anchor_start_on_text() {assert_eq!(run_test("svg/resvg/text/text-anchor/start-on-text.svg", "ref/resvg/text/text-anchor/start-on-text.png", "diff/resvg/text/text-anchor/start-on-text.png", false), 0)} #[test] fn resvg_text_text_anchor_end_on_text() {assert_eq!(run_test("svg/resvg/text/text-anchor/end-on-text.svg", "ref/resvg/text/text-anchor/end-on-text.png", "diff/resvg/text/text-anchor/end-on-text.png", false), 0)} #[test] fn resvg_text_text_anchor_on_the_first_tspan() {assert_eq!(run_test("svg/resvg/text/text-anchor/on-the-first-tspan.svg", "ref/resvg/text/text-anchor/on-the-first-tspan.png", "diff/resvg/text/text-anchor/on-the-first-tspan.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_stretch_narrower() {assert_eq!(run_test("svg/resvg/text/font-stretch/narrower.svg", "ref/resvg/text/font-stretch/narrower.png", "diff/resvg/text/font-stretch/narrower.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_stretch_inherit() {assert_eq!(run_test("svg/resvg/text/font-stretch/inherit.svg", "ref/resvg/text/font-stretch/inherit.png", "diff/resvg/text/font-stretch/inherit.png", false), 0)} +#[test] fn resvg_text_font_stretch_narrower() {assert_eq!(run_test("svg/resvg/text/font-stretch/narrower.svg", "ref/resvg/text/font-stretch/narrower.png", "diff/resvg/text/font-stretch/narrower.png", false), 0)} +#[test] fn resvg_text_font_stretch_inherit() {assert_eq!(run_test("svg/resvg/text/font-stretch/inherit.svg", "ref/resvg/text/font-stretch/inherit.png", "diff/resvg/text/font-stretch/inherit.png", false), 0)} +#[test] fn resvg_text_font_stretch_extra_condensed() {assert_eq!(run_test("svg/resvg/text/font-stretch/extra-condensed.svg", "ref/resvg/text/font-stretch/extra-condensed.png", "diff/resvg/text/font-stretch/extra-condensed.png", false), 0)} #[test] fn resvg_text_kerning_10percent() {assert_eq!(run_test("svg/resvg/text/kerning/10percent.svg", "ref/resvg/text/kerning/10percent.png", "diff/resvg/text/kerning/10percent.png", false), 0)} -#[ignore] #[test] fn resvg_text_kerning_0() {assert_eq!(run_test("svg/resvg/text/kerning/0.svg", "ref/resvg/text/kerning/0.png", "diff/resvg/text/kerning/0.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_kerning_as_property() {assert_eq!(run_test("svg/resvg/text/font-kerning/as-property.svg", "ref/resvg/text/font-kerning/as-property.png", "diff/resvg/text/font-kerning/as-property.png", false), 0)} +#[test] fn resvg_text_kerning_0() {assert_eq!(run_test("svg/resvg/text/kerning/0.svg", "ref/resvg/text/kerning/0.png", "diff/resvg/text/kerning/0.png", false), 0)} +#[test] fn resvg_text_font_kerning_as_property() {assert_eq!(run_test("svg/resvg/text/font-kerning/as-property.svg", "ref/resvg/text/font-kerning/as-property.png", "diff/resvg/text/font-kerning/as-property.png", false), 0)} #[test] fn resvg_text_font_kerning_none() {assert_eq!(run_test("svg/resvg/text/font-kerning/none.svg", "ref/resvg/text/font-kerning/none.png", "diff/resvg/text/font-kerning/none.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_kerning_arabic_script() {assert_eq!(run_test("svg/resvg/text/font-kerning/arabic-script.svg", "ref/resvg/text/font-kerning/arabic-script.png", "diff/resvg/text/font-kerning/arabic-script.png", false), 0)} #[test] fn resvg_text_tref_with_a_title_child() {assert_eq!(run_test("svg/resvg/text/tref/with-a-title-child.svg", "ref/resvg/text/tref/with-a-title-child.png", "diff/resvg/text/tref/with-a-title-child.png", false), 0)} #[test] fn resvg_text_tref_style_attributes() {assert_eq!(run_test("svg/resvg/text/tref/style-attributes.svg", "ref/resvg/text/tref/style-attributes.png", "diff/resvg/text/tref/style-attributes.png", false), 0)} #[test] fn resvg_text_tref_nested() {assert_eq!(run_test("svg/resvg/text/tref/nested.svg", "ref/resvg/text/tref/nested.png", "diff/resvg/text/tref/nested.png", false), 0)} #[test] fn resvg_text_tref_link_to_a_complex_text() {assert_eq!(run_test("svg/resvg/text/tref/link-to-a-complex-text.svg", "ref/resvg/text/tref/link-to-a-complex-text.png", "diff/resvg/text/tref/link-to-a-complex-text.png", false), 0)} -#[ignore] #[test] fn resvg_text_tref_link_to_an_external_file_element() {assert_eq!(run_test("svg/resvg/text/tref/link-to-an-external-file-element.svg", "ref/resvg/text/tref/link-to-an-external-file-element.png", "diff/resvg/text/tref/link-to-an-external-file-element.png", false), 0)} +#[test] fn resvg_text_tref_link_to_an_external_file_element() {assert_eq!(run_test("svg/resvg/text/tref/link-to-an-external-file-element.svg", "ref/resvg/text/tref/link-to-an-external-file-element.png", "diff/resvg/text/tref/link-to-an-external-file-element.png", false), 0)} #[test] fn resvg_text_tref_position_attributes() {assert_eq!(run_test("svg/resvg/text/tref/position-attributes.svg", "ref/resvg/text/tref/position-attributes.png", "diff/resvg/text/tref/position-attributes.png", false), 0)} #[test] fn resvg_text_tref_link_to_text() {assert_eq!(run_test("svg/resvg/text/tref/link-to-text.svg", "ref/resvg/text/tref/link-to-text.png", "diff/resvg/text/tref/link-to-text.png", false), 0)} #[test] fn resvg_text_tref_link_to_a_non_SVG_element() {assert_eq!(run_test("svg/resvg/text/tref/link-to-a-non-SVG-element.svg", "ref/resvg/text/tref/link-to-a-non-SVG-element.png", "diff/resvg/text/tref/link-to-a-non-SVG-element.png", false), 0)} @@ -1122,39 +1174,43 @@ use crate::run_test; #[test] fn resvg_text_tref_xml_space() {assert_eq!(run_test("svg/resvg/text/tref/xml-space.svg", "ref/resvg/text/tref/xml-space.png", "diff/resvg/text/tref/xml-space.png", false), 0)} #[test] fn resvg_text_tref_link_to_a_non_text_element() {assert_eq!(run_test("svg/resvg/text/tref/link-to-a-non-text-element.svg", "ref/resvg/text/tref/link-to-a-non-text-element.png", "diff/resvg/text/tref/link-to-a-non-text-element.png", false), 0)} #[test] fn resvg_text_word_spacing_10() {assert_eq!(run_test("svg/resvg/text/word-spacing/10.svg", "ref/resvg/text/word-spacing/10.png", "diff/resvg/text/word-spacing/10.png", false), 0)} -#[ignore] #[test] fn resvg_text_word_spacing_large_negative() {assert_eq!(run_test("svg/resvg/text/word-spacing/large-negative.svg", "ref/resvg/text/word-spacing/large-negative.png", "diff/resvg/text/word-spacing/large-negative.png", false), 0)} +#[test] fn resvg_text_word_spacing_large_negative() {assert_eq!(run_test("svg/resvg/text/word-spacing/large-negative.svg", "ref/resvg/text/word-spacing/large-negative.png", "diff/resvg/text/word-spacing/large-negative.png", false), 0)} #[test] fn resvg_text_word_spacing_0() {assert_eq!(run_test("svg/resvg/text/word-spacing/0.svg", "ref/resvg/text/word-spacing/0.png", "diff/resvg/text/word-spacing/0.png", false), 0)} #[test] fn resvg_text_word_spacing__5() {assert_eq!(run_test("svg/resvg/text/word-spacing/-5.svg", "ref/resvg/text/word-spacing/-5.png", "diff/resvg/text/word-spacing/-5.png", false), 0)} #[test] fn resvg_text_word_spacing_5percent() {assert_eq!(run_test("svg/resvg/text/word-spacing/5percent.svg", "ref/resvg/text/word-spacing/5percent.png", "diff/resvg/text/word-spacing/5percent.png", false), 0)} #[test] fn resvg_text_word_spacing_normal() {assert_eq!(run_test("svg/resvg/text/word-spacing/normal.svg", "ref/resvg/text/word-spacing/normal.png", "diff/resvg/text/word-spacing/normal.png", false), 0)} #[test] fn resvg_text_word_spacing_2mm() {assert_eq!(run_test("svg/resvg/text/word-spacing/2mm.svg", "ref/resvg/text/word-spacing/2mm.png", "diff/resvg/text/word-spacing/2mm.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_unicode_bidi_bidi_override() {assert_eq!(run_test("svg/resvg/text/unicode-bidi/bidi-override.svg", "ref/resvg/text/unicode-bidi/bidi-override.png", "diff/resvg/text/unicode-bidi/bidi-override.png", false), 0)} #[test] fn resvg_text_font_variant_inherit() {assert_eq!(run_test("svg/resvg/text/font-variant/inherit.svg", "ref/resvg/text/font-variant/inherit.png", "diff/resvg/text/font-variant/inherit.png", false), 0)} #[test] fn resvg_text_font_variant_small_caps() {assert_eq!(run_test("svg/resvg/text/font-variant/small-caps.svg", "ref/resvg/text/font-variant/small-caps.png", "diff/resvg/text/font-variant/small-caps.png", false), 0)} #[test] fn resvg_text_font_weight_700() {assert_eq!(run_test("svg/resvg/text/font-weight/700.svg", "ref/resvg/text/font-weight/700.png", "diff/resvg/text/font-weight/700.png", false), 0)} #[test] fn resvg_text_font_weight_lighter() {assert_eq!(run_test("svg/resvg/text/font-weight/lighter.svg", "ref/resvg/text/font-weight/lighter.png", "diff/resvg/text/font-weight/lighter.png", false), 0)} #[test] fn resvg_text_font_weight_bolder() {assert_eq!(run_test("svg/resvg/text/font-weight/bolder.svg", "ref/resvg/text/font-weight/bolder.png", "diff/resvg/text/font-weight/bolder.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_font_weight_lighter_with_clamping() {assert_eq!(run_test("svg/resvg/text/font-weight/lighter-with-clamping.svg", "ref/resvg/text/font-weight/lighter-with-clamping.png", "diff/resvg/text/font-weight/lighter-with-clamping.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_font_weight_lighter_without_parent() {assert_eq!(run_test("svg/resvg/text/font-weight/lighter-without-parent.svg", "ref/resvg/text/font-weight/lighter-without-parent.png", "diff/resvg/text/font-weight/lighter-without-parent.png", false), 0)} #[test] fn resvg_text_font_weight_bold() {assert_eq!(run_test("svg/resvg/text/font-weight/bold.svg", "ref/resvg/text/font-weight/bold.png", "diff/resvg/text/font-weight/bold.png", false), 0)} #[test] fn resvg_text_font_weight_inherit() {assert_eq!(run_test("svg/resvg/text/font-weight/inherit.svg", "ref/resvg/text/font-weight/inherit.png", "diff/resvg/text/font-weight/inherit.png", false), 0)} #[test] fn resvg_text_font_weight_normal() {assert_eq!(run_test("svg/resvg/text/font-weight/normal.svg", "ref/resvg/text/font-weight/normal.png", "diff/resvg/text/font-weight/normal.png", false), 0)} #[test] fn resvg_text_font_weight_invalid_number_1() {assert_eq!(run_test("svg/resvg/text/font-weight/invalid-number-1.svg", "ref/resvg/text/font-weight/invalid-number-1.png", "diff/resvg/text/font-weight/invalid-number-1.png", false), 0)} #[test] fn resvg_text_font_weight_bolder_without_parent() {assert_eq!(run_test("svg/resvg/text/font-weight/bolder-without-parent.svg", "ref/resvg/text/font-weight/bolder-without-parent.png", "diff/resvg/text/font-weight/bolder-without-parent.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_weight_650() {assert_eq!(run_test("svg/resvg/text/font-weight/650.svg", "ref/resvg/text/font-weight/650.png", "diff/resvg/text/font-weight/650.png", false), 0)} +#[test] fn resvg_text_font_weight_650() {assert_eq!(run_test("svg/resvg/text/font-weight/650.svg", "ref/resvg/text/font-weight/650.png", "diff/resvg/text/font-weight/650.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_font_weight_bolder_with_clamping() {assert_eq!(run_test("svg/resvg/text/font-weight/bolder-with-clamping.svg", "ref/resvg/text/font-weight/bolder-with-clamping.png", "diff/resvg/text/font-weight/bolder-with-clamping.png", false), 0)} #[test] fn resvg_text_text_rendering_optimizeLegibility() {assert_eq!(run_test("svg/resvg/text/text-rendering/optimizeLegibility.svg", "ref/resvg/text/text-rendering/optimizeLegibility.png", "diff/resvg/text/text-rendering/optimizeLegibility.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_rendering_geometricPrecision() {assert_eq!(run_test("svg/resvg/text/text-rendering/geometricPrecision.svg", "ref/resvg/text/text-rendering/geometricPrecision.png", "diff/resvg/text/text-rendering/geometricPrecision.png", false), 0)} +#[test] fn resvg_text_text_rendering_geometricPrecision() {assert_eq!(run_test("svg/resvg/text/text-rendering/geometricPrecision.svg", "ref/resvg/text/text-rendering/geometricPrecision.png", "diff/resvg/text/text-rendering/geometricPrecision.png", false), 0)} #[test] fn resvg_text_text_rendering_on_tspan() {assert_eq!(run_test("svg/resvg/text/text-rendering/on-tspan.svg", "ref/resvg/text/text-rendering/on-tspan.png", "diff/resvg/text/text-rendering/on-tspan.png", false), 0)} #[test] fn resvg_text_text_rendering_with_underline() {assert_eq!(run_test("svg/resvg/text/text-rendering/with-underline.svg", "ref/resvg/text/text-rendering/with-underline.png", "diff/resvg/text/text-rendering/with-underline.png", false), 0)} #[test] fn resvg_text_text_rendering_optimizeSpeed() {assert_eq!(run_test("svg/resvg/text/text-rendering/optimizeSpeed.svg", "ref/resvg/text/text-rendering/optimizeSpeed.png", "diff/resvg/text/text-rendering/optimizeSpeed.png", false), 0)} #[test] fn resvg_text_font_size_zero_size() {assert_eq!(run_test("svg/resvg/text/font-size/zero-size.svg", "ref/resvg/text/font-size/zero-size.png", "diff/resvg/text/font-size/zero-size.png", false), 0)} #[test] fn resvg_text_font_size_ex() {assert_eq!(run_test("svg/resvg/text/font-size/ex.svg", "ref/resvg/text/font-size/ex.png", "diff/resvg/text/font-size/ex.png", false), 0)} #[test] fn resvg_text_font_size_em() {assert_eq!(run_test("svg/resvg/text/font-size/em.svg", "ref/resvg/text/font-size/em.png", "diff/resvg/text/font-size/em.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_size_named_value() {assert_eq!(run_test("svg/resvg/text/font-size/named-value.svg", "ref/resvg/text/font-size/named-value.png", "diff/resvg/text/font-size/named-value.png", false), 0)} +#[test] fn resvg_text_font_size_named_value() {assert_eq!(run_test("svg/resvg/text/font-size/named-value.svg", "ref/resvg/text/font-size/named-value.png", "diff/resvg/text/font-size/named-value.png", false), 0)} #[test] fn resvg_text_font_size_simple_case() {assert_eq!(run_test("svg/resvg/text/font-size/simple-case.svg", "ref/resvg/text/font-size/simple-case.png", "diff/resvg/text/font-size/simple-case.png", false), 0)} #[test] fn resvg_text_font_size_inheritance() {assert_eq!(run_test("svg/resvg/text/font-size/inheritance.svg", "ref/resvg/text/font-size/inheritance.png", "diff/resvg/text/font-size/inheritance.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_size_negative_size() {assert_eq!(run_test("svg/resvg/text/font-size/negative-size.svg", "ref/resvg/text/font-size/negative-size.png", "diff/resvg/text/font-size/negative-size.png", false), 0)} +#[test] fn resvg_text_font_size_negative_size() {assert_eq!(run_test("svg/resvg/text/font-size/negative-size.svg", "ref/resvg/text/font-size/negative-size.png", "diff/resvg/text/font-size/negative-size.png", false), 0)} #[test] fn resvg_text_font_size_zero_size_on_parent_1() {assert_eq!(run_test("svg/resvg/text/font-size/zero-size-on-parent-1.svg", "ref/resvg/text/font-size/zero-size-on-parent-1.png", "diff/resvg/text/font-size/zero-size-on-parent-1.png", false), 0)} #[test] fn resvg_text_font_size_zero_size_on_parent_2() {assert_eq!(run_test("svg/resvg/text/font-size/zero-size-on-parent-2.svg", "ref/resvg/text/font-size/zero-size-on-parent-2.png", "diff/resvg/text/font-size/zero-size-on-parent-2.png", false), 0)} #[test] fn resvg_text_font_size_zero_size_on_parent_3() {assert_eq!(run_test("svg/resvg/text/font-size/zero-size-on-parent-3.svg", "ref/resvg/text/font-size/zero-size-on-parent-3.png", "diff/resvg/text/font-size/zero-size-on-parent-3.png", false), 0)} @@ -1168,86 +1224,108 @@ use crate::run_test; #[test] fn resvg_text_font_size_ex_on_the_root_element() {assert_eq!(run_test("svg/resvg/text/font-size/ex-on-the-root-element.svg", "ref/resvg/text/font-size/ex-on-the-root-element.png", "diff/resvg/text/font-size/ex-on-the-root-element.png", false), 0)} #[test] fn resvg_text_font_size_em_on_the_root_element() {assert_eq!(run_test("svg/resvg/text/font-size/em-on-the-root-element.svg", "ref/resvg/text/font-size/em-on-the-root-element.png", "diff/resvg/text/font-size/em-on-the-root-element.png", false), 0)} #[test] fn resvg_text_font_size_mixed_values() {assert_eq!(run_test("svg/resvg/text/font-size/mixed-values.svg", "ref/resvg/text/font-size/mixed-values.png", "diff/resvg/text/font-size/mixed-values.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_direction_rtl() {assert_eq!(run_test("svg/resvg/text/direction/rtl.svg", "ref/resvg/text/direction/rtl.png", "diff/resvg/text/direction/rtl.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_direction_rtl_with_vertical_writing_mode() {assert_eq!(run_test("svg/resvg/text/direction/rtl-with-vertical-writing-mode.svg", "ref/resvg/text/direction/rtl-with-vertical-writing-mode.png", "diff/resvg/text/direction/rtl-with-vertical-writing-mode.png", false), 0)} #[test] fn resvg_text_text_escaped_text_4() {assert_eq!(run_test("svg/resvg/text/text/escaped-text-4.svg", "ref/resvg/text/text/escaped-text-4.png", "diff/resvg/text/text/escaped-text-4.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_xml_lang_ja() {assert_eq!(run_test("svg/resvg/text/text/xml-lang=ja.svg", "ref/resvg/text/text/xml-lang=ja.png", "diff/resvg/text/text/xml-lang=ja.png", false), 0)} #[test] fn resvg_text_text_dx_and_dy_with_multiple_values() {assert_eq!(run_test("svg/resvg/text/text/dx-and-dy-with-multiple-values.svg", "ref/resvg/text/text/dx-and-dy-with-multiple-values.png", "diff/resvg/text/text/dx-and-dy-with-multiple-values.png", false), 0)} #[test] fn resvg_text_text_complex_graphemes() {assert_eq!(run_test("svg/resvg/text/text/complex-graphemes.svg", "ref/resvg/text/text/complex-graphemes.png", "diff/resvg/text/text/complex-graphemes.png", false), 0)} #[test] fn resvg_text_text_escaped_text_2() {assert_eq!(run_test("svg/resvg/text/text/escaped-text-2.svg", "ref/resvg/text/text/escaped-text-2.png", "diff/resvg/text/text/escaped-text-2.png", false), 0)} #[test] fn resvg_text_text_dx_and_dy_instead_of_x_and_y() {assert_eq!(run_test("svg/resvg/text/text/dx-and-dy-instead-of-x-and-y.svg", "ref/resvg/text/text/dx-and-dy-instead-of-x-and-y.png", "diff/resvg/text/text/dx-and-dy-instead-of-x-and-y.png", false), 0)} #[test] fn resvg_text_text_rotate() {assert_eq!(run_test("svg/resvg/text/text/rotate.svg", "ref/resvg/text/text/rotate.png", "diff/resvg/text/text/rotate.png", false), 0)} +// need to investigate +#[ignore] #[test] fn resvg_text_text_compound_emojis_and_coordinates_list() {assert_eq!(run_test("svg/resvg/text/text/compound-emojis-and-coordinates-list.svg", "ref/resvg/text/text/compound-emojis-and-coordinates-list.png", "diff/resvg/text/text/compound-emojis-and-coordinates-list.png", false), 0)} #[test] fn resvg_text_text_escaped_text_3() {assert_eq!(run_test("svg/resvg/text/text/escaped-text-3.svg", "ref/resvg/text/text/escaped-text-3.png", "diff/resvg/text/text/escaped-text-3.png", false), 0)} #[test] fn resvg_text_text_escaped_text_1() {assert_eq!(run_test("svg/resvg/text/text/escaped-text-1.svg", "ref/resvg/text/text/escaped-text-1.png", "diff/resvg/text/text/escaped-text-1.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_multiple_values() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-multiple-values.svg", "ref/resvg/text/text/x-and-y-with-multiple-values.png", "diff/resvg/text/text/x-and-y-with-multiple-values.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_less_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-less-values-than-characters.svg", "ref/resvg/text/text/x-and-y-with-less-values-than-characters.png", "diff/resvg/text/text/x-and-y-with-less-values-than-characters.png", false), 0)} #[test] fn resvg_text_text_transform() {assert_eq!(run_test("svg/resvg/text/text/transform.svg", "ref/resvg/text/text/transform.png", "diff/resvg/text/text/transform.png", false), 0)} #[test] fn resvg_text_text_rotate_with_multiple_values_underline_and_pattern() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-multiple-values-underline-and-pattern.svg", "ref/resvg/text/text/rotate-with-multiple-values-underline-and-pattern.png", "diff/resvg/text/text/rotate-with-multiple-values-underline-and-pattern.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_rotate_on_Arabic() {assert_eq!(run_test("svg/resvg/text/text/rotate-on-Arabic.svg", "ref/resvg/text/text/rotate-on-Arabic.png", "diff/resvg/text/text/rotate-on-Arabic.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_bidi_reordering() {assert_eq!(run_test("svg/resvg/text/text/bidi-reordering.svg", "ref/resvg/text/text/bidi-reordering.png", "diff/resvg/text/text/bidi-reordering.png", false), 0)} #[test] fn resvg_text_text_nested() {assert_eq!(run_test("svg/resvg/text/text/nested.svg", "ref/resvg/text/text/nested.png", "diff/resvg/text/text/nested.png", false), 0)} #[test] fn resvg_text_text_zalgo() {assert_eq!(run_test("svg/resvg/text/text/zalgo.svg", "ref/resvg/text/text/zalgo.png", "diff/resvg/text/text/zalgo.png", false), 0)} #[test] fn resvg_text_text_rotate_with_more_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-more-values-than-characters.svg", "ref/resvg/text/text/rotate-with-more-values-than-characters.png", "diff/resvg/text/text/rotate-with-more-values-than-characters.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_dx_and_dy() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-dx-and-dy.svg", "ref/resvg/text/text/x-and-y-with-dx-and-dy.png", "diff/resvg/text/text/x-and-y-with-dx-and-dy.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_real_text_height() {assert_eq!(run_test("svg/resvg/text/text/real-text-height.svg", "ref/resvg/text/text/real-text-height.png", "diff/resvg/text/text/real-text-height.png", false), 0)} +#[test] fn resvg_text_text_real_text_height() {assert_eq!(run_test("svg/resvg/text/text/real-text-height.svg", "ref/resvg/text/text/real-text-height.png", "diff/resvg/text/text/real-text-height.png", false), 0)} #[test] fn resvg_text_text_dx_and_dy_with_more_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/dx-and-dy-with-more-values-than-characters.svg", "ref/resvg/text/text/dx-and-dy-with-more-values-than-characters.png", "diff/resvg/text/text/dx-and-dy-with-more-values-than-characters.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_text_emojis() {assert_eq!(run_test("svg/resvg/text/text/emojis.svg", "ref/resvg/text/text/emojis.png", "diff/resvg/text/text/emojis.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_x_and_y_with_multiple_values_and_arabic_text() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-multiple-values-and-arabic-text.svg", "ref/resvg/text/text/x-and-y-with-multiple-values-and-arabic-text.png", "diff/resvg/text/text/x-and-y-with-multiple-values-and-arabic-text.png", false), 0)} #[test] fn resvg_text_text_simple_case() {assert_eq!(run_test("svg/resvg/text/text/simple-case.svg", "ref/resvg/text/text/simple-case.png", "diff/resvg/text/text/simple-case.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_multiple_values_and_tspan() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-multiple-values-and-tspan.svg", "ref/resvg/text/text/x-and-y-with-multiple-values-and-tspan.png", "diff/resvg/text/text/x-and-y-with-multiple-values-and-tspan.png", false), 0)} #[test] fn resvg_text_text_rotate_with_less_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-less-values-than-characters.svg", "ref/resvg/text/text/rotate-with-less-values-than-characters.png", "diff/resvg/text/text/rotate-with-less-values-than-characters.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_complex_grapheme_split_by_tspan() {assert_eq!(run_test("svg/resvg/text/text/complex-grapheme-split-by-tspan.svg", "ref/resvg/text/text/complex-grapheme-split-by-tspan.png", "diff/resvg/text/text/complex-grapheme-split-by-tspan.png", false), 0)} +#[test] fn resvg_text_text_complex_grapheme_split_by_tspan() {assert_eq!(run_test("svg/resvg/text/text/complex-grapheme-split-by-tspan.svg", "ref/resvg/text/text/complex-grapheme-split-by-tspan.png", "diff/resvg/text/text/complex-grapheme-split-by-tspan.png", false), 0)} #[test] fn resvg_text_text_dx_and_dy_with_less_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/dx-and-dy-with-less-values-than-characters.svg", "ref/resvg/text/text/dx-and-dy-with-less-values-than-characters.png", "diff/resvg/text/text/dx-and-dy-with-less-values-than-characters.png", false), 0)} #[test] fn resvg_text_text_percent_value_on_x_and_y() {assert_eq!(run_test("svg/resvg/text/text/percent-value-on-x-and-y.svg", "ref/resvg/text/text/percent-value-on-x-and-y.png", "diff/resvg/text/text/percent-value-on-x-and-y.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_text_text_compound_emojis() {assert_eq!(run_test("svg/resvg/text/text/compound-emojis.svg", "ref/resvg/text/text/compound-emojis.png", "diff/resvg/text/text/compound-emojis.png", false), 0)} #[test] fn resvg_text_text_xml_space() {assert_eq!(run_test("svg/resvg/text/text/xml-space.svg", "ref/resvg/text/text/xml-space.png", "diff/resvg/text/text/xml-space.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_text_fill_rule_evenodd() {assert_eq!(run_test("svg/resvg/text/text/fill-rule=evenodd.svg", "ref/resvg/text/text/fill-rule=evenodd.png", "diff/resvg/text/text/fill-rule=evenodd.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_complex_graphemes_and_coordinates_list() {assert_eq!(run_test("svg/resvg/text/text/complex-graphemes-and-coordinates-list.svg", "ref/resvg/text/text/complex-graphemes-and-coordinates-list.png", "diff/resvg/text/text/complex-graphemes-and-coordinates-list.png", false), 0)} +#[test] fn resvg_text_text_complex_graphemes_and_coordinates_list() {assert_eq!(run_test("svg/resvg/text/text/complex-graphemes-and-coordinates-list.svg", "ref/resvg/text/text/complex-graphemes-and-coordinates-list.png", "diff/resvg/text/text/complex-graphemes-and-coordinates-list.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_dx_and_dy_lists() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-dx-and-dy-lists.svg", "ref/resvg/text/text/x-and-y-with-dx-and-dy-lists.png", "diff/resvg/text/text/x-and-y-with-dx-and-dy-lists.png", false), 0)} #[test] fn resvg_text_text_rotate_with_multiple_values_and_complex_text() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-multiple-values-and-complex-text.svg", "ref/resvg/text/text/rotate-with-multiple-values-and-complex-text.png", "diff/resvg/text/text/rotate-with-multiple-values-and-complex-text.png", false), 0)} #[test] fn resvg_text_text_rotate_with_an_invalid_angle() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-an-invalid-angle.svg", "ref/resvg/text/text/rotate-with-an-invalid-angle.png", "diff/resvg/text/text/rotate-with-an-invalid-angle.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_filter_bbox() {assert_eq!(run_test("svg/resvg/text/text/filter-bbox.svg", "ref/resvg/text/text/filter-bbox.png", "diff/resvg/text/text/filter-bbox.png", false), 0)} +#[test] fn resvg_text_text_filter_bbox() {assert_eq!(run_test("svg/resvg/text/text/filter-bbox.svg", "ref/resvg/text/text/filter-bbox.png", "diff/resvg/text/text/filter-bbox.png", false), 0)} #[test] fn resvg_text_text_no_coordinates() {assert_eq!(run_test("svg/resvg/text/text/no-coordinates.svg", "ref/resvg/text/text/no-coordinates.png", "diff/resvg/text/text/no-coordinates.png", false), 0)} #[test] fn resvg_text_text_percent_value_on_dx_and_dy() {assert_eq!(run_test("svg/resvg/text/text/percent-value-on-dx-and-dy.svg", "ref/resvg/text/text/percent-value-on-dx-and-dy.png", "diff/resvg/text/text/percent-value-on-dx-and-dy.png", false), 0)} #[test] fn resvg_text_text_mm_coordinates() {assert_eq!(run_test("svg/resvg/text/text/mm-coordinates.svg", "ref/resvg/text/text/mm-coordinates.png", "diff/resvg/text/text/mm-coordinates.png", false), 0)} #[test] fn resvg_text_text_x_and_y_with_more_values_than_characters() {assert_eq!(run_test("svg/resvg/text/text/x-and-y-with-more-values-than-characters.svg", "ref/resvg/text/text/x-and-y-with-more-values-than-characters.png", "diff/resvg/text/text/x-and-y-with-more-values-than-characters.png", false), 0)} #[test] fn resvg_text_text_rotate_with_multiple_values() {assert_eq!(run_test("svg/resvg/text/text/rotate-with-multiple-values.svg", "ref/resvg/text/text/rotate-with-multiple-values.png", "diff/resvg/text/text/rotate-with-multiple-values.png", false), 0)} #[test] fn resvg_text_text_em_and_ex_coordinates() {assert_eq!(run_test("svg/resvg/text/text/em-and-ex-coordinates.svg", "ref/resvg/text/text/em-and-ex-coordinates.png", "diff/resvg/text/text/em-and-ex-coordinates.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_simple_case() {assert_eq!(run_test("svg/resvg/text/font/simple-case.svg", "ref/resvg/text/font/simple-case.png", "diff/resvg/text/font/simple-case.png", false), 0)} -#[ignore] #[test] fn resvg_text_glyph_orientation_vertical_simple_case() {assert_eq!(run_test("svg/resvg/text/glyph-orientation-vertical/simple-case.svg", "ref/resvg/text/glyph-orientation-vertical/simple-case.png", "diff/resvg/text/glyph-orientation-vertical/simple-case.png", false), 0)} +#[test] fn resvg_text_glyph_orientation_vertical_simple_case() {assert_eq!(run_test("svg/resvg/text/glyph-orientation-vertical/simple-case.svg", "ref/resvg/text/glyph-orientation-vertical/simple-case.png", "diff/resvg/text/glyph-orientation-vertical/simple-case.png", false), 0)} #[test] fn resvg_text_textLength_zero() {assert_eq!(run_test("svg/resvg/text/textLength/zero.svg", "ref/resvg/text/textLength/zero.png", "diff/resvg/text/textLength/zero.png", false), 0)} #[test] fn resvg_text_textLength_150_on_parent() {assert_eq!(run_test("svg/resvg/text/textLength/150-on-parent.svg", "ref/resvg/text/textLength/150-on-parent.png", "diff/resvg/text/textLength/150-on-parent.png", false), 0)} #[test] fn resvg_text_textLength_on_a_single_tspan() {assert_eq!(run_test("svg/resvg/text/textLength/on-a-single-tspan.svg", "ref/resvg/text/textLength/on-a-single-tspan.png", "diff/resvg/text/textLength/on-a-single-tspan.png", false), 0)} #[test] fn resvg_text_textLength_75percent() {assert_eq!(run_test("svg/resvg/text/textLength/75percent.svg", "ref/resvg/text/textLength/75percent.png", "diff/resvg/text/textLength/75percent.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_textLength_arabic() {assert_eq!(run_test("svg/resvg/text/textLength/arabic.svg", "ref/resvg/text/textLength/arabic.png", "diff/resvg/text/textLength/arabic.png", false), 0)} #[test] fn resvg_text_textLength_150() {assert_eq!(run_test("svg/resvg/text/textLength/150.svg", "ref/resvg/text/textLength/150.png", "diff/resvg/text/textLength/150.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_textLength_arabic_with_lengthAdjust() {assert_eq!(run_test("svg/resvg/text/textLength/arabic-with-lengthAdjust.svg", "ref/resvg/text/textLength/arabic-with-lengthAdjust.png", "diff/resvg/text/textLength/arabic-with-lengthAdjust.png", false), 0)} #[test] fn resvg_text_textLength_150_on_tspan() {assert_eq!(run_test("svg/resvg/text/textLength/150-on-tspan.svg", "ref/resvg/text/textLength/150-on-tspan.png", "diff/resvg/text/textLength/150-on-tspan.png", false), 0)} #[test] fn resvg_text_textLength_inherit() {assert_eq!(run_test("svg/resvg/text/textLength/inherit.svg", "ref/resvg/text/textLength/inherit.png", "diff/resvg/text/textLength/inherit.png", false), 0)} #[test] fn resvg_text_textLength_on_text_and_tspan() {assert_eq!(run_test("svg/resvg/text/textLength/on-text-and-tspan.svg", "ref/resvg/text/textLength/on-text-and-tspan.png", "diff/resvg/text/textLength/on-text-and-tspan.png", false), 0)} #[test] fn resvg_text_textLength_negative() {assert_eq!(run_test("svg/resvg/text/textLength/negative.svg", "ref/resvg/text/textLength/negative.png", "diff/resvg/text/textLength/negative.png", false), 0)} #[test] fn resvg_text_textLength_40mm() {assert_eq!(run_test("svg/resvg/text/textLength/40mm.svg", "ref/resvg/text/textLength/40mm.png", "diff/resvg/text/textLength/40mm.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_size_adjust_simple_case() {assert_eq!(run_test("svg/resvg/text/font-size-adjust/simple-case.svg", "ref/resvg/text/font-size-adjust/simple-case.png", "diff/resvg/text/font-size-adjust/simple-case.png", false), 0)} +#[test] fn resvg_text_font_size_adjust_simple_case() {assert_eq!(run_test("svg/resvg/text/font-size-adjust/simple-case.svg", "ref/resvg/text/font-size-adjust/simple-case.png", "diff/resvg/text/font-size-adjust/simple-case.png", false), 0)} #[test] fn resvg_text_font_style_inherit() {assert_eq!(run_test("svg/resvg/text/font-style/inherit.svg", "ref/resvg/text/font-style/inherit.png", "diff/resvg/text/font-style/inherit.png", false), 0)} #[test] fn resvg_text_font_style_italic() {assert_eq!(run_test("svg/resvg/text/font-style/italic.svg", "ref/resvg/text/font-style/italic.png", "diff/resvg/text/font-style/italic.png", false), 0)} #[test] fn resvg_text_font_style_oblique() {assert_eq!(run_test("svg/resvg/text/font-style/oblique.svg", "ref/resvg/text/font-style/oblique.png", "diff/resvg/text/font-style/oblique.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_family_font_list() {assert_eq!(run_test("svg/resvg/text/font-family/font-list.svg", "ref/resvg/text/font-family/font-list.png", "diff/resvg/text/font-family/font-list.png", false), 0)} +#[test] fn resvg_text_font_family_font_list() {assert_eq!(run_test("svg/resvg/text/font-family/font-list.svg", "ref/resvg/text/font-family/font-list.png", "diff/resvg/text/font-family/font-list.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_source_sans_pro() {assert_eq!(run_test("svg/resvg/text/font-family/source-sans-pro.svg", "ref/resvg/text/font-family/source-sans-pro.png", "diff/resvg/text/font-family/source-sans-pro.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_serif() {assert_eq!(run_test("svg/resvg/text/font-family/serif.svg", "ref/resvg/text/font-family/serif.png", "diff/resvg/text/font-family/serif.png", false), 0)} #[test] fn resvg_text_font_family_noto_sans() {assert_eq!(run_test("svg/resvg/text/font-family/noto-sans.svg", "ref/resvg/text/font-family/noto-sans.png", "diff/resvg/text/font-family/noto-sans.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_fantasy() {assert_eq!(run_test("svg/resvg/text/font-family/fantasy.svg", "ref/resvg/text/font-family/fantasy.png", "diff/resvg/text/font-family/fantasy.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_monospace() {assert_eq!(run_test("svg/resvg/text/font-family/monospace.svg", "ref/resvg/text/font-family/monospace.png", "diff/resvg/text/font-family/monospace.png", false), 0)} #[test] fn resvg_text_font_family_fallback_2() {assert_eq!(run_test("svg/resvg/text/font-family/fallback-2.svg", "ref/resvg/text/font-family/fallback-2.png", "diff/resvg/text/font-family/fallback-2.png", false), 0)} -#[ignore] #[test] fn resvg_text_font_family_double_quoted() {assert_eq!(run_test("svg/resvg/text/font-family/double-quoted.svg", "ref/resvg/text/font-family/double-quoted.png", "diff/resvg/text/font-family/double-quoted.png", false), 0)} +#[test] fn resvg_text_font_family_double_quoted() {assert_eq!(run_test("svg/resvg/text/font-family/double-quoted.svg", "ref/resvg/text/font-family/double-quoted.png", "diff/resvg/text/font-family/double-quoted.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_cursive() {assert_eq!(run_test("svg/resvg/text/font-family/cursive.svg", "ref/resvg/text/font-family/cursive.png", "diff/resvg/text/font-family/cursive.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_fallback_1() {assert_eq!(run_test("svg/resvg/text/font-family/fallback-1.svg", "ref/resvg/text/font-family/fallback-1.png", "diff/resvg/text/font-family/fallback-1.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_bold_sans_serif() {assert_eq!(run_test("svg/resvg/text/font-family/bold-sans-serif.svg", "ref/resvg/text/font-family/bold-sans-serif.png", "diff/resvg/text/font-family/bold-sans-serif.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_font_family_sans_serif() {assert_eq!(run_test("svg/resvg/text/font-family/sans-serif.svg", "ref/resvg/text/font-family/sans-serif.png", "diff/resvg/text/font-family/sans-serif.png", false), 0)} #[test] fn resvg_text_text_decoration_underline() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline.svg", "ref/resvg/text/text-decoration/underline.png", "diff/resvg/text/text-decoration/underline.png", false), 0)} #[test] fn resvg_text_text_decoration_line_through() {assert_eq!(run_test("svg/resvg/text/text-decoration/line-through.svg", "ref/resvg/text/text-decoration/line-through.png", "diff/resvg/text/text-decoration/line-through.png", false), 0)} #[test] fn resvg_text_text_decoration_all_types_inline_comma_separated() {assert_eq!(run_test("svg/resvg/text/text-decoration/all-types-inline-comma-separated.svg", "ref/resvg/text/text-decoration/all-types-inline-comma-separated.png", "diff/resvg/text/text-decoration/all-types-inline-comma-separated.png", false), 0)} #[test] fn resvg_text_text_decoration_tspan_decoration() {assert_eq!(run_test("svg/resvg/text/text-decoration/tspan-decoration.svg", "ref/resvg/text/text-decoration/tspan-decoration.png", "diff/resvg/text/text-decoration/tspan-decoration.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_decoration_underline_with_dy_list_2() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-dy-list-2.svg", "ref/resvg/text/text-decoration/underline-with-dy-list-2.png", "diff/resvg/text/text-decoration/underline-with-dy-list-2.png", false), 0)} +#[test] fn resvg_text_text_decoration_underline_with_dy_list_2() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-dy-list-2.svg", "ref/resvg/text/text-decoration/underline-with-dy-list-2.png", "diff/resvg/text/text-decoration/underline-with-dy-list-2.png", false), 0)} #[test] fn resvg_text_text_decoration_outside_the_text_element() {assert_eq!(run_test("svg/resvg/text/text-decoration/outside-the-text-element.svg", "ref/resvg/text/text-decoration/outside-the-text-element.png", "diff/resvg/text/text-decoration/outside-the-text-element.png", false), 0)} #[test] fn resvg_text_text_decoration_underline_with_dy_list_1() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-dy-list-1.svg", "ref/resvg/text/text-decoration/underline-with-dy-list-1.png", "diff/resvg/text/text-decoration/underline-with-dy-list-1.png", false), 0)} #[test] fn resvg_text_text_decoration_all_types_nested() {assert_eq!(run_test("svg/resvg/text/text-decoration/all-types-nested.svg", "ref/resvg/text/text-decoration/all-types-nested.png", "diff/resvg/text/text-decoration/all-types-nested.png", false), 0)} @@ -1255,23 +1333,24 @@ use crate::run_test; #[test] fn resvg_text_text_decoration_underline_with_y_list() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-y-list.svg", "ref/resvg/text/text-decoration/underline-with-y-list.png", "diff/resvg/text/text-decoration/underline-with-y-list.png", false), 0)} #[test] fn resvg_text_text_decoration_all_types_inline_no_spaces() {assert_eq!(run_test("svg/resvg/text/text-decoration/all-types-inline-no-spaces.svg", "ref/resvg/text/text-decoration/all-types-inline-no-spaces.png", "diff/resvg/text/text-decoration/all-types-inline-no-spaces.png", false), 0)} #[test] fn resvg_text_text_decoration_indirect_with_multiple_colors() {assert_eq!(run_test("svg/resvg/text/text-decoration/indirect-with-multiple-colors.svg", "ref/resvg/text/text-decoration/indirect-with-multiple-colors.png", "diff/resvg/text/text-decoration/indirect-with-multiple-colors.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_decoration_underline_with_rotate_list_4() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-rotate-list-4.svg", "ref/resvg/text/text-decoration/underline-with-rotate-list-4.png", "diff/resvg/text/text-decoration/underline-with-rotate-list-4.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_decoration_indirect() {assert_eq!(run_test("svg/resvg/text/text-decoration/indirect.svg", "ref/resvg/text/text-decoration/indirect.png", "diff/resvg/text/text-decoration/indirect.png", false), 0)} +#[test] fn resvg_text_text_decoration_underline_with_rotate_list_4() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-rotate-list-4.svg", "ref/resvg/text/text-decoration/underline-with-rotate-list-4.png", "diff/resvg/text/text-decoration/underline-with-rotate-list-4.png", false), 0)} +#[test] fn resvg_text_text_decoration_indirect() {assert_eq!(run_test("svg/resvg/text/text-decoration/indirect.svg", "ref/resvg/text/text-decoration/indirect.png", "diff/resvg/text/text-decoration/indirect.png", false), 0)} #[test] fn resvg_text_text_decoration_underline_with_rotate_list_3() {assert_eq!(run_test("svg/resvg/text/text-decoration/underline-with-rotate-list-3.svg", "ref/resvg/text/text-decoration/underline-with-rotate-list-3.png", "diff/resvg/text/text-decoration/underline-with-rotate-list-3.png", false), 0)} #[test] fn resvg_text_text_decoration_style_resolving_3() {assert_eq!(run_test("svg/resvg/text/text-decoration/style-resolving-3.svg", "ref/resvg/text/text-decoration/style-resolving-3.png", "diff/resvg/text/text-decoration/style-resolving-3.png", false), 0)} #[test] fn resvg_text_text_decoration_all_types_inline() {assert_eq!(run_test("svg/resvg/text/text-decoration/all-types-inline.svg", "ref/resvg/text/text-decoration/all-types-inline.png", "diff/resvg/text/text-decoration/all-types-inline.png", false), 0)} #[test] fn resvg_text_text_decoration_style_resolving_2() {assert_eq!(run_test("svg/resvg/text/text-decoration/style-resolving-2.svg", "ref/resvg/text/text-decoration/style-resolving-2.png", "diff/resvg/text/text-decoration/style-resolving-2.png", false), 0)} #[test] fn resvg_text_text_decoration_style_resolving_1() {assert_eq!(run_test("svg/resvg/text/text-decoration/style-resolving-1.svg", "ref/resvg/text/text-decoration/style-resolving-1.png", "diff/resvg/text/text-decoration/style-resolving-1.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_decoration_style_resolving_4() {assert_eq!(run_test("svg/resvg/text/text-decoration/style-resolving-4.svg", "ref/resvg/text/text-decoration/style-resolving-4.png", "diff/resvg/text/text-decoration/style-resolving-4.png", false), 0)} -#[ignore] #[test] fn resvg_text_text_decoration_with_textLength_on_a_single_character() {assert_eq!(run_test("svg/resvg/text/text-decoration/with-textLength-on-a-single-character.svg", "ref/resvg/text/text-decoration/with-textLength-on-a-single-character.png", "diff/resvg/text/text-decoration/with-textLength-on-a-single-character.png", false), 0)} +#[test] fn resvg_text_text_decoration_style_resolving_4() {assert_eq!(run_test("svg/resvg/text/text-decoration/style-resolving-4.svg", "ref/resvg/text/text-decoration/style-resolving-4.png", "diff/resvg/text/text-decoration/style-resolving-4.png", false), 0)} +#[test] fn resvg_text_text_decoration_with_textLength_on_a_single_character() {assert_eq!(run_test("svg/resvg/text/text-decoration/with-textLength-on-a-single-character.svg", "ref/resvg/text/text-decoration/with-textLength-on-a-single-character.png", "diff/resvg/text/text-decoration/with-textLength-on-a-single-character.png", false), 0)} #[test] fn resvg_text_textPath_invalid_textPath_in_the_middle() {assert_eq!(run_test("svg/resvg/text/textPath/invalid-textPath-in-the-middle.svg", "ref/resvg/text/textPath/invalid-textPath-in-the-middle.png", "diff/resvg/text/textPath/invalid-textPath-in-the-middle.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_spacing_auto() {assert_eq!(run_test("svg/resvg/text/textPath/spacing=auto.svg", "ref/resvg/text/textPath/spacing=auto.png", "diff/resvg/text/textPath/spacing=auto.png", false), 0)} +#[test] fn resvg_text_textPath_spacing_auto() {assert_eq!(run_test("svg/resvg/text/textPath/spacing=auto.svg", "ref/resvg/text/textPath/spacing=auto.png", "diff/resvg/text/textPath/spacing=auto.png", false), 0)} #[test] fn resvg_text_textPath_with_letter_spacing() {assert_eq!(run_test("svg/resvg/text/textPath/with-letter-spacing.svg", "ref/resvg/text/textPath/with-letter-spacing.png", "diff/resvg/text/textPath/with-letter-spacing.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_with_invalid_path_and_xlink_href() {assert_eq!(run_test("svg/resvg/text/textPath/with-invalid-path-and-xlink-href.svg", "ref/resvg/text/textPath/with-invalid-path-and-xlink-href.png", "diff/resvg/text/textPath/with-invalid-path-and-xlink-href.png", false), 0)} +#[test] fn resvg_text_textPath_with_invalid_path_and_xlink_href() {assert_eq!(run_test("svg/resvg/text/textPath/with-invalid-path-and-xlink-href.svg", "ref/resvg/text/textPath/with-invalid-path-and-xlink-href.png", "diff/resvg/text/textPath/with-invalid-path-and-xlink-href.png", false), 0)} #[test] fn resvg_text_textPath_link_to_rect() {assert_eq!(run_test("svg/resvg/text/textPath/link-to-rect.svg", "ref/resvg/text/textPath/link-to-rect.png", "diff/resvg/text/textPath/link-to-rect.png", false), 0)} #[test] fn resvg_text_textPath_dy_with_tiny_coordinates() {assert_eq!(run_test("svg/resvg/text/textPath/dy-with-tiny-coordinates.svg", "ref/resvg/text/textPath/dy-with-tiny-coordinates.png", "diff/resvg/text/textPath/dy-with-tiny-coordinates.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_with_path() {assert_eq!(run_test("svg/resvg/text/textPath/with-path.svg", "ref/resvg/text/textPath/with-path.png", "diff/resvg/text/textPath/with-path.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_with_filter() {assert_eq!(run_test("svg/resvg/text/textPath/with-filter.svg", "ref/resvg/text/textPath/with-filter.png", "diff/resvg/text/textPath/with-filter.png", false), 0)} +#[test] fn resvg_text_textPath_with_path() {assert_eq!(run_test("svg/resvg/text/textPath/with-path.svg", "ref/resvg/text/textPath/with-path.png", "diff/resvg/text/textPath/with-path.png", false), 0)} +#[test] fn resvg_text_textPath_with_filter() {assert_eq!(run_test("svg/resvg/text/textPath/with-filter.svg", "ref/resvg/text/textPath/with-filter.png", "diff/resvg/text/textPath/with-filter.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_textPath_complex() {assert_eq!(run_test("svg/resvg/text/textPath/complex.svg", "ref/resvg/text/textPath/complex.png", "diff/resvg/text/textPath/complex.png", false), 0)} #[test] fn resvg_text_textPath_invalid_link() {assert_eq!(run_test("svg/resvg/text/textPath/invalid-link.svg", "ref/resvg/text/textPath/invalid-link.png", "diff/resvg/text/textPath/invalid-link.png", false), 0)} #[test] fn resvg_text_textPath_mixed_children_2() {assert_eq!(run_test("svg/resvg/text/textPath/mixed-children-2.svg", "ref/resvg/text/textPath/mixed-children-2.png", "diff/resvg/text/textPath/mixed-children-2.png", false), 0)} @@ -1280,25 +1359,26 @@ use crate::run_test; #[test] fn resvg_text_textPath_nested() {assert_eq!(run_test("svg/resvg/text/textPath/nested.svg", "ref/resvg/text/textPath/nested.png", "diff/resvg/text/textPath/nested.png", false), 0)} #[test] fn resvg_text_textPath_with_transform_outside_a_referenced_path() {assert_eq!(run_test("svg/resvg/text/textPath/with-transform-outside-a-referenced-path.svg", "ref/resvg/text/textPath/with-transform-outside-a-referenced-path.png", "diff/resvg/text/textPath/with-transform-outside-a-referenced-path.png", false), 0)} #[test] fn resvg_text_textPath_with_text_anchor() {assert_eq!(run_test("svg/resvg/text/textPath/with-text-anchor.svg", "ref/resvg/text/textPath/with-text-anchor.png", "diff/resvg/text/textPath/with-text-anchor.png", false), 0)} +// font is not part of test suite yet #[ignore] #[test] fn resvg_text_textPath_writing_mode_tb() {assert_eq!(run_test("svg/resvg/text/textPath/writing-mode=tb.svg", "ref/resvg/text/textPath/writing-mode=tb.png", "diff/resvg/text/textPath/writing-mode=tb.png", false), 0)} #[test] fn resvg_text_textPath_with_big_letter_spacing() {assert_eq!(run_test("svg/resvg/text/textPath/with-big-letter-spacing.svg", "ref/resvg/text/textPath/with-big-letter-spacing.png", "diff/resvg/text/textPath/with-big-letter-spacing.png", false), 0)} #[test] fn resvg_text_textPath_path_with_ClosePath() {assert_eq!(run_test("svg/resvg/text/textPath/path-with-ClosePath.svg", "ref/resvg/text/textPath/path-with-ClosePath.png", "diff/resvg/text/textPath/path-with-ClosePath.png", false), 0)} #[test] fn resvg_text_textPath_simple_case() {assert_eq!(run_test("svg/resvg/text/textPath/simple-case.svg", "ref/resvg/text/textPath/simple-case.png", "diff/resvg/text/textPath/simple-case.png", false), 0)} #[test] fn resvg_text_textPath_path_with_subpaths_and_startOffset() {assert_eq!(run_test("svg/resvg/text/textPath/path-with-subpaths-and-startOffset.svg", "ref/resvg/text/textPath/path-with-subpaths-and-startOffset.png", "diff/resvg/text/textPath/path-with-subpaths-and-startOffset.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_method_stretch() {assert_eq!(run_test("svg/resvg/text/textPath/method=stretch.svg", "ref/resvg/text/textPath/method=stretch.png", "diff/resvg/text/textPath/method=stretch.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_with_path_and_xlink_href() {assert_eq!(run_test("svg/resvg/text/textPath/with-path-and-xlink-href.svg", "ref/resvg/text/textPath/with-path-and-xlink-href.png", "diff/resvg/text/textPath/with-path-and-xlink-href.png", false), 0)} +#[test] fn resvg_text_textPath_method_stretch() {assert_eq!(run_test("svg/resvg/text/textPath/method=stretch.svg", "ref/resvg/text/textPath/method=stretch.png", "diff/resvg/text/textPath/method=stretch.png", false), 0)} +#[test] fn resvg_text_textPath_with_path_and_xlink_href() {assert_eq!(run_test("svg/resvg/text/textPath/with-path-and-xlink-href.svg", "ref/resvg/text/textPath/with-path-and-xlink-href.png", "diff/resvg/text/textPath/with-path-and-xlink-href.png", false), 0)} #[test] fn resvg_text_textPath_no_link() {assert_eq!(run_test("svg/resvg/text/textPath/no-link.svg", "ref/resvg/text/textPath/no-link.png", "diff/resvg/text/textPath/no-link.png", false), 0)} #[test] fn resvg_text_textPath_with_coordinates_on_text() {assert_eq!(run_test("svg/resvg/text/textPath/with-coordinates-on-text.svg", "ref/resvg/text/textPath/with-coordinates-on-text.png", "diff/resvg/text/textPath/with-coordinates-on-text.png", false), 0)} #[test] fn resvg_text_textPath_m_A_path() {assert_eq!(run_test("svg/resvg/text/textPath/m-A-path.svg", "ref/resvg/text/textPath/m-A-path.png", "diff/resvg/text/textPath/m-A-path.png", false), 0)} #[test] fn resvg_text_textPath_closed_path() {assert_eq!(run_test("svg/resvg/text/textPath/closed-path.svg", "ref/resvg/text/textPath/closed-path.png", "diff/resvg/text/textPath/closed-path.png", false), 0)} #[test] fn resvg_text_textPath_with_baseline_shift() {assert_eq!(run_test("svg/resvg/text/textPath/with-baseline-shift.svg", "ref/resvg/text/textPath/with-baseline-shift.png", "diff/resvg/text/textPath/with-baseline-shift.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_with_baseline_shift_and_rotate() {assert_eq!(run_test("svg/resvg/text/textPath/with-baseline-shift-and-rotate.svg", "ref/resvg/text/textPath/with-baseline-shift-and-rotate.png", "diff/resvg/text/textPath/with-baseline-shift-and-rotate.png", false), 0)} +#[test] fn resvg_text_textPath_with_baseline_shift_and_rotate() {assert_eq!(run_test("svg/resvg/text/textPath/with-baseline-shift-and-rotate.svg", "ref/resvg/text/textPath/with-baseline-shift-and-rotate.png", "diff/resvg/text/textPath/with-baseline-shift-and-rotate.png", false), 0)} #[test] fn resvg_text_textPath_very_long_text() {assert_eq!(run_test("svg/resvg/text/textPath/very-long-text.svg", "ref/resvg/text/textPath/very-long-text.png", "diff/resvg/text/textPath/very-long-text.png", false), 0)} #[test] fn resvg_text_textPath_startOffset_5mm() {assert_eq!(run_test("svg/resvg/text/textPath/startOffset=5mm.svg", "ref/resvg/text/textPath/startOffset=5mm.png", "diff/resvg/text/textPath/startOffset=5mm.png", false), 0)} #[test] fn resvg_text_textPath_with_underline() {assert_eq!(run_test("svg/resvg/text/textPath/with-underline.svg", "ref/resvg/text/textPath/with-underline.png", "diff/resvg/text/textPath/with-underline.png", false), 0)} #[test] fn resvg_text_textPath_tspan_with_absolute_position() {assert_eq!(run_test("svg/resvg/text/textPath/tspan-with-absolute-position.svg", "ref/resvg/text/textPath/tspan-with-absolute-position.png", "diff/resvg/text/textPath/tspan-with-absolute-position.png", false), 0)} #[test] fn resvg_text_textPath_startOffset_10percent() {assert_eq!(run_test("svg/resvg/text/textPath/startOffset=10percent.svg", "ref/resvg/text/textPath/startOffset=10percent.png", "diff/resvg/text/textPath/startOffset=10percent.png", false), 0)} -#[ignore] #[test] fn resvg_text_textPath_side_right() {assert_eq!(run_test("svg/resvg/text/textPath/side=right.svg", "ref/resvg/text/textPath/side=right.png", "diff/resvg/text/textPath/side=right.png", false), 0)} +#[test] fn resvg_text_textPath_side_right() {assert_eq!(run_test("svg/resvg/text/textPath/side=right.svg", "ref/resvg/text/textPath/side=right.png", "diff/resvg/text/textPath/side=right.png", false), 0)} #[test] fn resvg_text_textPath_with_rotate() {assert_eq!(run_test("svg/resvg/text/textPath/with-rotate.svg", "ref/resvg/text/textPath/with-rotate.png", "diff/resvg/text/textPath/with-rotate.png", false), 0)} #[test] fn resvg_text_textPath_m_L_Z_path() {assert_eq!(run_test("svg/resvg/text/textPath/m-L-Z-path.svg", "ref/resvg/text/textPath/m-L-Z-path.png", "diff/resvg/text/textPath/m-L-Z-path.png", false), 0)} #[test] fn resvg_text_textPath_with_transform_on_a_referenced_path() {assert_eq!(run_test("svg/resvg/text/textPath/with-transform-on-a-referenced-path.svg", "ref/resvg/text/textPath/with-transform-on-a-referenced-path.png", "diff/resvg/text/textPath/with-transform-on-a-referenced-path.png", false), 0)} @@ -1309,12 +1389,14 @@ use crate::run_test; #[test] fn resvg_text_textPath_startOffset_30() {assert_eq!(run_test("svg/resvg/text/textPath/startOffset=30.svg", "ref/resvg/text/textPath/startOffset=30.png", "diff/resvg/text/textPath/startOffset=30.png", false), 0)} #[test] fn resvg_text_textPath_tspan_with_relative_position() {assert_eq!(run_test("svg/resvg/text/textPath/tspan-with-relative-position.svg", "ref/resvg/text/textPath/tspan-with-relative-position.png", "diff/resvg/text/textPath/tspan-with-relative-position.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_rect_and_percent_values() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-rect-and-percent-values.svg", "ref/resvg/structure/svg/nested-svg-with-rect-and-percent-values.png", "diff/resvg/structure/svg/nested-svg-with-rect-and-percent-values.png", false), 0)} +// invalid size #[ignore] #[test] fn resvg_structure_svg_zero_size() {assert_eq!(run_test("svg/resvg/structure/svg/zero-size.svg", "ref/resvg/structure/svg/zero-size.png", "diff/resvg/structure/svg/zero-size.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_xMinYMin() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMinYMin.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMinYMin.png", "diff/resvg/structure/svg/preserveAspectRatio=xMinYMin.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_rect_and_viewBox_2() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-rect-and-viewBox-2.svg", "ref/resvg/structure/svg/nested-svg-with-rect-and-viewBox-2.png", "diff/resvg/structure/svg/nested-svg-with-rect-and-viewBox-2.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_rect_and_viewBox_3() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-rect-and-viewBox-3.svg", "ref/resvg/structure/svg/nested-svg-with-rect-and-viewBox-3.png", "diff/resvg/structure/svg/nested-svg-with-rect-and-viewBox-3.png", false), 0)} #[test] fn resvg_structure_svg_no_children() {assert_eq!(run_test("svg/resvg/structure/svg/no-children.svg", "ref/resvg/structure/svg/no-children.png", "diff/resvg/structure/svg/no-children.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_rect_and_viewBox_1() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-rect-and-viewBox-1.svg", "ref/resvg/structure/svg/nested-svg-with-rect-and-viewBox-1.png", "diff/resvg/structure/svg/nested-svg-with-rect-and-viewBox-1.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_structure_svg_funcIRI_with_invalid_characters() {assert_eq!(run_test("svg/resvg/structure/svg/funcIRI-with-invalid-characters.svg", "ref/resvg/structure/svg/funcIRI-with-invalid-characters.png", "diff/resvg/structure/svg/funcIRI-with-invalid-characters.png", false), 0)} #[test] fn resvg_structure_svg_elements_via_ENTITY_reference_1() {assert_eq!(run_test("svg/resvg/structure/svg/elements-via-ENTITY-reference-1.svg", "ref/resvg/structure/svg/elements-via-ENTITY-reference-1.png", "diff/resvg/structure/svg/elements-via-ENTITY-reference-1.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_xMaxYMax_slice() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMaxYMax-slice.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMaxYMax-slice.png", "diff/resvg/structure/svg/preserveAspectRatio=xMaxYMax-slice.png", false), 0)} @@ -1325,21 +1407,26 @@ use crate::run_test; #[test] fn resvg_structure_svg_preserveAspectRatio_xMaxYMax() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMaxYMax.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMaxYMax.png", "diff/resvg/structure/svg/preserveAspectRatio=xMaxYMax.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_relative_width_and_height() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-relative-width-and-height.svg", "ref/resvg/structure/svg/nested-svg-with-relative-width-and-height.png", "diff/resvg/structure/svg/nested-svg-with-relative-width-and-height.png", false), 0)} #[test] fn resvg_structure_svg_mixed_namespaces() {assert_eq!(run_test("svg/resvg/structure/svg/mixed-namespaces.svg", "ref/resvg/structure/svg/mixed-namespaces.png", "diff/resvg/structure/svg/mixed-namespaces.png", false), 0)} -#[ignore] #[test] fn resvg_structure_svg_funcIRI_with_quotes() {assert_eq!(run_test("svg/resvg/structure/svg/funcIRI-with-quotes.svg", "ref/resvg/structure/svg/funcIRI-with-quotes.png", "diff/resvg/structure/svg/funcIRI-with-quotes.png", false), 0)} +#[test] fn resvg_structure_svg_funcIRI_with_quotes() {assert_eq!(run_test("svg/resvg/structure/svg/funcIRI-with-quotes.svg", "ref/resvg/structure/svg/funcIRI-with-quotes.png", "diff/resvg/structure/svg/funcIRI-with-quotes.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_overflow_visible() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-overflow-visible.svg", "ref/resvg/structure/svg/nested-svg-with-overflow-visible.png", "diff/resvg/structure/svg/nested-svg-with-overflow-visible.png", false), 0)} +// invalid size #[ignore] #[test] fn resvg_structure_svg_negative_size() {assert_eq!(run_test("svg/resvg/structure/svg/negative-size.svg", "ref/resvg/structure/svg/negative-size.png", "diff/resvg/structure/svg/negative-size.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_xMidYMid() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMidYMid.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMidYMid.png", "diff/resvg/structure/svg/preserveAspectRatio=xMidYMid.png", false), 0)} #[test] fn resvg_structure_svg_proportional_viewBox() {assert_eq!(run_test("svg/resvg/structure/svg/proportional-viewBox.svg", "ref/resvg/structure/svg/proportional-viewBox.png", "diff/resvg/structure/svg/proportional-viewBox.png", false), 0)} -#[test] fn resvg_structure_svg_no_size() {assert_eq!(run_test("svg/resvg/structure/svg/no-size.svg", "ref/resvg/structure/svg/no-size.png", "diff/resvg/structure/svg/no-size.png", false), 0)} +// invalid size +#[ignore] #[test] fn resvg_structure_svg_no_size() {assert_eq!(run_test("svg/resvg/structure/svg/no-size.svg", "ref/resvg/structure/svg/no-size.png", "diff/resvg/structure/svg/no-size.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_xMidYMid_slice() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMidYMid-slice.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMidYMid-slice.png", "diff/resvg/structure/svg/preserveAspectRatio=xMidYMid-slice.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_xMinYMin_slice() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=xMinYMin-slice.svg", "ref/resvg/structure/svg/preserveAspectRatio=xMinYMin-slice.png", "diff/resvg/structure/svg/preserveAspectRatio=xMinYMin-slice.png", false), 0)} +// invalid encoding +#[ignore] #[test] fn resvg_structure_svg_not_UTF_8_encoding() {assert_eq!(run_test("svg/resvg/structure/svg/not-UTF-8-encoding.svg", "ref/resvg/structure/svg/not-UTF-8-encoding.png", "diff/resvg/structure/svg/not-UTF-8-encoding.png", false), 0)} #[test] fn resvg_structure_svg_preserveAspectRatio_none() {assert_eq!(run_test("svg/resvg/structure/svg/preserveAspectRatio=none.svg", "ref/resvg/structure/svg/preserveAspectRatio=none.png", "diff/resvg/structure/svg/preserveAspectRatio=none.png", false), 0)} #[test] fn resvg_structure_svg_attribute_value_via_ENTITY_reference() {assert_eq!(run_test("svg/resvg/structure/svg/attribute-value-via-ENTITY-reference.svg", "ref/resvg/structure/svg/attribute-value-via-ENTITY-reference.png", "diff/resvg/structure/svg/attribute-value-via-ENTITY-reference.png", false), 0)} #[test] fn resvg_structure_svg_explicit_svg_namespace() {assert_eq!(run_test("svg/resvg/structure/svg/explicit-svg-namespace.svg", "ref/resvg/structure/svg/explicit-svg-namespace.png", "diff/resvg/structure/svg/explicit-svg-namespace.png", false), 0)} -#[ignore] #[test] fn resvg_structure_svg_invalid_id_attribute_2() {assert_eq!(run_test("svg/resvg/structure/svg/invalid-id-attribute-2.svg", "ref/resvg/structure/svg/invalid-id-attribute-2.png", "diff/resvg/structure/svg/invalid-id-attribute-2.png", false), 0)} +#[test] fn resvg_structure_svg_invalid_id_attribute_2() {assert_eq!(run_test("svg/resvg/structure/svg/invalid-id-attribute-2.svg", "ref/resvg/structure/svg/invalid-id-attribute-2.png", "diff/resvg/structure/svg/invalid-id-attribute-2.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_structure_svg_funcIRI_parsing() {assert_eq!(run_test("svg/resvg/structure/svg/funcIRI-parsing.svg", "ref/resvg/structure/svg/funcIRI-parsing.png", "diff/resvg/structure/svg/funcIRI-parsing.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_overflow_auto() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-overflow-auto.svg", "ref/resvg/structure/svg/nested-svg-with-overflow-auto.png", "diff/resvg/structure/svg/nested-svg-with-overflow-auto.png", false), 0)} -#[ignore] #[test] fn resvg_structure_svg_invalid_id_attribute_1() {assert_eq!(run_test("svg/resvg/structure/svg/invalid-id-attribute-1.svg", "ref/resvg/structure/svg/invalid-id-attribute-1.png", "diff/resvg/structure/svg/invalid-id-attribute-1.png", false), 0)} +#[test] fn resvg_structure_svg_invalid_id_attribute_1() {assert_eq!(run_test("svg/resvg/structure/svg/invalid-id-attribute-1.svg", "ref/resvg/structure/svg/invalid-id-attribute-1.png", "diff/resvg/structure/svg/invalid-id-attribute-1.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_with_viewBox() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-with-viewBox.svg", "ref/resvg/structure/svg/nested-svg-with-viewBox.png", "diff/resvg/structure/svg/nested-svg-with-viewBox.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg_one_with_rect_and_one_with_viewBox() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg-one-with-rect-and-one-with-viewBox.svg", "ref/resvg/structure/svg/nested-svg-one-with-rect-and-one-with-viewBox.png", "diff/resvg/structure/svg/nested-svg-one-with-rect-and-one-with-viewBox.png", false), 0)} #[test] fn resvg_structure_svg_nested_svg() {assert_eq!(run_test("svg/resvg/structure/svg/nested-svg.svg", "ref/resvg/structure/svg/nested-svg.png", "diff/resvg/structure/svg/nested-svg.png", false), 0)} @@ -1364,8 +1451,9 @@ use crate::run_test; #[test] fn resvg_structure_style_iD_selector() {assert_eq!(run_test("svg/resvg/structure/style/iD-selector.svg", "ref/resvg/structure/style/iD-selector.png", "diff/resvg/structure/style/iD-selector.png", false), 0)} #[test] fn resvg_structure_style_non_presentational_attribute() {assert_eq!(run_test("svg/resvg/structure/style/non-presentational-attribute.svg", "ref/resvg/structure/style/non-presentational-attribute.png", "diff/resvg/structure/style/non-presentational-attribute.png", false), 0)} #[test] fn resvg_structure_style_invalid_type() {assert_eq!(run_test("svg/resvg/structure/style/invalid-type.svg", "ref/resvg/structure/style/invalid-type.png", "diff/resvg/structure/style/invalid-type.png", false), 0)} -#[ignore] #[test] fn resvg_structure_style_important() {assert_eq!(run_test("svg/resvg/structure/style/important.svg", "ref/resvg/structure/style/important.png", "diff/resvg/structure/style/important.png", false), 0)} +#[test] fn resvg_structure_style_important() {assert_eq!(run_test("svg/resvg/structure/style/important.svg", "ref/resvg/structure/style/important.png", "diff/resvg/structure/style/important.png", false), 0)} #[test] fn resvg_structure_style_transform() {assert_eq!(run_test("svg/resvg/structure/style/transform.svg", "ref/resvg/structure/style/transform.png", "diff/resvg/structure/style/transform.png", false), 0)} +#[test] fn resvg_structure_style_external_CSS() {assert_eq!(run_test("svg/resvg/structure/style/external-CSS.svg", "ref/resvg/structure/style/external-CSS.png", "diff/resvg/structure/style/external-CSS.png", false), 0)} #[test] fn resvg_structure_style_type_selector() {assert_eq!(run_test("svg/resvg/structure/style/type-selector.svg", "ref/resvg/structure/style/type-selector.png", "diff/resvg/structure/style/type-selector.png", false), 0)} #[test] fn resvg_structure_style_class_selector() {assert_eq!(run_test("svg/resvg/structure/style/class-selector.svg", "ref/resvg/structure/style/class-selector.png", "diff/resvg/structure/style/class-selector.png", false), 0)} #[test] fn resvg_structure_style_resolve_order() {assert_eq!(run_test("svg/resvg/structure/style/resolve-order.svg", "ref/resvg/structure/style/resolve-order.png", "diff/resvg/structure/style/resolve-order.png", false), 0)} @@ -1397,25 +1485,39 @@ use crate::run_test; #[test] fn resvg_structure_a_on_shape() {assert_eq!(run_test("svg/resvg/structure/a/on-shape.svg", "ref/resvg/structure/a/on-shape.png", "diff/resvg/structure/a/on-shape.png", false), 0)} #[test] fn resvg_structure_a_on_tspan() {assert_eq!(run_test("svg/resvg/structure/a/on-tspan.svg", "ref/resvg/structure/a/on-tspan.png", "diff/resvg/structure/a/on-tspan.png", false), 0)} #[test] fn resvg_structure_a_inside_tspan() {assert_eq!(run_test("svg/resvg/structure/a/inside-tspan.svg", "ref/resvg/structure/a/inside-tspan.png", "diff/resvg/structure/a/inside-tspan.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_external_jpeg() {assert_eq!(run_test("svg/resvg/structure/image/external-jpeg.svg", "ref/resvg/structure/image/external-jpeg.png", "diff/resvg/structure/image/external-jpeg.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_external_svg() {assert_eq!(run_test("svg/resvg/structure/image/external-svg.svg", "ref/resvg/structure/image/external-svg.png", "diff/resvg/structure/image/external-svg.png", false), 0)} +#[test] fn resvg_structure_image_url_to_png() {assert_eq!(run_test("svg/resvg/structure/image/url-to-png.svg", "ref/resvg/structure/image/url-to-png.png", "diff/resvg/structure/image/url-to-png.png", false), 0)} #[test] fn resvg_structure_image_embedded_svg() {assert_eq!(run_test("svg/resvg/structure/image/embedded-svg.svg", "ref/resvg/structure/image/embedded-svg.png", "diff/resvg/structure/image/embedded-svg.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMaxYMax_meet() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet.svg", "ref/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet.png", "diff/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMidYMid_meet() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMidYMid-meet.svg", "ref/resvg/structure/image/preserveAspectRatio=xMidYMid-meet.png", "diff/resvg/structure/image/preserveAspectRatio=xMidYMid-meet.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_zero_height() {assert_eq!(run_test("svg/resvg/structure/image/zero-height.svg", "ref/resvg/structure/image/zero-height.png", "diff/resvg/structure/image/zero-height.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_no_width_and_height_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/no-width-and-height-on-svg.svg", "ref/resvg/structure/image/no-width-and-height-on-svg.png", "diff/resvg/structure/image/no-width-and-height-on-svg.png", false), 0)} #[test] fn resvg_structure_image_embedded_16bit_png() {assert_eq!(run_test("svg/resvg/structure/image/embedded-16bit-png.svg", "ref/resvg/structure/image/embedded-16bit-png.png", "diff/resvg/structure/image/embedded-16bit-png.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMidYMid_meet_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMidYMid-meet-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMidYMid-meet-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMidYMid-meet-on-svg.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_zero_width() {assert_eq!(run_test("svg/resvg/structure/image/zero-width.svg", "ref/resvg/structure/image/zero-width.png", "diff/resvg/structure/image/zero-width.png", false), 0)} #[test] fn resvg_structure_image_embedded_svgz() {assert_eq!(run_test("svg/resvg/structure/image/embedded-svgz.svg", "ref/resvg/structure/image/embedded-svgz.png", "diff/resvg/structure/image/embedded-svgz.png", false), 0)} +// no relative paths supported +#[ignore] #[test] fn resvg_structure_image_external_svg_with_transform() {assert_eq!(run_test("svg/resvg/structure/image/external-svg-with-transform.svg", "ref/resvg/structure/image/external-svg-with-transform.png", "diff/resvg/structure/image/external-svg-with-transform.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMinYMin_slice_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMinYMin-slice-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMinYMin-slice-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMinYMin-slice-on-svg.png", false), 0)} #[test] fn resvg_structure_image_embedded_jpeg_as_image_jpeg() {assert_eq!(run_test("svg/resvg/structure/image/embedded-jpeg-as-image-jpeg.svg", "ref/resvg/structure/image/embedded-jpeg-as-image-jpeg.png", "diff/resvg/structure/image/embedded-jpeg-as-image-jpeg.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_raster_image_and_size_with_odd_numbers() {assert_eq!(run_test("svg/resvg/structure/image/raster-image-and-size-with-odd-numbers.svg", "ref/resvg/structure/image/raster-image-and-size-with-odd-numbers.png", "diff/resvg/structure/image/raster-image-and-size-with-odd-numbers.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_float_size() {assert_eq!(run_test("svg/resvg/structure/image/float-size.svg", "ref/resvg/structure/image/float-size.png", "diff/resvg/structure/image/float-size.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMaxYMax_slice() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice.svg", "ref/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice.png", "diff/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_no_height() {assert_eq!(run_test("svg/resvg/structure/image/no-height.svg", "ref/resvg/structure/image/no-height.png", "diff/resvg/structure/image/no-height.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_width_and_height_set_to_auto() {assert_eq!(run_test("svg/resvg/structure/image/width-and-height-set-to-auto.svg", "ref/resvg/structure/image/width-and-height-set-to-auto.png", "diff/resvg/structure/image/width-and-height-set-to-auto.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_external_png() {assert_eq!(run_test("svg/resvg/structure/image/external-png.svg", "ref/resvg/structure/image/external-png.png", "diff/resvg/structure/image/external-png.png", false), 0)} +#[test] fn resvg_structure_image_url_to_svg() {assert_eq!(run_test("svg/resvg/structure/image/url-to-svg.svg", "ref/resvg/structure/image/url-to-svg.png", "diff/resvg/structure/image/url-to-svg.png", false), 0)} #[test] fn resvg_structure_image_embedded_svg_with_text() {assert_eq!(run_test("svg/resvg/structure/image/embedded-svg-with-text.svg", "ref/resvg/structure/image/embedded-svg-with-text.png", "diff/resvg/structure/image/embedded-svg-with-text.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMidYMid_slice_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMidYMid-slice-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMidYMid-slice-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMidYMid-slice-on-svg.png", false), 0)} #[test] fn resvg_structure_image_embedded_svg_without_mime() {assert_eq!(run_test("svg/resvg/structure/image/embedded-svg-without-mime.svg", "ref/resvg/structure/image/embedded-svg-without-mime.png", "diff/resvg/structure/image/embedded-svg-without-mime.png", false), 0)} @@ -1423,23 +1525,33 @@ use crate::run_test; #[test] fn resvg_structure_image_preserveAspectRatio_xMaxYMax_meet_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMaxYMax-meet-on-svg.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_none_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=none-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=none-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=none-on-svg.png", false), 0)} #[test] fn resvg_structure_image_embedded_png() {assert_eq!(run_test("svg/resvg/structure/image/embedded-png.svg", "ref/resvg/structure/image/embedded-png.png", "diff/resvg/structure/image/embedded-png.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_recursive_2() {assert_eq!(run_test("svg/resvg/structure/image/recursive-2.svg", "ref/resvg/structure/image/recursive-2.png", "diff/resvg/structure/image/recursive-2.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_no_width() {assert_eq!(run_test("svg/resvg/structure/image/no-width.svg", "ref/resvg/structure/image/no-width.png", "diff/resvg/structure/image/no-width.png", false), 0)} #[test] fn resvg_structure_image_embedded_jpeg_as_image_jpg() {assert_eq!(run_test("svg/resvg/structure/image/embedded-jpeg-as-image-jpg.svg", "ref/resvg/structure/image/embedded-jpeg-as-image-jpg.png", "diff/resvg/structure/image/embedded-jpeg-as-image-jpg.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMidYMid_slice() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMidYMid-slice.svg", "ref/resvg/structure/image/preserveAspectRatio=xMidYMid-slice.png", "diff/resvg/structure/image/preserveAspectRatio=xMidYMid-slice.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_recursive_1() {assert_eq!(run_test("svg/resvg/structure/image/recursive-1.svg", "ref/resvg/structure/image/recursive-1.png", "diff/resvg/structure/image/recursive-1.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMinYMin_slice() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMinYMin-slice.svg", "ref/resvg/structure/image/preserveAspectRatio=xMinYMin-slice.png", "diff/resvg/structure/image/preserveAspectRatio=xMinYMin-slice.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_none() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=none.svg", "ref/resvg/structure/image/preserveAspectRatio=none.png", "diff/resvg/structure/image/preserveAspectRatio=none.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMinYMin_meet_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMinYMin-meet-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMinYMin-meet-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMinYMin-meet-on-svg.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_external_svgz() {assert_eq!(run_test("svg/resvg/structure/image/external-svgz.svg", "ref/resvg/structure/image/external-svgz.png", "diff/resvg/structure/image/external-svgz.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_structure_image_image_with_float_size_scaling() {assert_eq!(run_test("svg/resvg/structure/image/image-with-float-size-scaling.svg", "ref/resvg/structure/image/image-with-float-size-scaling.png", "diff/resvg/structure/image/image-with-float-size-scaling.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_no_height_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/no-height-on-svg.svg", "ref/resvg/structure/image/no-height-on-svg.png", "diff/resvg/structure/image/no-height-on-svg.png", false), 0)} +// no relative paths supported +#[ignore] #[test] fn resvg_structure_image_no_width_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/no-width-on-svg.svg", "ref/resvg/structure/image/no-width-on-svg.png", "diff/resvg/structure/image/no-width-on-svg.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_no_width_and_height() {assert_eq!(run_test("svg/resvg/structure/image/no-width-and-height.svg", "ref/resvg/structure/image/no-width-and-height.png", "diff/resvg/structure/image/no-width-and-height.png", false), 0)} #[test] fn resvg_structure_image_with_zero_width_and_height() {assert_eq!(run_test("svg/resvg/structure/image/with-zero-width-and-height.svg", "ref/resvg/structure/image/with-zero-width-and-height.png", "diff/resvg/structure/image/with-zero-width-and-height.png", false), 0)} #[test] fn resvg_structure_image_embedded_gif() {assert_eq!(run_test("svg/resvg/structure/image/embedded-gif.svg", "ref/resvg/structure/image/embedded-gif.png", "diff/resvg/structure/image/embedded-gif.png", false), 0)} #[test] fn resvg_structure_image_embedded_jpeg_without_mime() {assert_eq!(run_test("svg/resvg/structure/image/embedded-jpeg-without-mime.svg", "ref/resvg/structure/image/embedded-jpeg-without-mime.png", "diff/resvg/structure/image/embedded-jpeg-without-mime.png", false), 0)} #[test] fn resvg_structure_image_preserveAspectRatio_xMaxYMax_slice_on_svg() {assert_eq!(run_test("svg/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice-on-svg.svg", "ref/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice-on-svg.png", "diff/resvg/structure/image/preserveAspectRatio=xMaxYMax-slice-on-svg.png", false), 0)} #[test] fn resvg_structure_image_with_transform() {assert_eq!(run_test("svg/resvg/structure/image/with-transform.svg", "ref/resvg/structure/image/with-transform.png", "diff/resvg/structure/image/with-transform.png", false), 0)} +// no relative paths supported #[ignore] #[test] fn resvg_structure_image_external_gif() {assert_eq!(run_test("svg/resvg/structure/image/external-gif.svg", "ref/resvg/structure/image/external-gif.png", "diff/resvg/structure/image/external-gif.png", false), 0)} #[test] fn resvg_structure_use_xlink_to_an_invalid_element_1() {assert_eq!(run_test("svg/resvg/structure/use/xlink-to-an-invalid-element-1.svg", "ref/resvg/structure/use/xlink-to-an-invalid-element-1.png", "diff/resvg/structure/use/xlink-to-an-invalid-element-1.png", false), 0)} #[test] fn resvg_structure_use_xlink_to_a_child_of_a_non_SVG_element() {assert_eq!(run_test("svg/resvg/structure/use/xlink-to-a-child-of-a-non-SVG-element.svg", "ref/resvg/structure/use/xlink-to-a-child-of-a-non-SVG-element.png", "diff/resvg/structure/use/xlink-to-a-child-of-a-non-SVG-element.png", false), 0)} @@ -1549,10 +1661,10 @@ use crate::run_test; #[test] fn resvg_structure_defs_multiple_defs() {assert_eq!(run_test("svg/resvg/structure/defs/multiple-defs.svg", "ref/resvg/structure/defs/multiple-defs.png", "diff/resvg/structure/defs/multiple-defs.png", false), 0)} #[test] fn resvg_structure_defs_nested_defs() {assert_eq!(run_test("svg/resvg/structure/defs/nested-defs.svg", "ref/resvg/structure/defs/nested-defs.png", "diff/resvg/structure/defs/nested-defs.png", false), 0)} #[test] fn resvg_masking_clip_rule_clip_rule_evenodd() {assert_eq!(run_test("svg/resvg/masking/clip-rule/clip-rule=evenodd.svg", "ref/resvg/masking/clip-rule/clip-rule=evenodd.png", "diff/resvg/masking/clip-rule/clip-rule=evenodd.png", false), 0)} -#[ignore] #[test] fn resvg_masking_clip_simple_case() {assert_eq!(run_test("svg/resvg/masking/clip/simple-case.svg", "ref/resvg/masking/clip/simple-case.png", "diff/resvg/masking/clip/simple-case.png", false), 0)} +#[test] fn resvg_masking_clip_simple_case() {assert_eq!(run_test("svg/resvg/masking/clip/simple-case.svg", "ref/resvg/masking/clip/simple-case.png", "diff/resvg/masking/clip/simple-case.png", false), 0)} #[test] fn resvg_masking_clipPath_with_marker_on_clip() {assert_eq!(run_test("svg/resvg/masking/clipPath/with-marker-on-clip.svg", "ref/resvg/masking/clipPath/with-marker-on-clip.png", "diff/resvg/masking/clipPath/with-marker-on-clip.png", false), 0)} #[test] fn resvg_masking_clipPath_mixed_clip_rule() {assert_eq!(run_test("svg/resvg/masking/clipPath/mixed-clip-rule.svg", "ref/resvg/masking/clipPath/mixed-clip-rule.png", "diff/resvg/masking/clipPath/mixed-clip-rule.png", false), 0)} -#[ignore] #[test] fn resvg_masking_clipPath_circle_shorthand() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand.svg", "ref/resvg/masking/clipPath/circle-shorthand.png", "diff/resvg/masking/clipPath/circle-shorthand.png", false), 0)} +#[test] fn resvg_masking_clipPath_circle_shorthand() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand.svg", "ref/resvg/masking/clipPath/circle-shorthand.png", "diff/resvg/masking/clipPath/circle-shorthand.png", false), 0)} #[test] fn resvg_masking_clipPath_clip_rule_evenodd() {assert_eq!(run_test("svg/resvg/masking/clipPath/clip-rule=evenodd.svg", "ref/resvg/masking/clipPath/clip-rule=evenodd.png", "diff/resvg/masking/clipPath/clip-rule=evenodd.png", false), 0)} #[test] fn resvg_masking_clipPath_switch_is_not_a_valid_child() {assert_eq!(run_test("svg/resvg/masking/clipPath/switch-is-not-a-valid-child.svg", "ref/resvg/masking/clipPath/switch-is-not-a-valid-child.png", "diff/resvg/masking/clipPath/switch-is-not-a-valid-child.png", false), 0)} #[test] fn resvg_masking_clipPath_g_is_not_a_valid_child() {assert_eq!(run_test("svg/resvg/masking/clipPath/g-is-not-a-valid-child.svg", "ref/resvg/masking/clipPath/g-is-not-a-valid-child.png", "diff/resvg/masking/clipPath/g-is-not-a-valid-child.png", false), 0)} @@ -1567,13 +1679,13 @@ use crate::run_test; #[test] fn resvg_masking_clipPath_opacity_has_no_effect() {assert_eq!(run_test("svg/resvg/masking/clipPath/opacity-has-no-effect.svg", "ref/resvg/masking/clipPath/opacity-has-no-effect.png", "diff/resvg/masking/clipPath/opacity-has-no-effect.png", false), 0)} #[test] fn resvg_masking_clipPath_invisible_child_2() {assert_eq!(run_test("svg/resvg/masking/clipPath/invisible-child-2.svg", "ref/resvg/masking/clipPath/invisible-child-2.png", "diff/resvg/masking/clipPath/invisible-child-2.png", false), 0)} #[test] fn resvg_masking_clipPath_multiple_children() {assert_eq!(run_test("svg/resvg/masking/clipPath/multiple-children.svg", "ref/resvg/masking/clipPath/multiple-children.png", "diff/resvg/masking/clipPath/multiple-children.png", false), 0)} -#[ignore] #[test] fn resvg_masking_clipPath_on_the_root_svg_without_size() {assert_eq!(run_test("svg/resvg/masking/clipPath/on-the-root-svg-without-size.svg", "ref/resvg/masking/clipPath/on-the-root-svg-without-size.png", "diff/resvg/masking/clipPath/on-the-root-svg-without-size.png", false), 0)} +#[test] fn resvg_masking_clipPath_on_the_root_svg_without_size() {assert_eq!(run_test("svg/resvg/masking/clipPath/on-the-root-svg-without-size.svg", "ref/resvg/masking/clipPath/on-the-root-svg-without-size.png", "diff/resvg/masking/clipPath/on-the-root-svg-without-size.png", false), 0)} #[test] fn resvg_masking_clipPath_invisible_child_1() {assert_eq!(run_test("svg/resvg/masking/clipPath/invisible-child-1.svg", "ref/resvg/masking/clipPath/invisible-child-1.png", "diff/resvg/masking/clipPath/invisible-child-1.png", false), 0)} #[test] fn resvg_masking_clipPath_transform_on_clipPath() {assert_eq!(run_test("svg/resvg/masking/clipPath/transform-on-clipPath.svg", "ref/resvg/masking/clipPath/transform-on-clipPath.png", "diff/resvg/masking/clipPath/transform-on-clipPath.png", false), 0)} #[test] fn resvg_masking_clipPath_on_a_horizontal_line() {assert_eq!(run_test("svg/resvg/masking/clipPath/on-a-horizontal-line.svg", "ref/resvg/masking/clipPath/on-a-horizontal-line.png", "diff/resvg/masking/clipPath/on-a-horizontal-line.png", false), 0)} #[test] fn resvg_masking_clipPath_invalid_clip_path_on_self() {assert_eq!(run_test("svg/resvg/masking/clipPath/invalid-clip-path-on-self.svg", "ref/resvg/masking/clipPath/invalid-clip-path-on-self.png", "diff/resvg/masking/clipPath/invalid-clip-path-on-self.png", false), 0)} #[test] fn resvg_masking_clipPath_clip_path_on_child() {assert_eq!(run_test("svg/resvg/masking/clipPath/clip-path-on-child.svg", "ref/resvg/masking/clipPath/clip-path-on-child.png", "diff/resvg/masking/clipPath/clip-path-on-child.png", false), 0)} -#[ignore] #[test] fn resvg_masking_clipPath_circle_shorthand_with_view_box() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand-with-view-box.svg", "ref/resvg/masking/clipPath/circle-shorthand-with-view-box.png", "diff/resvg/masking/clipPath/circle-shorthand-with-view-box.png", false), 0)} +#[test] fn resvg_masking_clipPath_circle_shorthand_with_view_box() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand-with-view-box.svg", "ref/resvg/masking/clipPath/circle-shorthand-with-view-box.png", "diff/resvg/masking/clipPath/circle-shorthand-with-view-box.png", false), 0)} #[test] fn resvg_masking_clipPath_clipping_with_complex_text_and_clip_rule() {assert_eq!(run_test("svg/resvg/masking/clipPath/clipping-with-complex-text-and-clip-rule.svg", "ref/resvg/masking/clipPath/clipping-with-complex-text-and-clip-rule.png", "diff/resvg/masking/clipPath/clipping-with-complex-text-and-clip-rule.png", false), 0)} #[test] fn resvg_masking_clipPath_simple_case() {assert_eq!(run_test("svg/resvg/masking/clipPath/simple-case.svg", "ref/resvg/masking/clipPath/simple-case.png", "diff/resvg/masking/clipPath/simple-case.png", false), 0)} #[test] fn resvg_masking_clipPath_clipPathUnits_objectBoundingBox() {assert_eq!(run_test("svg/resvg/masking/clipPath/clipPathUnits=objectBoundingBox.svg", "ref/resvg/masking/clipPath/clipPathUnits=objectBoundingBox.png", "diff/resvg/masking/clipPath/clipPathUnits=objectBoundingBox.png", false), 0)} @@ -1587,7 +1699,7 @@ use crate::run_test; #[test] fn resvg_masking_clipPath_clip_path_on_self() {assert_eq!(run_test("svg/resvg/masking/clipPath/clip-path-on-self.svg", "ref/resvg/masking/clipPath/clip-path-on-self.png", "diff/resvg/masking/clipPath/clip-path-on-self.png", false), 0)} #[test] fn resvg_masking_clipPath_overlapped_shapes_with_evenodd() {assert_eq!(run_test("svg/resvg/masking/clipPath/overlapped-shapes-with-evenodd.svg", "ref/resvg/masking/clipPath/overlapped-shapes-with-evenodd.png", "diff/resvg/masking/clipPath/overlapped-shapes-with-evenodd.png", false), 0)} #[test] fn resvg_masking_clipPath_clipping_with_complex_text_2() {assert_eq!(run_test("svg/resvg/masking/clipPath/clipping-with-complex-text-2.svg", "ref/resvg/masking/clipPath/clipping-with-complex-text-2.png", "diff/resvg/masking/clipPath/clipping-with-complex-text-2.png", false), 0)} -#[ignore] #[test] fn resvg_masking_clipPath_circle_shorthand_with_stroke_box() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand-with-stroke-box.svg", "ref/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png", "diff/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png", false), 0)} +#[test] fn resvg_masking_clipPath_circle_shorthand_with_stroke_box() {assert_eq!(run_test("svg/resvg/masking/clipPath/circle-shorthand-with-stroke-box.svg", "ref/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png", "diff/resvg/masking/clipPath/circle-shorthand-with-stroke-box.png", false), 0)} #[test] fn resvg_masking_clipPath_invalid_clip_path_on_child() {assert_eq!(run_test("svg/resvg/masking/clipPath/invalid-clip-path-on-child.svg", "ref/resvg/masking/clipPath/invalid-clip-path-on-child.png", "diff/resvg/masking/clipPath/invalid-clip-path-on-child.png", false), 0)} #[test] fn resvg_masking_clipPath_symbol_via_use_is_not_a_valid_child() {assert_eq!(run_test("svg/resvg/masking/clipPath/symbol-via-use-is-not-a-valid-child.svg", "ref/resvg/masking/clipPath/symbol-via-use-is-not-a-valid-child.png", "diff/resvg/masking/clipPath/symbol-via-use-is-not-a-valid-child.png", false), 0)} #[test] fn resvg_masking_clipPath_clip_rule_from_parent_node() {assert_eq!(run_test("svg/resvg/masking/clipPath/clip-rule-from-parent-node.svg", "ref/resvg/masking/clipPath/clip-rule-from-parent-node.png", "diff/resvg/masking/clipPath/clip-rule-from-parent-node.png", false), 0)} @@ -1604,6 +1716,7 @@ use crate::run_test; #[test] fn resvg_masking_clipPath_clip_path_on_self_2() {assert_eq!(run_test("svg/resvg/masking/clipPath/clip-path-on-self-2.svg", "ref/resvg/masking/clipPath/clip-path-on-self-2.png", "diff/resvg/masking/clipPath/clip-path-on-self-2.png", false), 0)} #[test] fn resvg_masking_mask_with_image() {assert_eq!(run_test("svg/resvg/masking/mask/with-image.svg", "ref/resvg/masking/mask/with-image.png", "diff/resvg/masking/mask/with-image.png", false), 0)} #[test] fn resvg_masking_mask_maskUnits_userSpaceOnUse_without_rect() {assert_eq!(run_test("svg/resvg/masking/mask/maskUnits=userSpaceOnUse-without-rect.svg", "ref/resvg/masking/mask/maskUnits=userSpaceOnUse-without-rect.png", "diff/resvg/masking/mask/maskUnits=userSpaceOnUse-without-rect.png", false), 0)} +// need to investigate #[ignore] #[test] fn resvg_masking_mask_recursive_on_child() {assert_eq!(run_test("svg/resvg/masking/mask/recursive-on-child.svg", "ref/resvg/masking/mask/recursive-on-child.png", "diff/resvg/masking/mask/recursive-on-child.png", false), 0)} #[test] fn resvg_masking_mask_maskUnits_userSpaceOnUse_with_rect() {assert_eq!(run_test("svg/resvg/masking/mask/maskUnits=userSpaceOnUse-with-rect.svg", "ref/resvg/masking/mask/maskUnits=userSpaceOnUse-with-rect.png", "diff/resvg/masking/mask/maskUnits=userSpaceOnUse-with-rect.png", false), 0)} #[test] fn resvg_masking_mask_mask_on_child() {assert_eq!(run_test("svg/resvg/masking/mask/mask-on-child.svg", "ref/resvg/masking/mask/mask-on-child.png", "diff/resvg/masking/mask/mask-on-child.png", false), 0)} @@ -1616,7 +1729,7 @@ use crate::run_test; #[test] fn resvg_masking_mask_on_group_with_transform() {assert_eq!(run_test("svg/resvg/masking/mask/on-group-with-transform.svg", "ref/resvg/masking/mask/on-group-with-transform.png", "diff/resvg/masking/mask/on-group-with-transform.png", false), 0)} #[test] fn resvg_masking_mask_mask_type_alpha() {assert_eq!(run_test("svg/resvg/masking/mask/mask-type=alpha.svg", "ref/resvg/masking/mask/mask-type=alpha.png", "diff/resvg/masking/mask/mask-type=alpha.png", false), 0)} #[test] fn resvg_masking_mask_with_opacity_2() {assert_eq!(run_test("svg/resvg/masking/mask/with-opacity-2.svg", "ref/resvg/masking/mask/with-opacity-2.png", "diff/resvg/masking/mask/with-opacity-2.png", false), 0)} -#[ignore] #[test] fn resvg_masking_mask_color_interpolation_linearRGB() {assert_eq!(run_test("svg/resvg/masking/mask/color-interpolation=linearRGB.svg", "ref/resvg/masking/mask/color-interpolation=linearRGB.png", "diff/resvg/masking/mask/color-interpolation=linearRGB.png", false), 0)} +#[test] fn resvg_masking_mask_color_interpolation_linearRGB() {assert_eq!(run_test("svg/resvg/masking/mask/color-interpolation=linearRGB.svg", "ref/resvg/masking/mask/color-interpolation=linearRGB.png", "diff/resvg/masking/mask/color-interpolation=linearRGB.png", false), 0)} #[test] fn resvg_masking_mask_with_opacity_3() {assert_eq!(run_test("svg/resvg/masking/mask/with-opacity-3.svg", "ref/resvg/masking/mask/with-opacity-3.png", "diff/resvg/masking/mask/with-opacity-3.png", false), 0)} #[test] fn resvg_masking_mask_invisible_child_1() {assert_eq!(run_test("svg/resvg/masking/mask/invisible-child-1.svg", "ref/resvg/masking/mask/invisible-child-1.png", "diff/resvg/masking/mask/invisible-child-1.png", false), 0)} #[test] fn resvg_masking_mask_transform_on_shape() {assert_eq!(run_test("svg/resvg/masking/mask/transform-on-shape.svg", "ref/resvg/masking/mask/transform-on-shape.png", "diff/resvg/masking/mask/transform-on-shape.png", false), 0)} @@ -1633,7 +1746,7 @@ use crate::run_test; #[test] fn resvg_masking_mask_none() {assert_eq!(run_test("svg/resvg/masking/mask/none.svg", "ref/resvg/masking/mask/none.png", "diff/resvg/masking/mask/none.png", false), 0)} #[test] fn resvg_masking_mask_on_a_small_object() {assert_eq!(run_test("svg/resvg/masking/mask/on-a-small-object.svg", "ref/resvg/masking/mask/on-a-small-object.png", "diff/resvg/masking/mask/on-a-small-object.png", false), 0)} #[test] fn resvg_masking_mask_transform_has_no_effect() {assert_eq!(run_test("svg/resvg/masking/mask/transform-has-no-effect.svg", "ref/resvg/masking/mask/transform-has-no-effect.png", "diff/resvg/masking/mask/transform-has-no-effect.png", false), 0)} -#[ignore] #[test] fn resvg_masking_mask_mask_type_in_style() {assert_eq!(run_test("svg/resvg/masking/mask/mask-type-in-style.svg", "ref/resvg/masking/mask/mask-type-in-style.png", "diff/resvg/masking/mask/mask-type-in-style.png", false), 0)} +#[test] fn resvg_masking_mask_mask_type_in_style() {assert_eq!(run_test("svg/resvg/masking/mask/mask-type-in-style.svg", "ref/resvg/masking/mask/mask-type-in-style.png", "diff/resvg/masking/mask/mask-type-in-style.png", false), 0)} #[test] fn resvg_masking_mask_mask_type_luminance() {assert_eq!(run_test("svg/resvg/masking/mask/mask-type=luminance.svg", "ref/resvg/masking/mask/mask-type=luminance.png", "diff/resvg/masking/mask/mask-type=luminance.png", false), 0)} #[test] fn resvg_masking_mask_with_grayscale_image() {assert_eq!(run_test("svg/resvg/masking/mask/with-grayscale-image.svg", "ref/resvg/masking/mask/with-grayscale-image.png", "diff/resvg/masking/mask/with-grayscale-image.png", false), 0)} #[test] fn resvg_masking_mask_invalid_child() {assert_eq!(run_test("svg/resvg/masking/mask/invalid-child.svg", "ref/resvg/masking/mask/invalid-child.png", "diff/resvg/masking/mask/invalid-child.png", false), 0)} diff --git a/tests/svg/resvg/filters/feConvolveMatrix/bias=9999.svg b/tests/svg/resvg/filters/feConvolveMatrix/bias=9999.svg new file mode 100644 index 00000000..fd59520f --- /dev/null +++ b/tests/svg/resvg/filters/feConvolveMatrix/bias=9999.svg @@ -0,0 +1,19 @@ + + bias=9999 (UB) + + + + + + + + + + + + + diff --git a/tests/svg/resvg/filters/feTile/complex-transform.svg b/tests/svg/resvg/filters/feTile/complex-transform.svg new file mode 100644 index 00000000..629ee9d0 --- /dev/null +++ b/tests/svg/resvg/filters/feTile/complex-transform.svg @@ -0,0 +1,15 @@ + + Complex transform (UB) + + + + + + + + + + + + diff --git a/tests/svg/resvg/filters/filter/in=FillPaint-with-gradient.svg b/tests/svg/resvg/filters/filter/in=FillPaint-with-gradient.svg new file mode 100644 index 00000000..be90ec28 --- /dev/null +++ b/tests/svg/resvg/filters/filter/in=FillPaint-with-gradient.svg @@ -0,0 +1,15 @@ + + in=FillPaint with gradient (UB) + + + + + + + + + + + + + diff --git a/tests/svg/resvg/filters/filter/path-bbox.svg b/tests/svg/resvg/filters/filter/path-bbox.svg new file mode 100644 index 00000000..bb124786 --- /dev/null +++ b/tests/svg/resvg/filters/filter/path-bbox.svg @@ -0,0 +1,16 @@ + + Path bounding box + + Test that object bounding calculation for paths works as defined by the spec: + https://svgwg.org/svg2-draft/coords.html#BoundingBoxes + + + + + + + + + + + diff --git a/tests/svg/resvg/paint-servers/pattern/invalid-patternTransform.svg b/tests/svg/resvg/paint-servers/pattern/invalid-patternTransform.svg new file mode 100644 index 00000000..19b658ba --- /dev/null +++ b/tests/svg/resvg/paint-servers/pattern/invalid-patternTransform.svg @@ -0,0 +1,14 @@ + + Invalid `patternTransform` (UB) + + + + + + + + + + diff --git a/tests/svg/resvg/paint-servers/radialGradient/negative-r.svg b/tests/svg/resvg/paint-servers/radialGradient/negative-r.svg new file mode 100644 index 00000000..7409ab44 --- /dev/null +++ b/tests/svg/resvg/paint-servers/radialGradient/negative-r.svg @@ -0,0 +1,13 @@ + + Negative `r` (UB) + + + + + + + + + + + diff --git a/tests/svg/resvg/paint-servers/stop/hsla-color.svg b/tests/svg/resvg/paint-servers/stop/hsla-color.svg new file mode 100644 index 00000000..24843840 --- /dev/null +++ b/tests/svg/resvg/paint-servers/stop/hsla-color.svg @@ -0,0 +1,13 @@ + + `hsla` color (SVG 2) + + + + + + + + + + + diff --git a/tests/svg/resvg/painting/marker/with-viewBox-1.svg b/tests/svg/resvg/painting/marker/with-viewBox-1.svg new file mode 100644 index 00000000..e328ed5f --- /dev/null +++ b/tests/svg/resvg/painting/marker/with-viewBox-1.svg @@ -0,0 +1,13 @@ + + With `viewBox` (1) (UB) + + + + + + + + + diff --git a/tests/svg/resvg/painting/stroke-dashoffset/em-units.svg b/tests/svg/resvg/painting/stroke-dashoffset/em-units.svg new file mode 100644 index 00000000..6412bdf3 --- /dev/null +++ b/tests/svg/resvg/painting/stroke-dashoffset/em-units.svg @@ -0,0 +1,10 @@ + + `em` units + + + + + + diff --git a/tests/svg/resvg/shapes/rect/ic-values.svg b/tests/svg/resvg/shapes/rect/ic-values.svg new file mode 100644 index 00000000..b3125244 --- /dev/null +++ b/tests/svg/resvg/shapes/rect/ic-values.svg @@ -0,0 +1,9 @@ + + `ic` values (SVG 2) + + + + + + diff --git a/tests/svg/resvg/structure/image/external-svg-with-transform.svg b/tests/svg/resvg/structure/image/external-svg-with-transform.svg new file mode 100644 index 00000000..b4b8f460 --- /dev/null +++ b/tests/svg/resvg/structure/image/external-svg-with-transform.svg @@ -0,0 +1,14 @@ + + External SVG with transform + + + + + + + diff --git a/tests/svg/resvg/structure/image/no-width-on-svg.svg b/tests/svg/resvg/structure/image/no-width-on-svg.svg new file mode 100644 index 00000000..98f659f8 --- /dev/null +++ b/tests/svg/resvg/structure/image/no-width-on-svg.svg @@ -0,0 +1,8 @@ + + No `width` on SVG (UB) + + + + + diff --git a/tests/svg/resvg/structure/image/url-to-png.svg b/tests/svg/resvg/structure/image/url-to-png.svg new file mode 100644 index 00000000..c155a88b --- /dev/null +++ b/tests/svg/resvg/structure/image/url-to-png.svg @@ -0,0 +1,9 @@ + + URL to PNG + + + + + diff --git a/tests/svg/resvg/structure/image/url-to-svg.svg b/tests/svg/resvg/structure/image/url-to-svg.svg new file mode 100644 index 00000000..6d903a1b --- /dev/null +++ b/tests/svg/resvg/structure/image/url-to-svg.svg @@ -0,0 +1,9 @@ + + URL to SVG + + + + + diff --git a/tests/svg/resvg/structure/style/external-CSS.svg b/tests/svg/resvg/structure/style/external-CSS.svg new file mode 100644 index 00000000..f7e5c9a1 --- /dev/null +++ b/tests/svg/resvg/structure/style/external-CSS.svg @@ -0,0 +1,11 @@ + + External CSS + + + + + + + diff --git a/tests/svg/resvg/structure/svg/not-UTF-8-encoding.svg b/tests/svg/resvg/structure/svg/not-UTF-8-encoding.svg new file mode 100644 index 00000000..e153e80e --- /dev/null +++ b/tests/svg/resvg/structure/svg/not-UTF-8-encoding.svg @@ -0,0 +1,9 @@ + + + Not UTF-8 encoding + + Ïðèâåò ìèð + + + + diff --git a/tests/svg/resvg/text/font-stretch/extra-condensed.svg b/tests/svg/resvg/text/font-stretch/extra-condensed.svg new file mode 100644 index 00000000..4343d107 --- /dev/null +++ b/tests/svg/resvg/text/font-stretch/extra-condensed.svg @@ -0,0 +1,9 @@ + + `extra-condensed` + + Text + + + + diff --git a/tests/svg/resvg/text/text/compound-emojis-and-coordinates-list.svg b/tests/svg/resvg/text/text/compound-emojis-and-coordinates-list.svg new file mode 100644 index 00000000..7bcd1ecb --- /dev/null +++ b/tests/svg/resvg/text/text/compound-emojis-and-coordinates-list.svg @@ -0,0 +1,12 @@ + + Compound emojis and coordinates list + + + + ðŸ˜ðŸ¦€ðŸ³ï¸â€ðŸŒˆ + + + +