mirror of
https://github.com/servo/servo.git
synced 2025-08-27 16:18:21 +01:00
Implement HorizontalPosition / VerticalPosition
This commit is contained in:
parent
872ec89a9c
commit
a409d41d1d
6 changed files with 513 additions and 181 deletions
|
@ -61,4 +61,79 @@ fn test_position() {
|
|||
assert!(parse(Position::parse, "top 10px bottom").is_err());
|
||||
assert!(parse(Position::parse, "top 10px bottom 15%").is_err());
|
||||
|
||||
// Logical keywords are not supported in Position yet
|
||||
assert!(parse(Position::parse, "x-start").is_err());
|
||||
assert!(parse(Position::parse, "y-end").is_err());
|
||||
assert!(parse(Position::parse, "x-start y-end").is_err());
|
||||
assert!(parse(Position::parse, "x-end 10px").is_err());
|
||||
assert!(parse(Position::parse, "y-start 20px").is_err());
|
||||
assert!(parse(Position::parse, "x-start bottom 10%").is_err());
|
||||
assert!(parse(Position::parse, "left y-start 10%").is_err());
|
||||
assert!(parse(Position::parse, "x-start 20px y-end 10%").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_horizontal_position() {
|
||||
// One value serializations.
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "20px", "20px");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "25%", "25%");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "center", "center");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "left", "left");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "right", "right");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "x-start", "x-start");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "x-end", "x-end");
|
||||
|
||||
// Two value serializations.
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "right 10px", "right 10px");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "10px left", "left 10px");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "x-end 20%", "x-end 20%");
|
||||
assert_roundtrip_with_context!(HorizontalPosition::parse, "20px x-start", "x-start 20px");
|
||||
|
||||
// Invalid horizontal positions.
|
||||
assert!(parse(HorizontalPosition::parse, "top").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "bottom").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "y-start").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "y-end").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "20px y-end").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "y-end 20px ").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "bottom 20px").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "20px top").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "left center").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "bottom top").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "left top").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "left right").is_err());
|
||||
assert!(parse(HorizontalPosition::parse, "20px 30px").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vertical_position() {
|
||||
// One value serializations.
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "20px", "20px");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "25%", "25%");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "center", "center");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "top", "top");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "bottom", "bottom");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "y-start", "y-start");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "y-end", "y-end");
|
||||
|
||||
// Two value serializations.
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "bottom 10px", "bottom 10px");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "10px top", "top 10px");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "y-end 20%", "y-end 20%");
|
||||
assert_roundtrip_with_context!(VerticalPosition::parse, "20px y-start", "y-start 20px");
|
||||
|
||||
// Invalid vertical positions.
|
||||
assert!(parse(VerticalPosition::parse, "left").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "right").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "x-start").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "x-end").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "20px x-end").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "x-end 20px ").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "left 20px").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "20px right").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "left center").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "bottom top").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "left top").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "left right").is_err());
|
||||
assert!(parse(VerticalPosition::parse, "20px 30px").is_err());
|
||||
}
|
||||
|
|
|
@ -692,7 +692,7 @@ mod shorthand_serialization {
|
|||
use style::properties::longhands::background_repeat as repeat;
|
||||
use style::properties::longhands::background_size as size;
|
||||
use style::values::specified::Image;
|
||||
use style::values::specified::position::Position;
|
||||
use style::values::specified::position::{HorizontalPosition, Position, VerticalPosition};
|
||||
use super::*;
|
||||
macro_rules! single_vec_value_typedef {
|
||||
($name:ident, $path:expr) => {
|
||||
|
@ -733,10 +733,14 @@ mod shorthand_serialization {
|
|||
|
||||
let position = single_vec_value_typedef!(position,
|
||||
Position {
|
||||
horiz_keyword: None,
|
||||
horiz_position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
vert_keyword: None,
|
||||
vert_position: Some(LengthOrPercentage::Length(Length::from_px(4f32)))
|
||||
horizontal: HorizontalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
},
|
||||
vertical: VerticalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(4f32))),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -787,10 +791,14 @@ mod shorthand_serialization {
|
|||
|
||||
let position = single_vec_value_typedef!(position,
|
||||
Position {
|
||||
horiz_keyword: None,
|
||||
horiz_position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
vert_keyword: None,
|
||||
vert_position: Some(LengthOrPercentage::Length(Length::from_px(4f32)))
|
||||
horizontal: HorizontalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
},
|
||||
vertical: VerticalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(4f32))),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -840,10 +848,14 @@ mod shorthand_serialization {
|
|||
|
||||
let position = single_vec_value_typedef!(position,
|
||||
Position {
|
||||
horiz_keyword: None,
|
||||
horiz_position: Some(LengthOrPercentage::Length(Length::from_px(0f32))),
|
||||
vert_keyword: None,
|
||||
vert_position: Some(LengthOrPercentage::Length(Length::from_px(0f32)))
|
||||
horizontal: HorizontalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(0f32))),
|
||||
},
|
||||
vertical: VerticalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(0f32))),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -881,7 +893,7 @@ mod shorthand_serialization {
|
|||
use style::properties::longhands::mask_repeat as repeat;
|
||||
use style::properties::longhands::mask_size as size;
|
||||
use style::values::specified::Image;
|
||||
use style::values::specified::position::Position;
|
||||
use style::values::specified::position::{HorizontalPosition, Position, VerticalPosition};
|
||||
use super::*;
|
||||
|
||||
macro_rules! single_vec_value_typedef {
|
||||
|
@ -918,10 +930,14 @@ mod shorthand_serialization {
|
|||
|
||||
let position = single_vec_value_typedef!(position,
|
||||
Position {
|
||||
horiz_keyword: None,
|
||||
horiz_position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
vert_keyword: None,
|
||||
vert_position: Some(LengthOrPercentage::Length(Length::from_px(4f32)))
|
||||
horizontal: HorizontalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
},
|
||||
vertical: VerticalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(4f32))),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -968,10 +984,14 @@ mod shorthand_serialization {
|
|||
|
||||
let position = single_vec_value_typedef!(position,
|
||||
Position {
|
||||
horiz_keyword: None,
|
||||
horiz_position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
vert_keyword: None,
|
||||
vert_position: Some(LengthOrPercentage::Length(Length::from_px(4f32)))
|
||||
horizontal: HorizontalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(7f32))),
|
||||
},
|
||||
vertical: VerticalPosition {
|
||||
keyword: None,
|
||||
position: Some(LengthOrPercentage::Length(Length::from_px(4f32))),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue