From d61e621388da7081aedf6e86c5e8d9a09de06bda Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Wed, 9 Jun 2021 21:17:21 +0000 Subject: [PATCH] Bug 1340422 - Part 1: Add SVG d property in CSS. r=emilio Add d property for style system. d property only supports path() for now and it has the functional notation without fill rule. https://github.com/w3c/svgwg/issues/320#issuecomment-414462645 Differential Revision: https://phabricator.services.mozilla.com/D81237 --- .../server/actors/animation-type-longhand.js | 1 + .../shared/css/generated/properties-db.js | 5 + layout/style/ServoBindings.toml | 1 + layout/style/nsStyleStruct.cpp | 10 +- layout/style/nsStyleStruct.h | 2 + layout/style/test/mochitest.ini | 1 + layout/style/test/property_database.js | 58 ++- .../test/test_transitions_per_property.html | 4 + modules/libpref/init/StaticPrefList.yaml | 6 + .../properties/counted_unknown_properties.py | 1 - .../style/properties/longhands/svg.mako.rs | 10 + servo/components/style/values/computed/mod.rs | 2 +- servo/components/style/values/computed/svg.rs | 2 +- .../components/style/values/specified/mod.rs | 2 +- .../components/style/values/specified/svg.rs | 55 +++ servo/ports/geckolib/cbindgen.toml | 1 + .../meta/svg/path/property/__dir__.ini | 1 + .../property/d-interpolation-discrete.svg.ini | 85 ---- .../d-interpolation-relative-absolute.svg.ini | 169 -------- .../property/d-interpolation-single.svg.ini | 379 ------------------ 20 files changed, 134 insertions(+), 661 deletions(-) create mode 100644 testing/web-platform/meta/svg/path/property/__dir__.ini delete mode 100644 testing/web-platform/meta/svg/path/property/d-interpolation-discrete.svg.ini delete mode 100644 testing/web-platform/meta/svg/path/property/d-interpolation-relative-absolute.svg.ini delete mode 100644 testing/web-platform/meta/svg/path/property/d-interpolation-single.svg.ini diff --git a/devtools/server/actors/animation-type-longhand.js b/devtools/server/actors/animation-type-longhand.js index ae9b02f556ce4..40806d5024e40 100644 --- a/devtools/server/actors/animation-type-longhand.js +++ b/devtools/server/actors/animation-type-longhand.js @@ -279,6 +279,7 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [ "clip-path", "column-count", "column-rule-width", + "d", "filter", "font-stretch", "font-variation-settings", diff --git a/devtools/shared/css/generated/properties-db.js b/devtools/shared/css/generated/properties-db.js index a8b8fbf5cabe2..fc59ab934cc10 100644 --- a/devtools/shared/css/generated/properties-db.js +++ b/devtools/shared/css/generated/properties-db.js @@ -3068,6 +3068,7 @@ exports.CSS_PROPERTIES = { "rx", "ry", "r", + "d", "table-layout", "text-overflow", "text-decoration-line", @@ -10995,6 +10996,10 @@ exports.PREFERENCES = [ "backdrop-filter", "layout.css.backdrop-filter.enabled" ], + [ + "d", + "layout.css.d-property.enabled" + ], [ "font-variation-settings", "layout.css.font-variations.enabled" diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml index a5fb9966e0fbc..e4f698504bbb8 100644 --- a/layout/style/ServoBindings.toml +++ b/layout/style/ServoBindings.toml @@ -583,6 +583,7 @@ cbindgen-types = [ { gecko = "StyleDefaultFontSizes", servo = "crate::gecko::wrapper::DefaultFontSizes" }, { gecko = "StyleCaptionSide", servo = "crate::values::computed::table::CaptionSide" }, { gecko = "StylePageSize", servo = "crate::values::computed::page::PageSize" }, + { gecko = "StyleDProperty", servo = "crate::values::specified::svg::DProperty" }, ] mapped-generic-types = [ diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index bf4ed243042a6..a799c9072b8e1 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -935,7 +935,8 @@ nsStyleSVGReset::nsStyleSVGReset(const Document& aDocument) mStopOpacity(1.0f), mFloodOpacity(1.0f), mVectorEffect(StyleVectorEffect::None), - mMaskType(StyleMaskType::Luminance) { + mMaskType(StyleMaskType::Luminance), + mD(StyleDProperty::None()) { MOZ_COUNT_CTOR(nsStyleSVGReset); } @@ -957,7 +958,8 @@ nsStyleSVGReset::nsStyleSVGReset(const nsStyleSVGReset& aSource) mStopOpacity(aSource.mStopOpacity), mFloodOpacity(aSource.mFloodOpacity), mVectorEffect(aSource.mVectorEffect), - mMaskType(aSource.mMaskType) { + mMaskType(aSource.mMaskType), + mD(aSource.mD) { MOZ_COUNT_CTOR(nsStyleSVGReset); } @@ -1002,7 +1004,7 @@ nsChangeHint nsStyleSVGReset::CalcDifference( if (mX != aNewData.mX || mY != aNewData.mY || mCx != aNewData.mCx || mCy != aNewData.mCy || mR != aNewData.mR || mRx != aNewData.mRx || - mRy != aNewData.mRy) { + mRy != aNewData.mRy || mD != aNewData.mD) { hint |= nsChangeHint_InvalidateRenderingObservers | nsChangeHint_NeedReflow; } @@ -1024,7 +1026,7 @@ nsChangeHint nsStyleSVGReset::CalcDifference( mLightingColor != aNewData.mLightingColor || mStopOpacity != aNewData.mStopOpacity || mFloodOpacity != aNewData.mFloodOpacity || - mMaskType != aNewData.mMaskType) { + mMaskType != aNewData.mMaskType || mD != aNewData.mD) { hint |= nsChangeHint_RepaintFrame; } diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index dfc29674fbb68..4ceb58339e1d9 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -1923,6 +1923,8 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleSVGReset { mozilla::StyleVectorEffect mVectorEffect; mozilla::StyleMaskType mMaskType; + + mozilla::StyleDProperty mD; }; struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleEffects { diff --git a/layout/style/test/mochitest.ini b/layout/style/test/mochitest.ini index 6695e36cc3ac4..bbf027f380827 100644 --- a/layout/style/test/mochitest.ini +++ b/layout/style/test/mochitest.ini @@ -18,6 +18,7 @@ prefs = layout.css.step-position-jump.enabled=true layout.css.backdrop-filter.enabled=true layout.css.fit-content-function.enabled=true + layout.css.d-property.enabled=true support-files = animation_utils.js ccd-quirks.html diff --git a/layout/style/test/property_database.js b/layout/style/test/property_database.js index 29412ac5c2f4d..b5922950b7702 100644 --- a/layout/style/test/property_database.js +++ b/layout/style/test/property_database.js @@ -13063,6 +13063,29 @@ gCSSProperties["scrollbar-width"] = { invalid_values: ["1px"], }; +const pathValues = { + other_values: [ + "path('')", + "path(' ')", + "path('M 10 10 20 20 H 90 V 90 Z')", + "path('M10 10 20,20H90V90Z')", + "path('M 10 10 C 20 20, 40 20, 50 10')", + "path('M 10 80 C 40 10, 65 10, 95 80 S 1.5e2 150, 180 80')", + "path('M 10 80 Q 95 10 180 80')", + "path('M 10 80 Q 52.5 10, 95 80 T 180 80')", + "path('M 80 80 A 45 45, 0, 0, 0, 1.25e2 1.25e2 L 125 80 Z')", + "path('M100-200h20z')", + "path('M10,10L20.6.5z')", + ], + invalid_values: [ + "path()", + "path(a)", + "path('M 10 Z')", + "path('M 10-10 20')", + "path('M 10 10 C 20 20 40 20')", + ], +}; + if (IsCSSPropertyPrefEnabled("layout.css.motion-path.enabled")) { gCSSProperties["offset"] = { domProp: "offset", @@ -13113,18 +13136,7 @@ if (IsCSSPropertyPrefEnabled("layout.css.motion-path.enabled")) { inherited: false, type: CSS_TYPE_LONGHAND, initial_values: ["none"], - other_values: [ - "path('')", - "path(' ')", - "path('M 10 10 20 20 H 90 V 90 Z')", - "path('M10 10 20,20H90V90Z')", - "path('M 10 10 C 20 20, 40 20, 50 10')", - "path('M 10 80 C 40 10, 65 10, 95 80 S 1.5e2 150, 180 80')", - "path('M 10 80 Q 95 10 180 80')", - "path('M 10 80 Q 52.5 10, 95 80 T 180 80')", - "path('M 80 80 A 45 45, 0, 0, 0, 1.25e2 1.25e2 L 125 80 Z')", - "path('M100-200h20z')", - "path('M10,10L20.6.5z')", + other_values: pathValues.other_values.concat([ "ray(45deg closest-side)", "ray(0rad farthest-side)", "ray(0.5turn closest-corner contain)", @@ -13132,18 +13144,13 @@ if (IsCSSPropertyPrefEnabled("layout.css.motion-path.enabled")) { "ray(sides 180deg)", "ray(contain farthest-side 180deg)", "ray(calc(180deg - 45deg) farthest-side)", - ], - invalid_values: [ - "path()", - "path(a)", - "path('M 10 Z')", - "path('M 10-10 20')", - "path('M 10 10 C 20 20 40 20')", + ]), + invalid_values: pathValues.invalid_values.concat([ "ray(0deg)", "ray(closest-side)", "ray(0deg, closest-side)", "ray(contain 0deg closest-side contain)", - ], + ]), }; gCSSProperties["offset-distance"] = { @@ -13196,6 +13203,17 @@ if (IsCSSPropertyPrefEnabled("layout.css.clip-path-path.enabled")) { ); } +if (IsCSSPropertyPrefEnabled("layout.css.d-property.enabled")) { + gCSSProperties["d"] = { + domProp: "d", + inherited: false, + type: CSS_TYPE_LONGHAND, + initial_values: ["none"], + other_values: pathValues.other_values, + invalid_values: pathValues.invalid_values, + }; +} + if (IsCSSPropertyPrefEnabled("layout.css.step-position-jump.enabled")) { gCSSProperties["animation-timing-function"].other_values.push( "steps(1, jump-start)", diff --git a/layout/style/test/test_transitions_per_property.html b/layout/style/test/test_transitions_per_property.html index 2e47c30ce9b48..0ee0af7d03361 100644 --- a/layout/style/test/test_transitions_per_property.html +++ b/layout/style/test/test_transitions_per_property.html @@ -421,6 +421,10 @@ supported_properties["clip-path"].push(test_path_function); } +if (IsCSSPropertyPrefEnabled("layout.css.d-property.enabled")) { + supported_properties["d"] = [ test_path_function ]; +} + if (IsCSSPropertyPrefEnabled("layout.css.font-variations.enabled")) { supported_properties["font-variation-settings"] = [ test_font_variations_transition ]; } diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 6eec324e5ae40..ce8d64daef6e8 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -6821,6 +6821,12 @@ value: true mirror: always +# Is support for d property for SVG path element? +- name: layout.css.d-property.enabled + type: bool + value: false + mirror: always + # Are we emulating -moz-{inline}-box layout using CSS flexbox? - name: layout.css.emulate-moz-box-with-flex type: bool diff --git a/servo/components/style/properties/counted_unknown_properties.py b/servo/components/style/properties/counted_unknown_properties.py index 577547d099d10..56d647cb57dfd 100644 --- a/servo/components/style/properties/counted_unknown_properties.py +++ b/servo/components/style/properties/counted_unknown_properties.py @@ -63,7 +63,6 @@ "-webkit-text-combine", "-webkit-text-emphasis-style", "-webkit-text-emphasis", - "d", "-webkit-mask-box-image-width", "-webkit-mask-box-image-source", "-webkit-mask-box-image-outset", diff --git a/servo/components/style/properties/longhands/svg.mako.rs b/servo/components/style/properties/longhands/svg.mako.rs index f6128693582ae..3d711462ff3db 100644 --- a/servo/components/style/properties/longhands/svg.mako.rs +++ b/servo/components/style/properties/longhands/svg.mako.rs @@ -246,3 +246,13 @@ ${helpers.predefined_type( animation_value_type="LengthPercentage", spec="https://svgwg.org/svg2-draft/geometry.html#R", )} + +${helpers.predefined_type( + "d", + "DProperty", + "specified::DProperty::none()", + engines="gecko", + animation_value_type="ComputedValue", + gecko_pref="layout.css.d-property.enabled", + spec="https://svgwg.org/svg2-draft/paths.html#TheDProperty", +)} diff --git a/servo/components/style/values/computed/mod.rs b/servo/components/style/values/computed/mod.rs index 51bd83469fb86..e242dda69cb6a 100644 --- a/servo/components/style/values/computed/mod.rs +++ b/servo/components/style/values/computed/mod.rs @@ -80,7 +80,7 @@ pub use self::position::{ pub use self::ratio::Ratio; pub use self::rect::NonNegativeLengthOrNumberRect; pub use self::resolution::Resolution; -pub use self::svg::MozContextProperties; +pub use self::svg::{DProperty, MozContextProperties}; pub use self::svg::{SVGLength, SVGOpacity, SVGPaint, SVGPaintKind}; pub use self::svg::{SVGPaintOrder, SVGStrokeDashArray, SVGWidth}; pub use self::text::TextUnderlinePosition; diff --git a/servo/components/style/values/computed/svg.rs b/servo/components/style/values/computed/svg.rs index a348d071ab98a..344f1d83518f7 100644 --- a/servo/components/style/values/computed/svg.rs +++ b/servo/components/style/values/computed/svg.rs @@ -11,7 +11,7 @@ use crate::values::generics::svg as generic; use crate::values::RGBA; use crate::Zero; -pub use crate::values::specified::{MozContextProperties, SVGPaintOrder}; +pub use crate::values::specified::{DProperty, MozContextProperties, SVGPaintOrder}; /// Computed SVG Paint value pub type SVGPaint = generic::GenericSVGPaint; diff --git a/servo/components/style/values/specified/mod.rs b/servo/components/style/values/specified/mod.rs index 8a9cb73f4daad..11498337a7fc3 100644 --- a/servo/components/style/values/specified/mod.rs +++ b/servo/components/style/values/specified/mod.rs @@ -80,7 +80,7 @@ pub use self::position::{PositionComponent, ZIndex}; pub use self::ratio::Ratio; pub use self::rect::NonNegativeLengthOrNumberRect; pub use self::resolution::Resolution; -pub use self::svg::MozContextProperties; +pub use self::svg::{DProperty, MozContextProperties}; pub use self::svg::{SVGLength, SVGOpacity, SVGPaint}; pub use self::svg::{SVGPaintOrder, SVGStrokeDashArray, SVGWidth}; pub use self::svg_path::SVGPathData; diff --git a/servo/components/style/values/specified/svg.rs b/servo/components/style/values/specified/svg.rs index abc6587239cea..f06fc43c46d65 100644 --- a/servo/components/style/values/specified/svg.rs +++ b/servo/components/style/values/specified/svg.rs @@ -10,6 +10,7 @@ use crate::values::specified::color::Color; use crate::values::specified::url::SpecifiedUrl; use crate::values::specified::AllowQuirks; use crate::values::specified::LengthPercentage; +use crate::values::specified::SVGPathData; use crate::values::specified::{NonNegativeLengthPercentage, Opacity}; use crate::values::CustomIdent; use cssparser::{Parser, Token}; @@ -334,3 +335,57 @@ impl Parse for MozContextProperties { }) } } + +/// The svg d property type. +/// +/// https://svgwg.org/svg2-draft/paths.html#TheDProperty +#[derive( + Animate, + Clone, + ComputeSquaredDistance, + Debug, + Deserialize, + MallocSizeOf, + PartialEq, + Serialize, + SpecifiedValueInfo, + ToAnimatedZero, + ToComputedValue, + ToCss, + ToResolvedValue, + ToShmem, +)] +#[repr(C, u8)] +pub enum DProperty { + /// Path value for path() or just a . + #[css(function)] + Path(SVGPathData), + /// None value. + #[animation(error)] + None, +} + +impl DProperty { + /// return none. + #[inline] + pub fn none() -> Self { + DProperty::None + } +} + +impl Parse for DProperty { + fn parse<'i, 't>( + context: &ParserContext, + input: &mut Parser<'i, 't>, + ) -> Result> { + // Parse none. + if input.try_parse(|i| i.expect_ident_matching("none")).is_ok() { + return Ok(DProperty::none()); + } + + // Parse possible functions. + input.expect_function_matching("path")?; + let path_data = input.parse_nested_block(|i| SVGPathData::parse(context, i))?; + Ok(DProperty::Path(path_data)) + } +} diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml index d4cb4578f7e4c..b3a3c7b4f2a6c 100644 --- a/servo/ports/geckolib/cbindgen.toml +++ b/servo/ports/geckolib/cbindgen.toml @@ -227,6 +227,7 @@ include = [ "DefaultFontSizes", "RuleChangeKind", "PageSize", + "DProperty", ] item_types = ["enums", "structs", "unions", "typedefs", "functions", "constants"] renaming_overrides_prefixing = true diff --git a/testing/web-platform/meta/svg/path/property/__dir__.ini b/testing/web-platform/meta/svg/path/property/__dir__.ini new file mode 100644 index 0000000000000..00fff73fb2c02 --- /dev/null +++ b/testing/web-platform/meta/svg/path/property/__dir__.ini @@ -0,0 +1 @@ +prefs: [layout.css.d-property.enabled:true] diff --git a/testing/web-platform/meta/svg/path/property/d-interpolation-discrete.svg.ini b/testing/web-platform/meta/svg/path/property/d-interpolation-discrete.svg.ini deleted file mode 100644 index 3ab27535e61d4..0000000000000 --- a/testing/web-platform/meta/svg/path/property/d-interpolation-discrete.svg.ini +++ /dev/null @@ -1,85 +0,0 @@ -[d-interpolation-discrete.svg] - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress 0.125] - expected: FAIL - - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress 0.875] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress -1] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress 0.125] - expected: FAIL - - ["path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" are valid d values] - expected: FAIL - - ["path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" are valid d values] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress 2] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress 1] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress 2] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress 0] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress 1] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 0 0 H 1 H 2")" and "path("M 0 0 H 3")" at progress 0.875] - expected: FAIL - - ["path("M 10 0 H 11")" and "path("M 20 0 V 2")" are valid d values] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress 2] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress 0] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress 1] - expected: FAIL - - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress -1] - expected: FAIL - - ["path("M 1 2 L 3 4 Z")" and "none" are valid d values] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress -1] - expected: FAIL - - [Animation between "path("M 10 0 H 11")" and "path("M 20 0 V 2")" at progress 0] - expected: FAIL - - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress 2] - expected: FAIL - - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress 0] - expected: FAIL - - [Animation between "path("M 1 2 L 3 4 Z")" and "none" at progress 1] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress -1] - expected: FAIL - - [Animation between "path("M 1 2 L 4 6 Z")" and "path("M 1 2 H 4 V 6")" at progress 0.125] - expected: FAIL - diff --git a/testing/web-platform/meta/svg/path/property/d-interpolation-relative-absolute.svg.ini b/testing/web-platform/meta/svg/path/property/d-interpolation-relative-absolute.svg.ini deleted file mode 100644 index a060073e3ede0..0000000000000 --- a/testing/web-platform/meta/svg/path/property/d-interpolation-relative-absolute.svg.ini +++ /dev/null @@ -1,169 +0,0 @@ -[d-interpolation-relative-absolute.svg] - ["path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" are valid d values] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress 0] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress 0] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress 0] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress -1] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress 0] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress 1] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress 0] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress 0] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress 0.875] - expected: FAIL - - ["path("m 10 20 h 30 v 60 h 10 v -10 l 110 60 Z")" and "path("M 130 140 H 120 V 160 H 130 V 150 L 200 170 Z")" are valid d values] - expected: FAIL - - [Animation between "path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" at progress 0] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" at progress -1] - expected: FAIL - - [Animation between "path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 300 100 z")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" at progress -1] - expected: FAIL - - ["path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" are valid d values] - expected: FAIL - - ["path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z")" and "path("M 0 0 L 100 100 m 0 100 l 100 0 z l 100 -100 z")" are valid d values] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress 2] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress 1] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress 0] - expected: FAIL - - ["path("m 10 20 q 30 60 40 50 q 110 80 90 80")" and "path("M 130 100 Q 120 160 130 150 Q 200 150 180 190")" are valid d values] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 10 20 l 40 50 z l 40 60 z m 60 70 l 90 60 z t 70 130")" and "path("M 210 220 L 170 190 Z L 90 120 Z M 110 130 L 200 230 Z T 220 220")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" at progress 2] - expected: FAIL - - ["path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")" and "path("M 18 12 A 50 100 70 0 1 90 110 A 150 160 70 0 1 70 80")" are valid d values] - expected: FAIL - - ["path("m 10 20 c 40 50 30 60 80 70 c 120 130 170 140 110 160")" and "path("M 130 100 C 130 150 120 160 210 170 C 290 300 340 310 320 330")" are valid d values] - expected: FAIL - - ["path("m 10 20 s 30 60 40 50 s 110 60 90 70")" and "path("M 130 140 S 120 160 130 150 S 200 170 140 180")" are valid d values] - expected: FAIL - diff --git a/testing/web-platform/meta/svg/path/property/d-interpolation-single.svg.ini b/testing/web-platform/meta/svg/path/property/d-interpolation-single.svg.ini deleted file mode 100644 index 81fc1bd742fc0..0000000000000 --- a/testing/web-platform/meta/svg/path/property/d-interpolation-single.svg.ini +++ /dev/null @@ -1,379 +0,0 @@ -[d-interpolation-single.svg] - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress 0.125] - expected: FAIL - - ["path("m 50 60 h 20")" and "path("m 10 140 h 260")" are valid d values] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress 0] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress 1] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress 2] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress 0.875] - expected: FAIL - - ["path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" are valid d values] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress 1] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress 0] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress 2] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress -1] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress 1] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress 0] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress 2] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress -1] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress -1] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress 1] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress 2] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress 0.125] - expected: FAIL - - ["path("m 50 60 v 10")" and "path("m 10 140 v 130")" are valid d values] - expected: FAIL - - ["path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" are valid d values] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress -1] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress 2] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress 0] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress 1] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress -1] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress 0] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress -1] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress 0.875] - expected: FAIL - - ["path("M 20 70")" and "path("M 100 30")" are valid d values] - expected: FAIL - - ["path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" are valid d values] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress -1] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress -1] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress 0.875] - expected: FAIL - - ["path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" are valid d values] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress 2] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress 1] - expected: FAIL - - [Animation between "path("m 50 60 h 20")" and "path("m 10 140 h 260")" at progress 0] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress -1] - expected: FAIL - - ["path("m 20 70")" and "path("m 100 30")" are valid d values] - expected: FAIL - - ["path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" are valid d values] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress 1] - expected: FAIL - - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress 0] - expected: FAIL - - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress 2] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress 0.125] - expected: FAIL - - ["path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" are valid d values] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress 0] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress 1] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress 2] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress 0] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress 1] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress 2] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress -1] - expected: FAIL - - [Animation between "path("m 20 10 q 12 32 100 2190")" and "path("m 20 10 q 20 40 180 2990")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress -1] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress 2] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress 2] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress 1] - expected: FAIL - - ["path("M 50 60 H 70")" and "path("M 10 140 H 270")" are valid d values] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress 0] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress 1] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress 2] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress -1] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress -1] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress 2] - expected: FAIL - - [Animation between "path("m 20 70")" and "path("m 100 30")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress 0.875] - expected: FAIL - - ["path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" are valid d values] - expected: FAIL - - ["path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" are valid d values] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress 2] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress 0] - expected: FAIL - - [Animation between "path("M 20 10 Q 32 42 120 2200")" and "path("M 20 10 Q 40 50 200 3000")" at progress 1] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress 1] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress 0] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress 2] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress 2] - expected: FAIL - - ["path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" are valid d values] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress 2] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress 0] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress 1] - expected: FAIL - - [Animation between "path("m 20 10 c 12 32 32 52 100 2190")" and "path("m 20 10 c 20 40 40 60 180 2990")" at progress 0.875] - expected: FAIL - - ["path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" are valid d values] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress -1] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress 0.125] - expected: FAIL - - ["path("M 50 60 V 70")" and "path("M 10 140 V 270")" are valid d values] - expected: FAIL - - [Animation between "path("m 50 60 v 10")" and "path("m 10 140 v 130")" at progress -1] - expected: FAIL - - [Animation between "path("M 20 10 C 32 42 52 62 120 2200")" and "path("M 20 10 C 40 50 60 70 200 3000")" at progress 0.875] - expected: FAIL - - ["path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" are valid d values] - expected: FAIL - - [Animation between "path("M 50 60 V 70")" and "path("M 10 140 V 270")" at progress -1] - expected: FAIL - - [Animation between "path("M 12 34 S 45 67 89 123")" and "path("M 20 26 S 61 51 113 99")" at progress 0.875] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress 0] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress 0] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress 1] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress 2] - expected: FAIL - - [Animation between "path("M 50 60 H 70")" and "path("M 10 140 H 270")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress 1] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress 0] - expected: FAIL - - ["path("m 100 400 a 10 20 30 1 0 40 50")" and "path("m 300 200 a 50 60 70 0 1 80 90")" are valid d values] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress 1] - expected: FAIL - - [Animation between "path("M 12 34 T 45 67")" and "path("M 20 26 T 61 51")" at progress 0] - expected: FAIL - - [Animation between "path("M 20 70")" and "path("M 100 30")" at progress -1] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress -1] - expected: FAIL - - [Animation between "path("m 12 34 s 33 33 77 89")" and "path("m 20 26 s 41 25 93 73")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 200 l 20 70")" and "path("m 100 200 l 100 30")" at progress 0.125] - expected: FAIL - - [Animation between "path("m 100 200 L 120 270")" and "path("m 100 200 L 200 230")" at progress 0.125] - expected: FAIL - - [Animation between "path("M 100 400 A 10 20 30 1 0 140 450")" and "path("M 300 200 A 50 60 70 0 1 380 290")" at progress 0.875] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress 0] - expected: FAIL - - [Animation between "path("m 12 34 t 33 33")" and "path("m 20 26 t 41 25")" at progress 1] - expected: FAIL -