mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Add some unit tests for basic transform operations for Servo.
This commit is contained in:
parent
1d44c273d3
commit
a2a19f02ab
1 changed files with 96 additions and 0 deletions
|
@ -2,8 +2,11 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use app_units::Au;
|
||||
use cssparser::RGBA;
|
||||
use style::properties::animated_properties::{Animatable, IntermediateRGBA};
|
||||
use style::properties::longhands::transform::computed_value::ComputedOperation as TransformOperation;
|
||||
use style::properties::longhands::transform::computed_value::T as TransformList;
|
||||
|
||||
fn interpolate_rgba(from: RGBA, to: RGBA, progress: f64) -> RGBA {
|
||||
let from: IntermediateRGBA = from.into();
|
||||
|
@ -11,6 +14,7 @@ fn interpolate_rgba(from: RGBA, to: RGBA, progress: f64) -> RGBA {
|
|||
from.interpolate(&to, progress).unwrap().into()
|
||||
}
|
||||
|
||||
// Color
|
||||
#[test]
|
||||
fn test_rgba_color_interepolation_preserves_transparent() {
|
||||
assert_eq!(interpolate_rgba(RGBA::transparent(),
|
||||
|
@ -54,3 +58,95 @@ fn test_rgba_color_interepolation_out_of_range_clamped_2() {
|
|||
RGBA::from_floats(0.0, 1.0, 0.0, 0.2), 1.5),
|
||||
RGBA::from_floats(0.0, 0.0, 0.0, 0.0));
|
||||
}
|
||||
|
||||
// Transform
|
||||
#[test]
|
||||
fn test_transform_interpolation_on_translate() {
|
||||
use style::values::computed::{CalcLengthOrPercentage, LengthOrPercentage};
|
||||
|
||||
let from = TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Length(Au(0)),
|
||||
LengthOrPercentage::Length(Au(100)),
|
||||
Au(25))]));
|
||||
let to = TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Length(Au(100)),
|
||||
LengthOrPercentage::Length(Au(0)),
|
||||
Au(75))]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Length(Au(50)),
|
||||
LengthOrPercentage::Length(Au(50)),
|
||||
Au(50))])));
|
||||
|
||||
let from = TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Percentage(0.5),
|
||||
LengthOrPercentage::Percentage(1.0),
|
||||
Au(25))]));
|
||||
let to = TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Length(Au(100)),
|
||||
LengthOrPercentage::Length(Au(50)),
|
||||
Au(75))]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Calc(
|
||||
// calc(50px + 25%)
|
||||
CalcLengthOrPercentage::new(Au(50),
|
||||
Some(0.25))),
|
||||
LengthOrPercentage::Calc(
|
||||
// calc(25px + 50%)
|
||||
CalcLengthOrPercentage::new(Au(25),
|
||||
Some(0.5))),
|
||||
Au(50))])));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transform_interpolation_on_scale() {
|
||||
let from = TransformList(Some(vec![TransformOperation::Scale(1.0, 2.0, 1.0)]));
|
||||
let to = TransformList(Some(vec![TransformOperation::Scale(2.0, 4.0, 2.0)]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![TransformOperation::Scale(1.5, 3.0, 1.5)])));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transform_interpolation_on_rotate() {
|
||||
use style::values::computed::Angle;
|
||||
|
||||
let from = TransformList(Some(vec![TransformOperation::Rotate(0.0, 0.0, 1.0,
|
||||
Angle::from_radians(0.0))]));
|
||||
let to = TransformList(Some(vec![TransformOperation::Rotate(0.0, 0.0, 1.0,
|
||||
Angle::from_radians(100.0))]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![TransformOperation::Rotate(0.0, 0.0, 1.0,
|
||||
Angle::from_radians(50.0))])));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transform_interpolation_on_skew() {
|
||||
use style::values::computed::Angle;
|
||||
|
||||
let from = TransformList(Some(vec![TransformOperation::Skew(Angle::from_radians(0.0),
|
||||
Angle::from_radians(100.0))]));
|
||||
let to = TransformList(Some(vec![TransformOperation::Skew(Angle::from_radians(100.0),
|
||||
Angle::from_radians(0.0))]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![TransformOperation::Skew(Angle::from_radians(50.0),
|
||||
Angle::from_radians(50.0))])));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transform_interpolation_on_mismatched_lists() {
|
||||
use style::values::computed::{Angle, LengthOrPercentage, Percentage};
|
||||
|
||||
let from = TransformList(Some(vec![TransformOperation::Rotate(0.0, 0.0, 1.0,
|
||||
Angle::from_radians(100.0))]));
|
||||
let to = TransformList(Some(vec![
|
||||
TransformOperation::Translate(LengthOrPercentage::Length(Au(100)),
|
||||
LengthOrPercentage::Length(Au(0)),
|
||||
Au(0))]));
|
||||
assert_eq!(from.interpolate(&to, 0.5).unwrap(),
|
||||
TransformList(Some(vec![TransformOperation::InterpolateMatrix {
|
||||
from_list: from.clone(),
|
||||
to_list: to.clone(),
|
||||
progress: Percentage(0.5)
|
||||
}])));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue