From 4a0fe6592357f26e3f0a73e080d872be7311e7d2 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Sat, 13 Sep 2025 14:14:49 +0100 Subject: [PATCH] LibWeb: Interpolate `polygon()` function by computed value --- Libraries/LibWeb/CSS/Interpolation.cpp | 22 ++++++ .../clip-path-interpolation-001.txt | 40 +++++----- .../clip-path-interpolation-002.txt | 76 +++++++++---------- 3 files changed, 80 insertions(+), 58 deletions(-) diff --git a/Libraries/LibWeb/CSS/Interpolation.cpp b/Libraries/LibWeb/CSS/Interpolation.cpp index f232257df53..98ae1e7b1eb 100644 --- a/Libraries/LibWeb/CSS/Interpolation.cpp +++ b/Libraries/LibWeb/CSS/Interpolation.cpp @@ -1239,6 +1239,28 @@ static RefPtr interpolate_value_impl(DOM::Element& element, Ca return {}; return Rect { *interpolated_rect_box }; }, + [&](Polygon const& from_polygon) -> Optional { + // If both shapes are of type polygon(), both polygons have the same number of vertices, and use the + // same <'fill-rule'>, interpolate between each value in the shape functions. + auto const& to_polygon = to_shape.get(); + if (from_polygon.fill_rule != to_polygon.fill_rule) + return {}; + if (from_polygon.points.size() != to_polygon.points.size()) + return {}; + Vector interpolated_points; + interpolated_points.ensure_capacity(from_polygon.points.size()); + for (size_t i = 0; i < from_polygon.points.size(); i++) { + auto const& from_point = from_polygon.points[i]; + auto const& to_point = to_polygon.points[i]; + auto interpolated_point_x = interpolate_length_percentage(calculation_context, from_point.x, to_point.x, delta); + auto interpolated_point_y = interpolate_length_percentage(calculation_context, from_point.y, to_point.y, delta); + if (!interpolated_point_x.has_value() || !interpolated_point_y.has_value()) + return {}; + interpolated_points.unchecked_append(Polygon::Point { *interpolated_point_x, *interpolated_point_y }); + } + + return Polygon { from_polygon.fill_rule, move(interpolated_points) }; + }, [](auto&) -> Optional { return {}; }); diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-001.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-001.txt index 7e1a8ab42ad..67f49323ce2 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-001.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-001.txt @@ -2,8 +2,8 @@ Harness status: OK Found 366 tests -264 Pass -102 Fail +282 Pass +84 Fail Fail CSS Transitions: property from neutral to [circle(40% at 20% 20%)] at (-0.3) should be [circle(66% at 7% 33%)] Fail CSS Transitions: property from neutral to [circle(40% at 20% 20%)] at (0) should be [circle(60% at 10% 30%)] Fail CSS Transitions: property from neutral to [circle(40% at 20% 20%)] at (0.3) should be [circle(54% at 13% 27%)] @@ -184,30 +184,30 @@ Fail Web Animations: property from [ellipse(100% 100% at 0% 0%)] to Fail Web Animations: property from [ellipse(100% 100% at 0% 0%)] to [ellipse(50% 50% at 25% 25%)] at (0.6) should be [ellipse(70% 70% at 15% 15%)] Pass Web Animations: property from [ellipse(100% 100% at 0% 0%)] to [ellipse(50% 50% at 25% 25%)] at (1) should be [ellipse(50% 50% at 25% 25%)] Fail Web Animations: property from [ellipse(100% 100% at 0% 0%)] to [ellipse(50% 50% at 25% 25%)] at (1.5) should be [ellipse(25% 25% at 37.5% 37.5%)] -Fail CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] -Fail CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] -Fail CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] -Fail CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] +Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] +Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] +Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] +Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1) should be [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] -Fail CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] -Fail CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] -Fail CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] -Fail CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] -Fail CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] +Pass CSS Transitions: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] +Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] +Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] +Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] +Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1) should be [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] -Fail CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] -Fail CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] +Pass CSS Transitions with transition: all: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] +Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] -Fail CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] -Fail CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] +Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] +Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1) should be [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] -Fail CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] -Fail Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] +Pass CSS Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] +Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)] Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] -Fail Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] -Fail Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] +Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)] +Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.6) should be [polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)] Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1) should be [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] -Fail Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] +Pass Web Animations: property from [polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (1.5) should be [polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (-0.3) should be [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0) should be [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] to [polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)] at (0.3) should be [polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-002.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-002.txt index 0f02975fb29..4adf74fa82e 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-002.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-masking/animations/clip-path-interpolation-002.txt @@ -2,8 +2,8 @@ Harness status: OK Found 720 tests -580 Pass -140 Fail +616 Pass +104 Fail Pass CSS Transitions: property from neutral to [inset(20px)] at (-0.3) should be [inset(7px)] Pass CSS Transitions: property from neutral to [inset(20px)] at (0) should be [inset(10px)] Pass CSS Transitions: property from neutral to [inset(20px)] at (0.3) should be [inset(13px)] @@ -550,54 +550,54 @@ Fail Web Animations: property from [inset(1px 2px round 100px 200px) Fail Web Animations: property from [inset(1px 2px round 100px 200px)] to [inset(101px 102px 101px 102px)] at (0.6) should be [inset(61px 62px round 40px 80px)] Fail Web Animations: property from [inset(1px 2px round 100px 200px)] to [inset(101px 102px 101px 102px)] at (1) should be [inset(101px 102px)] Fail Web Animations: property from [inset(1px 2px round 100px 200px)] to [inset(101px 102px 101px 102px)] at (1.5) should be [inset(151px 152px)] -Fail CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] -Fail CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] -Fail CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] -Fail CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] +Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] +Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] +Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] +Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1) should be [polygon(110px 120%, 130px 140%)] -Fail CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] -Fail CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] -Fail CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] -Fail CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] -Fail CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] +Pass CSS Transitions: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] +Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] +Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] +Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] +Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1) should be [polygon(110px 120%, 130px 140%)] -Fail CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] -Fail CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] +Pass CSS Transitions with transition: all: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] +Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] -Fail CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] -Fail CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] +Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] +Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1) should be [polygon(110px 120%, 130px 140%)] -Fail CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] -Fail Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] +Pass CSS Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] +Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (-0.3) should be [polygon(-20px -10%, 0px 10%)] Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0) should be [polygon(10px 20%, 30px 40%)] -Fail Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] -Fail Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] +Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.3) should be [polygon(40px 50%, 60px 70%)] +Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (0.6) should be [polygon(70px 80%, 90px 100%)] Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1) should be [polygon(110px 120%, 130px 140%)] -Fail Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] -Fail CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] -Fail CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] -Fail CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] -Fail CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] +Pass Web Animations: property from [polygon(10px 20%, 30px 40%)] to [polygon(110px 120%, 130px 140%)] at (1.5) should be [polygon(160px 170%, 180px 190%)] +Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] +Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] +Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] +Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1) should be [polygon(evenodd, 110px 120px)] -Fail CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] -Fail CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] -Fail CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] -Fail CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] -Fail CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] +Pass CSS Transitions: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] +Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] +Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] +Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] +Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1) should be [polygon(evenodd, 110px 120px)] -Fail CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] -Fail CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] +Pass CSS Transitions with transition: all: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] +Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] -Fail CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] -Fail CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] +Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] +Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1) should be [polygon(evenodd, 110px 120px)] -Fail CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] -Fail Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] +Pass CSS Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] +Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (-0.3) should be [polygon(evenodd, -20px -10px)] Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] -Fail Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] -Fail Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] +Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.3) should be [polygon(evenodd, 40px 50px)] +Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (0.6) should be [polygon(evenodd, 70px 80px)] Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1) should be [polygon(evenodd, 110px 120px)] -Fail Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] +Pass Web Animations: property from [polygon(evenodd, 10px 20px)] to [polygon(evenodd, 110px 120px)] at (1.5) should be [polygon(evenodd, 160px 170px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 10px 20px)] to [polygon(nonzero, 110px 120px)] at (-0.3) should be [polygon(evenodd, 10px 20px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 10px 20px)] to [polygon(nonzero, 110px 120px)] at (0) should be [polygon(evenodd, 10px 20px)] Pass CSS Transitions with transition-behavior:allow-discrete: property from [polygon(evenodd, 10px 20px)] to [polygon(nonzero, 110px 120px)] at (0.3) should be [polygon(evenodd, 10px 20px)]