LibWeb/Animation: Fall back to discrete animation in more cases

Use discrete animation when the number of components or the types
of corresponding components do not match. This commit does not cover
all cases, but adds FIXME comments in the appropriate places.
This commit is contained in:
Glenn Skrzypczak 2024-11-25 13:51:19 +01:00 committed by Andreas Kling
parent 4bec023b7b
commit 0d15cc4672
Notes: github-actions[bot] 2024-11-25 17:11:25 +00:00
3 changed files with 470 additions and 8 deletions

View file

@ -572,8 +572,9 @@ NonnullRefPtr<CSSStyleValue const> interpolate_value(DOM::Element& element, CSSS
case CSSStyleValue::Type::Integer:
return IntegerStyleValue::create(interpolate_raw(from.as_integer().integer(), to.as_integer().integer(), delta));
case CSSStyleValue::Type::Length: {
auto& from_length = from.as_length().length();
auto& to_length = to.as_length().length();
// FIXME: Absolutize values
auto const& from_length = from.as_length().length();
auto const& to_length = to.as_length().length();
return LengthStyleValue::create(Length(interpolate_raw(from_length.raw_value(), to_length.raw_value(), delta), from_length.type()));
}
case CSSStyleValue::Type::Number:
@ -583,8 +584,8 @@ NonnullRefPtr<CSSStyleValue const> interpolate_value(DOM::Element& element, CSSS
case CSSStyleValue::Type::Position: {
// https://www.w3.org/TR/css-values-4/#combine-positions
// FIXME: Interpolation of <position> is defined as the independent interpolation of each component (x, y) normalized as an offset from the top left corner as a <length-percentage>.
auto& from_position = from.as_position();
auto& to_position = to.as_position();
auto const& from_position = from.as_position();
auto const& to_position = to.as_position();
return PositionStyleValue::create(
interpolate_value(element, from_position.edge_x(), to_position.edge_x(), delta)->as_edge(),
interpolate_value(element, from_position.edge_y(), to_position.edge_y(), delta)->as_edge());
@ -606,6 +607,12 @@ NonnullRefPtr<CSSStyleValue const> interpolate_value(DOM::Element& element, CSSS
case CSSStyleValue::Type::Rect: {
auto from_rect = from.as_rect().rect();
auto to_rect = to.as_rect().rect();
if (from_rect.top_edge.is_auto() != to_rect.top_edge.is_auto() || from_rect.right_edge.is_auto() != to_rect.right_edge.is_auto() || from_rect.bottom_edge.is_auto() != to_rect.bottom_edge.is_auto() || from_rect.left_edge.is_auto() != to_rect.left_edge.is_auto()) {
return delta >= 0.5f ? to : from;
}
// FIXME: Absolutize values
return RectStyleValue::create({
Length(interpolate_raw(from_rect.top_edge.raw_value(), to_rect.top_edge.raw_value(), delta), from_rect.top_edge.type()),
Length(interpolate_raw(from_rect.right_edge.raw_value(), to_rect.right_edge.raw_value(), delta), from_rect.right_edge.type()),
@ -616,11 +623,14 @@ NonnullRefPtr<CSSStyleValue const> interpolate_value(DOM::Element& element, CSSS
case CSSStyleValue::Type::Transformation:
VERIFY_NOT_REACHED();
case CSSStyleValue::Type::ValueList: {
auto& from_list = from.as_value_list();
auto& to_list = to.as_value_list();
auto const& from_list = from.as_value_list();
auto const& to_list = to.as_value_list();
if (from_list.size() != to_list.size())
return from;
return delta >= 0.5f ? to : from;
// FIXME: If the number of components or the types of corresponding components do not match,
// or if any component value uses discrete animation and the two corresponding values do not match,
// then the property values combine as discrete.
StyleValueVector interpolated_values;
interpolated_values.ensure_capacity(from_list.size());
for (size_t i = 0; i < from_list.size(); ++i)
@ -629,7 +639,7 @@ NonnullRefPtr<CSSStyleValue const> interpolate_value(DOM::Element& element, CSSS
return StyleValueList::create(move(interpolated_values), from_list.separator());
}
default:
return from;
return delta >= 0.5f ? to : from;
}
}

View file

@ -0,0 +1,335 @@
Summary
Harness status: OK
Rerun
Found 324 tests
248 Pass
76 Fail
Details
Result Test Name MessageFail CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(-20px 180px -20px 180px)]
Fail CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(0px 100px 0px 100px)]
Fail CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(5px 80px 5px 80px)]
Fail CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(15px 40px 15px 40px)]
Pass CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail CSS Transitions: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(40px -60px 40px -60px)]
Fail CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(-20px 180px -20px 180px)]
Fail CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(0px 100px 0px 100px)]
Fail CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(5px 80px 5px 80px)]
Fail CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(15px 40px 15px 40px)]
Pass CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail CSS Transitions with transition: all: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(40px -60px 40px -60px)]
Fail CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(-20px 180px -20px 180px)]
Fail CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(0px 100px 0px 100px)]
Fail CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(5px 80px 5px 80px)]
Fail CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(15px 40px 15px 40px)]
Pass CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail CSS Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(40px -60px 40px -60px)]
Fail Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(-20px 180px -20px 180px)]
Fail Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(0px 100px 0px 100px)]
Fail Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(5px 80px 5px 80px)]
Fail Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(15px 40px 15px 40px)]
Pass Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail Web Animations: property <clip> from neutral to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(40px -60px 40px -60px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [initial]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [initial]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [initial]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [initial]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [initial]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [initial]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [initial]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [initial]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [initial]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [initial]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0) should be [initial]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [initial]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [initial] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Fail CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(180px -20px 180px -20px)]
Fail CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(100px 0px 100px 0px)]
Fail CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(80px 5px 80px 5px)]
Fail CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(40px 15px 40px 15px)]
Pass CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail CSS Transitions: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(-60px 40px -60px 40px)]
Fail CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(180px -20px 180px -20px)]
Fail CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(100px 0px 100px 0px)]
Fail CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(80px 5px 80px 5px)]
Fail CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(40px 15px 40px 15px)]
Pass CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Fail CSS Transitions with transition: all: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(-60px 40px -60px 40px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(180px -20px 180px -20px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(100px 0px 100px 0px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(80px 5px 80px 5px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(40px 15px 40px 15px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Pass CSS Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(-60px 40px -60px 40px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (-1) should be [rect(180px -20px 180px -20px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(100px 0px 100px 0px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.25) should be [rect(80px 5px 80px 5px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (0.75) should be [rect(40px 15px 40px 15px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px 20px 20px 20px)]
Pass Web Animations: property <clip> from [inherit] to [rect(20px, 20px, 20px, 20px)] at (2) should be [rect(-60px 40px -60px 40px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [unset]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [unset]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [unset]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [unset]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [unset]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [unset]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Transitions with transition: all: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [unset]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [unset]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [unset]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass CSS Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (-0.3) should be [unset]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0) should be [unset]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.3) should be [unset]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.5) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (0.6) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1) should be [rect(20px, 20px, 20px, 20px)]
Pass Web Animations: property <clip> from [unset] to [rect(20px, 20px, 20px, 20px)] at (1.5) should be [rect(20px, 20px, 20px, 20px)]
Fail CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (-1) should be [rect(0px, 50px, 70px, 15px)]
Fail CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0) should be [rect(0px, 75px, 80px, 10px)]
Fail CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.25) should be [rect(0px, 81.25px, 82.5px, 8.75px)]
Fail CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.75) should be [rect(0px, 93.75px, 87.5px, 6.25px)]
Pass CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (1) should be [rect(0px, 100px, 90px, 5px)]
Fail CSS Transitions: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (2) should be [rect(0px, 125px, 100px, 0px)]
Fail CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (-1) should be [rect(0px, 50px, 70px, 15px)]
Fail CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0) should be [rect(0px, 75px, 80px, 10px)]
Fail CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.25) should be [rect(0px, 81.25px, 82.5px, 8.75px)]
Fail CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.75) should be [rect(0px, 93.75px, 87.5px, 6.25px)]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (1) should be [rect(0px, 100px, 90px, 5px)]
Fail CSS Transitions with transition: all: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (2) should be [rect(0px, 125px, 100px, 0px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (-1) should be [rect(0px, 50px, 70px, 15px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0) should be [rect(0px, 75px, 80px, 10px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.25) should be [rect(0px, 81.25px, 82.5px, 8.75px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.75) should be [rect(0px, 93.75px, 87.5px, 6.25px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (1) should be [rect(0px, 100px, 90px, 5px)]
Pass CSS Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (2) should be [rect(0px, 125px, 100px, 0px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (-1) should be [rect(0px, 50px, 70px, 15px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0) should be [rect(0px, 75px, 80px, 10px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.25) should be [rect(0px, 81.25px, 82.5px, 8.75px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (0.75) should be [rect(0px, 93.75px, 87.5px, 6.25px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (1) should be [rect(0px, 100px, 90px, 5px)]
Pass Web Animations: property <clip> from [rect(0px, 75px, 80px, 10px)] to [rect(0px, 100px, 90px, 5px)] at (2) should be [rect(0px, 125px, 100px, 0px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(auto, auto, auto, 10px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(auto, auto, auto, 10px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(auto, auto, auto, 10px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(auto, auto, auto, 10px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(auto, auto, auto, 10px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(auto, auto, auto, 10px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(auto, auto, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(auto, auto, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(auto, auto, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (-0.3) should be [rect(auto, auto, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0) should be [rect(auto, auto, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.3) should be [rect(auto, auto, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.5) should be [rect(20px, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (0.6) should be [rect(20px, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1) should be [rect(20px, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, auto, auto, 10px)] to [rect(20px, 50px, 50px, auto)] at (1.5) should be [rect(20px, 50px, 50px, auto)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 0px, auto, 10px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 0px, auto, 10px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 0px, auto, 10px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 0px, auto, 10px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 0px, auto, 10px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 0px, auto, 10px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Transitions with transition: all: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 0px, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 0px, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 0px, auto, 10px)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass CSS Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (-0.3) should be [rect(auto, 0px, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0) should be [rect(auto, 0px, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.3) should be [rect(auto, 0px, auto, 10px)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.5) should be [rect(auto, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (0.6) should be [rect(auto, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1) should be [rect(auto, 50px, 50px, auto)]
Pass Web Animations: property <clip> from [rect(auto, 0px, auto, 10px)] to [rect(auto, 50px, 50px, auto)] at (1.5) should be [rect(auto, 50px, 50px, auto)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [auto]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [auto]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [auto]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [auto]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [auto]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [auto]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition: all: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [auto]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [auto]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [auto]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (-0.3) should be [auto]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0) should be [auto]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.3) should be [auto]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.5) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (0.6) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [auto] to [rect(0px, 50px, 50px, 0px)] at (1.5) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass CSS Transitions with transition-behavior:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [rect(0px, 50px, 50px, 0px)]
Fail CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass CSS Transitions: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass CSS Transitions with transition: all: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass CSS Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (-0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.3) should be [rect(0px, 50px, 50px, 0px)]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.5) should be [auto]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (0.6) should be [auto]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1) should be [auto]
Pass Web Animations: property <clip> from [rect(0px, 50px, 50px, 0px)] to [auto] at (1.5) should be [auto]

View file

@ -0,0 +1,117 @@
<!DOCTYPE html>
<meta charset="UTF-8">
<title>clip interpolation</title>
<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#clip-property">
<meta name="assert" content="clip supports animation">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../css/support/interpolation-testcommon.js"></script>
<style>
.container {
width: 80px;
height: 80px;
background: black;
display: inline-block;
padding: 5px;
}
.container:nth-child(2n) {
background: green;
}
.parent {
clip: rect(100px, 0px, 100px, 0px);
}
.target {
width: 80px;
height: 80px;
display: inline-block;
position: absolute;
background: white;
clip: rect(0px, 100px, 0px, 100px);
}
</style>
<body>
<template id="target-template">
<div class="container"><div class="target"></div></div>
</template>
<script>
test_interpolation({
property: 'clip',
from: neutralKeyframe,
to: 'rect(20px, 20px, 20px, 20px)',
}, [
{at: -1, expect: 'rect(-20px 180px -20px 180px)'},
{at: 0, expect: 'rect(0px 100px 0px 100px)'},
{at: 0.25, expect: 'rect(5px 80px 5px 80px)'},
{at: 0.75, expect: 'rect(15px 40px 15px 40px)'},
{at: 1, expect: 'rect(20px 20px 20px 20px)'},
{at: 2, expect: 'rect(40px -60px 40px -60px)'},
]);
test_no_interpolation({
property: 'clip',
from: 'initial',
to: 'rect(20px, 20px, 20px, 20px)',
});
test_interpolation({
property: 'clip',
from: 'inherit',
to: 'rect(20px, 20px, 20px, 20px)',
}, [
{at: -1, expect: 'rect(180px -20px 180px -20px)'},
{at: 0, expect: 'rect(100px 0px 100px 0px)'},
{at: 0.25, expect: 'rect(80px 5px 80px 5px)'},
{at: 0.75, expect: 'rect(40px 15px 40px 15px)'},
{at: 1, expect: 'rect(20px 20px 20px 20px)'},
{at: 2, expect: 'rect(-60px 40px -60px 40px)'},
]);
test_no_interpolation({
property: 'clip',
from: 'unset',
to: 'rect(20px, 20px, 20px, 20px)',
});
test_interpolation({
property: 'clip',
from: 'rect(0px, 75px, 80px, 10px)',
to: 'rect(0px, 100px, 90px, 5px)'
}, [
{at: -1, expect: 'rect(0px, 50px, 70px, 15px)'},
{at: 0, expect: 'rect(0px, 75px, 80px, 10px)'},
{at: 0.25, expect: 'rect(0px, 81.25px, 82.5px, 8.75px)'},
{at: 0.75, expect: 'rect(0px, 93.75px, 87.5px, 6.25px)'},
{at: 1, expect: 'rect(0px, 100px, 90px, 5px)'},
{at: 2, expect: 'rect(0px, 125px, 100px, 0px)'},
]);
test_no_interpolation({
property: 'clip',
from: 'rect(auto, auto, auto, 10px)',
to: 'rect(20px, 50px, 50px, auto)'
});
test_no_interpolation({
property: 'clip',
from: 'rect(auto, 0px, auto, 10px)',
to: 'rect(auto, 50px, 50px, auto)'
});
test_no_interpolation({
property: 'clip',
from: 'auto',
to: 'rect(0px, 50px, 50px, 0px)'
});
test_no_interpolation({
property: 'clip',
from: 'rect(0px, 50px, 50px, 0px)',
to: 'auto'
});
</script>