diff --git a/Libraries/LibWeb/CSS/Interpolation.cpp b/Libraries/LibWeb/CSS/Interpolation.cpp index b4caee4223c..eb1981bab10 100644 --- a/Libraries/LibWeb/CSS/Interpolation.cpp +++ b/Libraries/LibWeb/CSS/Interpolation.cpp @@ -1024,78 +1024,101 @@ RefPtr interpolate_box_shadow(DOM::Element& element, Calculati static RefPtr interpolate_value_impl(DOM::Element& element, CalculationContext const& calculation_context, StyleValue const& from, StyleValue const& to, float delta, AllowDiscrete allow_discrete) { - if (from.type() != to.type()) { - // Handle mixed percentage and dimension types + if (from.type() != to.type() || from.is_calculated() || to.is_calculated()) { + // Handle mixed percentage and dimension types, as well as CalculatedStyleValues // https://www.w3.org/TR/css-values-4/#mixed-percentages - - struct NumericBaseTypeAndDefault { - NumericType::BaseType base_type; - ValueComparingNonnullRefPtr default_value; - }; - static constexpr auto numeric_base_type_and_default = [](StyleValue const& value) -> Optional { - switch (value.type()) { - case StyleValue::Type::Angle: { - static auto default_angle_value = AngleStyleValue::create(Angle::make_degrees(0)); - return NumericBaseTypeAndDefault { NumericType::BaseType::Angle, default_angle_value }; - } - case StyleValue::Type::Frequency: { - static auto default_frequency_value = FrequencyStyleValue::create(Frequency::make_hertz(0)); - return NumericBaseTypeAndDefault { NumericType::BaseType::Frequency, default_frequency_value }; - } - case StyleValue::Type::Length: { - static auto default_length_value = LengthStyleValue::create(Length::make_px(0)); - return NumericBaseTypeAndDefault { NumericType::BaseType::Length, default_length_value }; - } - case StyleValue::Type::Percentage: { - static auto default_percentage_value = PercentageStyleValue::create(Percentage { 0.0 }); - return NumericBaseTypeAndDefault { NumericType::BaseType::Percent, default_percentage_value }; - } - case StyleValue::Type::Time: { - static auto default_time_value = TimeStyleValue::create(Time::make_seconds(0)); - return NumericBaseTypeAndDefault { NumericType::BaseType::Time, default_time_value }; - } - default: - return {}; - } - }; - - static auto to_calculation_node = [calculation_context](StyleValue const& value) -> NonnullRefPtr { + auto get_value_type_of_numeric_style_value = [&calculation_context](StyleValue const& value) -> Optional { switch (value.type()) { case StyleValue::Type::Angle: - return NumericCalculationNode::create(value.as_angle().angle(), calculation_context); + return ValueType::Angle; case StyleValue::Type::Frequency: - return NumericCalculationNode::create(value.as_frequency().frequency(), calculation_context); + return ValueType::Frequency; + case StyleValue::Type::Integer: + return ValueType::Integer; case StyleValue::Type::Length: - return NumericCalculationNode::create(value.as_length().length(), calculation_context); + return ValueType::Length; + case StyleValue::Type::Number: + return ValueType::Number; case StyleValue::Type::Percentage: - return NumericCalculationNode::create(value.as_percentage().percentage(), calculation_context); + return calculation_context.percentages_resolve_as.value_or(ValueType::Percentage); + case StyleValue::Type::Resolution: + return ValueType::Resolution; case StyleValue::Type::Time: - return NumericCalculationNode::create(value.as_time().time(), calculation_context); + return ValueType::Time; + case StyleValue::Type::Calculated: { + auto const& calculated = value.as_calculated(); + if (calculated.resolves_to_angle_percentage()) + return ValueType::Angle; + if (calculated.resolves_to_frequency_percentage()) + return ValueType::Frequency; + if (calculated.resolves_to_length_percentage()) + return ValueType::Length; + if (calculated.resolves_to_resolution()) + return ValueType::Resolution; + if (calculated.resolves_to_number()) + return calculation_context.resolve_numbers_as_integers ? ValueType::Integer : ValueType::Number; + if (calculated.resolves_to_percentage()) + return calculation_context.percentages_resolve_as.value_or(ValueType::Percentage); + if (calculated.resolves_to_time_percentage()) + return ValueType::Time; + + return {}; + } default: - VERIFY_NOT_REACHED(); + return {}; } }; - auto from_base_type_and_default = numeric_base_type_and_default(from); - auto to_base_type_and_default = numeric_base_type_and_default(to); + auto from_value_type = get_value_type_of_numeric_style_value(from); + auto to_value_type = get_value_type_of_numeric_style_value(to); - if (from_base_type_and_default.has_value() && to_base_type_and_default.has_value() && (from_base_type_and_default->base_type == NumericType::BaseType::Percent || to_base_type_and_default->base_type == NumericType::BaseType::Percent)) { - // This is an interpolation from a numeric unit to a percentage, or vice versa. The trick here is to - // interpolate two separate values. For example, consider an interpolation from 30px to 80%. It's quite - // hard to understand how this interpolation works, but if instead we rewrite the values as "30px + 0%" and - // "0px + 80%", then it is very simple to understand; we just interpolate each component separately. + if (from_value_type.has_value() && from_value_type == to_value_type) { + auto to_calculation_node = [&calculation_context](StyleValue const& value) -> NonnullRefPtr { + switch (value.type()) { + case StyleValue::Type::Angle: + return NumericCalculationNode::create(value.as_angle().angle(), calculation_context); + case StyleValue::Type::Frequency: + return NumericCalculationNode::create(value.as_frequency().frequency(), calculation_context); + case StyleValue::Type::Integer: + // https://drafts.csswg.org/css-values-4/#combine-integers + // Interpolation of is defined as Vresult = round((1 - p) × VA + p × VB); that is, + // interpolation happens in the real number space as for s, and the result is converted to an + // by rounding to the nearest integer. + return NumericCalculationNode::create(Number { Number::Type::Number, static_cast(value.as_integer().integer()) }, calculation_context); + case StyleValue::Type::Length: + return NumericCalculationNode::create(value.as_length().length(), calculation_context); + case StyleValue::Type::Number: + return NumericCalculationNode::create(Number { Number::Type::Number, value.as_number().number() }, calculation_context); + case StyleValue::Type::Percentage: + return NumericCalculationNode::create(value.as_percentage().percentage(), calculation_context); + case StyleValue::Type::Time: + return NumericCalculationNode::create(value.as_time().time(), calculation_context); + case StyleValue::Type::Calculated: + return value.as_calculated().calculation(); + default: + VERIFY_NOT_REACHED(); + } + }; - auto interpolated_from = interpolate_value(element, calculation_context, from, from_base_type_and_default->default_value, delta, allow_discrete); - auto interpolated_to = interpolate_value(element, calculation_context, to_base_type_and_default->default_value, to, delta, allow_discrete); - if (!interpolated_from || !interpolated_to) - return {}; + auto from_node = to_calculation_node(from); + auto to_node = to_calculation_node(to); - Vector> values; - values.ensure_capacity(2); - values.unchecked_append(to_calculation_node(*interpolated_from)); - values.unchecked_append(to_calculation_node(*interpolated_to)); - auto calc_node = SumCalculationNode::create(move(values)); - return CalculatedStyleValue::create(move(calc_node), NumericType { to_base_type_and_default->base_type, 1 }, calculation_context); + // https://drafts.csswg.org/css-values-4/#combine-math + // Interpolation of math functions, with each other or with numeric values and other numeric-valued functions, is defined as Vresult = calc((1 - p) * VA + p * VB). + auto from_contribution = ProductCalculationNode::create({ + from_node, + NumericCalculationNode::create(Number { Number::Type::Number, 1.f - delta }, calculation_context), + }); + + auto to_contribution = ProductCalculationNode::create({ + to_node, + NumericCalculationNode::create(Number { Number::Type::Number, delta }, calculation_context), + }); + + return CalculatedStyleValue::create( + simplify_a_calculation_tree(SumCalculationNode::create({ from_contribution, to_contribution }), calculation_context, {}), + *from_node->numeric_type()->added_to(*to_node->numeric_type()), + calculation_context); } return {}; diff --git a/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h b/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h index d27dd8f6a52..36ed087ea9f 100644 --- a/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h +++ b/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h @@ -73,6 +73,8 @@ public: virtual ValueComparingNonnullRefPtr absolutized(CSSPixelRect const& viewport_rect, Length::FontMetrics const& font_metrics, Length::FontMetrics const& root_font_metrics) const override; virtual bool equals(StyleValue const& other) const override; + NonnullRefPtr calculation() const { return m_calculation; } + bool resolves_to_angle() const { return m_resolved_type.matches_angle(m_context.percentages_resolve_as); } bool resolves_to_angle_percentage() const { return m_resolved_type.matches_angle_percentage(m_context.percentages_resolve_as); } Optional resolve_angle_deprecated(CalculationResolutionContext const&) const; diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-image-width-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-image-width-interpolation.txt index 464d9938653..3d3c754ea70 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-image-width-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-image-width-interpolation.txt @@ -2,8 +2,8 @@ Harness status: OK Found 558 tests -510 Pass -48 Fail +522 Pass +36 Fail Pass CSS Transitions: property from neutral to [20px] at (-0.3) should be [7px] Pass CSS Transitions: property from neutral to [20px] at (0) should be [10px] Pass CSS Transitions: property from neutral to [20px] at (0.3) should be [13px] @@ -293,13 +293,13 @@ Fail CSS Transitions with transition: all: property from [1 Fail CSS Transitions with transition: all: property from [10%] to [20px] at (1) should be [calc(0% + 20px)] Fail CSS Transitions with transition: all: property from [10%] to [20px] at (1.5) should be [calc(-5% + 30px)] Fail CSS Animations: property from [10%] to [20px] at (-0.3) should be [calc(13% + -6px)] -Fail CSS Animations: property from [10%] to [20px] at (0) should be [10%] +Pass CSS Animations: property from [10%] to [20px] at (0) should be [10%] Fail CSS Animations: property from [10%] to [20px] at (0.3) should be [calc(7% + 6px)] Fail CSS Animations: property from [10%] to [20px] at (0.6) should be [calc(4% + 12px)] Fail CSS Animations: property from [10%] to [20px] at (1) should be [calc(0% + 20px)] Fail CSS Animations: property from [10%] to [20px] at (1.5) should be [calc(-5% + 30px)] Fail Web Animations: property from [10%] to [20px] at (-0.3) should be [calc(13% + -6px)] -Fail Web Animations: property from [10%] to [20px] at (0) should be [10%] +Pass Web Animations: property from [10%] to [20px] at (0) should be [10%] Fail Web Animations: property from [10%] to [20px] at (0.3) should be [calc(7% + 6px)] Fail Web Animations: property from [10%] to [20px] at (0.6) should be [calc(4% + 12px)] Fail Web Animations: property from [10%] to [20px] at (1) should be [calc(0% + 20px)] @@ -308,25 +308,25 @@ Fail CSS Transitions: property from [10px] to [20%] at (-0. Fail CSS Transitions: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] Fail CSS Transitions: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] Fail CSS Transitions: property from [10px] to [20%] at (0.6) should be [calc(4px + 12%)] -Fail CSS Transitions: property from [10px] to [20%] at (1) should be [20%] +Pass CSS Transitions: property from [10px] to [20%] at (1) should be [20%] Fail CSS Transitions: property from [10px] to [20%] at (1.5) should be [calc(-5px + 30%)] Fail CSS Transitions with transition: all: property from [10px] to [20%] at (-0.3) should be [calc(13px + -6%)] Fail CSS Transitions with transition: all: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] Fail CSS Transitions with transition: all: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] Fail CSS Transitions with transition: all: property from [10px] to [20%] at (0.6) should be [calc(4px + 12%)] -Fail CSS Transitions with transition: all: property from [10px] to [20%] at (1) should be [20%] +Pass CSS Transitions with transition: all: property from [10px] to [20%] at (1) should be [20%] Fail CSS Transitions with transition: all: property from [10px] to [20%] at (1.5) should be [calc(-5px + 30%)] -Fail CSS Animations: property from [10px] to [20%] at (-0.3) should be [calc(13px + -6%)] -Fail CSS Animations: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] -Fail CSS Animations: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] +Pass CSS Animations: property from [10px] to [20%] at (-0.3) should be [calc(13px + -6%)] +Pass CSS Animations: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] +Pass CSS Animations: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] Fail CSS Animations: property from [10px] to [20%] at (0.6) should be [calc(4px + 12%)] -Fail CSS Animations: property from [10px] to [20%] at (1) should be [20%] +Pass CSS Animations: property from [10px] to [20%] at (1) should be [20%] Fail CSS Animations: property from [10px] to [20%] at (1.5) should be [calc(-5px + 30%)] -Fail Web Animations: property from [10px] to [20%] at (-0.3) should be [calc(13px + -6%)] -Fail Web Animations: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] -Fail Web Animations: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] +Pass Web Animations: property from [10px] to [20%] at (-0.3) should be [calc(13px + -6%)] +Pass Web Animations: property from [10px] to [20%] at (0) should be [calc(0% + 10px)] +Pass Web Animations: property from [10px] to [20%] at (0.3) should be [calc(7px + 6%)] Fail Web Animations: property from [10px] to [20%] at (0.6) should be [calc(4px + 12%)] -Fail Web Animations: property from [10px] to [20%] at (1) should be [20%] +Pass Web Animations: property from [10px] to [20%] at (1) should be [20%] Fail Web Animations: property from [10px] to [20%] at (1.5) should be [calc(-5px + 30%)] Pass CSS Transitions: property from [10px auto auto 20] to [110px auto auto 120] at (-0.3) should be [ 0px auto auto 0] Pass CSS Transitions: property from [10px auto auto 20] to [110px auto auto 120] at (0) should be [ 10px auto auto 20] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/box-shadow-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/box-shadow-interpolation.txt index 6e12375a656..e1b26a18bd9 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/box-shadow-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/box-shadow-interpolation.txt @@ -2,8 +2,8 @@ Harness status: OK Found 402 tests -300 Pass -102 Fail +318 Pass +84 Fail Pass CSS Transitions: property from neutral to [20px 20px 20px 20px black] at (-0.3) should be [rgb(0, 0, 0) 7px 33px 7px 33px] Pass CSS Transitions: property from neutral to [20px 20px 20px 20px black] at (0) should be [rgb(0, 0, 0) 10px 30px 10px 30px] Pass CSS Transitions: property from neutral to [20px 20px 20px 20px black] at (0.3) should be [rgb(0, 0, 0) 13px 27px 13px 27px] @@ -268,30 +268,30 @@ Fail Web Animations: property from [10px 20px rgba(255, 255, 0, 0.5 Fail Web Animations: property from [10px 20px rgba(255, 255, 0, 0.5), inset 5px 10em #008000] to [none] at (0.6) should be [rgba(255, 255, 0, 0.2) 4px 8px 0px 0px, rgba(0, 128, 0, 0.4) 2px 12px 0px 0px inset] Pass Web Animations: property from [10px 20px rgba(255, 255, 0, 0.5), inset 5px 10em #008000] to [none] at (1) should be [rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px inset] Pass Web Animations: property from [10px 20px rgba(255, 255, 0, 0.5), inset 5px 10em #008000] to [none] at (1.5) should be [rgba(0, 0, 0, 0) -5px -10px 0px 0px, rgba(0, 0, 0, 0) -2.5px -15px 0px 0px inset] -Fail CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] -Fail CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] -Fail CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] -Fail CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] +Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] +Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] +Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] +Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1) should be [rgb(0, 0, 0) 0px 0px 0px 15px inset] -Fail CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] -Fail CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] -Fail CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] -Fail CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] -Fail CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] +Pass CSS Transitions: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] +Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] +Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] +Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] +Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1) should be [rgb(0, 0, 0) 0px 0px 0px 15px inset] -Fail CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] -Fail CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] +Pass CSS Transitions with transition: all: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] +Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] -Fail CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] -Fail CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] +Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] +Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1) should be [rgb(0, 0, 0) 0px 0px 0px 15px inset] -Fail CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] -Fail Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] +Pass CSS Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] +Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (-0.3) should be [rgb(0, 0, 0) 0px 0px 0px -4.5px inset] Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0) should be [rgb(0, 0, 0) 0px 0px 0px 0px inset] -Fail Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] -Fail Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] +Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.3) should be [rgb(0, 0, 0) 0px 0px 0px 4.5px inset] +Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (0.6) should be [rgb(0, 0, 0) 0px 0px 0px 9px inset] Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1) should be [rgb(0, 0, 0) 0px 0px 0px 15px inset] -Fail Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] +Pass Web Animations: property from [inset 0 0 0 0 black] to [inset 0 0 0 calc(max(10em, 20px) / 2) black] at (1.5) should be [rgb(0, 0, 0) 0px 0px 0px 22.5px inset] Fail CSS Transitions with transition-behavior:allow-discrete: property from [10px 20px yellow, 5px 10px green] to [inset 5px 10px green, 15px 20px blue] at (-0.3) should be [10px 20px yellow, 5px 10px green] Pass CSS Transitions with transition-behavior:allow-discrete: property from [10px 20px yellow, 5px 10px green] to [inset 5px 10px green, 15px 20px blue] at (0) should be [10px 20px yellow, 5px 10px green] Fail CSS Transitions with transition-behavior:allow-discrete: property from [10px 20px yellow, 5px 10px green] to [inset 5px 10px green, 15px 20px blue] at (0.3) should be [10px 20px yellow, 5px 10px green] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-sizing/animation/width-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-sizing/animation/width-interpolation.txt index 14b20f1fe03..89430c5ed14 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-sizing/animation/width-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-sizing/animation/width-interpolation.txt @@ -2,8 +2,8 @@ Harness status: OK Found 456 tests -406 Pass -50 Fail +414 Pass +42 Fail Pass CSS Transitions: property from neutral to [40px] at (-0.3) should be [1px] Pass CSS Transitions: property from neutral to [40px] at (0) should be [10px] Pass CSS Transitions: property from neutral to [40px] at (0.3) should be [19px] @@ -160,30 +160,30 @@ Pass Web Animations: property from [0px] to [100px] at (0.3) should be [ Pass Web Animations: property from [0px] to [100px] at (0.6) should be [60px] Pass Web Animations: property from [0px] to [100px] at (1) should be [100px] Pass Web Animations: property from [0px] to [100px] at (1.5) should be [150px] -Fail CSS Transitions: property from [10px] to [100%] at (-0.3) should be [0px] +Pass CSS Transitions: property from [10px] to [100%] at (-0.3) should be [0px] Pass CSS Transitions: property from [10px] to [100%] at (0) should be [10px] Pass CSS Transitions: property from [10px] to [100%] at (0.3) should be [37px] Pass CSS Transitions: property from [10px] to [100%] at (0.6) should be [64px] Pass CSS Transitions: property from [10px] to [100%] at (1) should be [100px] -Fail CSS Transitions: property from [10px] to [100%] at (1.5) should be [145px] -Fail CSS Transitions with transition: all: property from [10px] to [100%] at (-0.3) should be [0px] +Pass CSS Transitions: property from [10px] to [100%] at (1.5) should be [145px] +Pass CSS Transitions with transition: all: property from [10px] to [100%] at (-0.3) should be [0px] Pass CSS Transitions with transition: all: property from [10px] to [100%] at (0) should be [10px] Pass CSS Transitions with transition: all: property from [10px] to [100%] at (0.3) should be [37px] Pass CSS Transitions with transition: all: property from [10px] to [100%] at (0.6) should be [64px] Pass CSS Transitions with transition: all: property from [10px] to [100%] at (1) should be [100px] -Fail CSS Transitions with transition: all: property from [10px] to [100%] at (1.5) should be [145px] -Fail CSS Animations: property from [10px] to [100%] at (-0.3) should be [0px] +Pass CSS Transitions with transition: all: property from [10px] to [100%] at (1.5) should be [145px] +Pass CSS Animations: property from [10px] to [100%] at (-0.3) should be [0px] Pass CSS Animations: property from [10px] to [100%] at (0) should be [10px] Pass CSS Animations: property from [10px] to [100%] at (0.3) should be [37px] Pass CSS Animations: property from [10px] to [100%] at (0.6) should be [64px] Pass CSS Animations: property from [10px] to [100%] at (1) should be [100px] -Fail CSS Animations: property from [10px] to [100%] at (1.5) should be [145px] -Fail Web Animations: property from [10px] to [100%] at (-0.3) should be [0px] +Pass CSS Animations: property from [10px] to [100%] at (1.5) should be [145px] +Pass Web Animations: property from [10px] to [100%] at (-0.3) should be [0px] Pass Web Animations: property from [10px] to [100%] at (0) should be [10px] Pass Web Animations: property from [10px] to [100%] at (0.3) should be [37px] Pass Web Animations: property from [10px] to [100%] at (0.6) should be [64px] Pass Web Animations: property from [10px] to [100%] at (1) should be [100px] -Fail Web Animations: property from [10px] to [100%] at (1.5) should be [145px] +Pass Web Animations: property from [10px] to [100%] at (1.5) should be [145px] Pass CSS Transitions with transition-behavior:allow-discrete: property from [auto] to [40px] at (-0.3) should be [auto] Pass CSS Transitions with transition-behavior:allow-discrete: property from [auto] to [40px] at (0) should be [auto] Pass CSS Transitions with transition-behavior:allow-discrete: property from [auto] to [40px] at (0.3) should be [auto] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-values/animations/calc-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-values/animations/calc-interpolation.txt index f6affe12be7..bcd5db4f19c 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-values/animations/calc-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-values/animations/calc-interpolation.txt @@ -2,92 +2,92 @@ Harness status: OK Found 140 tests -84 Pass -56 Fail -Fail CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-8.5070575e+37px] -Fail CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] +136 Pass +4 Fail +Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-8.5070575e+37px] +Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [8.5070575e+37px] Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (0.5) should be [1.7014115e+38px] Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (0.75) should be [2.55211725e+38px] Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (1) should be [3.402823e+38px] Pass CSS Transitions: property from [0px] to [calc(infinity * 1px)] at (1.25) should be [4.2535287499999996e+38px] -Fail CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-8.5070575e+37px] -Fail CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] +Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-8.5070575e+37px] +Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [8.5070575e+37px] Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (0.5) should be [1.7014115e+38px] Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (0.75) should be [2.55211725e+38px] Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (1) should be [3.402823e+38px] Pass CSS Transitions with transition: all: property from [0px] to [calc(infinity * 1px)] at (1.25) should be [4.2535287499999996e+38px] -Fail CSS Animations: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-3.402823e+38px] +Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-3.402823e+38px] Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] -Fail CSS Animations: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [3.402823e+38px] +Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [3.402823e+38px] Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (0.5) should be [3.402823e+38px] Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (0.75) should be [3.402823e+38px] Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (1) should be [3.402823e+38px] Pass CSS Animations: property from [0px] to [calc(infinity * 1px)] at (1.25) should be [3.402823e+38px] -Fail Web Animations: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-3.402823e+38px] +Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (-0.25) should be [-3.402823e+38px] Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (0) should be [0px] -Fail Web Animations: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [3.402823e+38px] +Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (0.25) should be [3.402823e+38px] Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (0.5) should be [3.402823e+38px] Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (0.75) should be [3.402823e+38px] Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (1) should be [3.402823e+38px] Pass Web Animations: property from [0px] to [calc(infinity * 1px)] at (1.25) should be [3.402823e+38px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [40px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [40px] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [40px] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [-10px] Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [0px] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [10px] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [20px] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [30px] Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [40px] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [50px] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [calc(100% - 10px)] -Fail CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] +Pass CSS Transitions: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [calc(100% - 10px)] -Fail CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] +Pass CSS Transitions with transition: all: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [calc(100% - 10px)] -Fail CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] +Pass CSS Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (-0.25) should be [calc(((50% - 25px) * 1.25) + ((100% - 10px) * -0.25))] Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0) should be [calc(50% - 25px)] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.25) should be [calc(((50% - 25px) * 0.75) + ((100% - 10px) * 0.25))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.5) should be [calc(((50% - 25px) * 0.5) + ((100% - 10px) * 0.5))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (0.75) should be [calc(((50% - 25px) * 0.25) + ((100% - 10px) * 0.75))] Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1) should be [calc(100% - 10px)] -Fail Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] +Pass Web Animations: property from [calc(50% - 25px)] to [calc(100% - 10px)] at (1.25) should be [calc(((50% - 25px) * -0.25) + ((100% - 10px) * 1.25))] Pass CSS Transitions: property from [0em] to [100px] at (-0.25) should be [-25px] Pass CSS Transitions: property from [0em] to [100px] at (0) should be [0em] Pass CSS Transitions: property from [0em] to [100px] at (0.25) should be [25px]