diff --git a/components/style/properties/shorthand/border.mako.rs b/components/style/properties/shorthand/border.mako.rs index 7f48a74ff9d..8441f5ce395 100644 --- a/components/style/properties/shorthand/border.mako.rs +++ b/components/style/properties/shorthand/border.mako.rs @@ -182,7 +182,7 @@ pub fn parse_border(context: &ParserContext, input: &mut Parser) 'border-%s-radius' % (corner) for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] )}" extra_prefixes="webkit" spec="https://drafts.csswg.org/css-backgrounds/#border-radius"> - use values::specified::basic_shape::BorderRadius; + use values::specified::basic_shape::{BorderRadius, serialize_radius_values}; use parser::Parse; pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result { @@ -195,21 +195,13 @@ pub fn parse_border(context: &ParserContext, input: &mut Parser) }) } - // TODO: I do not understand how border radius works with respect to the slashes /, - // so putting a default generic impl for now - // https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius impl<'a> ToCss for LonghandsToSerialize<'a> { fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.border_top_left_radius.to_css(dest)); - try!(write!(dest, " ")); - - try!(self.border_top_right_radius.to_css(dest)); - try!(write!(dest, " ")); - - try!(self.border_bottom_right_radius.to_css(dest)); - try!(write!(dest, " ")); - - self.border_bottom_left_radius.to_css(dest) + serialize_radius_values(dest, + &self.border_top_left_radius.0, + &self.border_top_right_radius.0, + &self.border_bottom_right_radius.0, + &self.border_bottom_left_radius.0) } } diff --git a/tests/unit/style/properties/serialization.rs b/tests/unit/style/properties/serialization.rs index 770e94701e7..12e8a631987 100644 --- a/tests/unit/style/properties/serialization.rs +++ b/tests/unit/style/properties/serialization.rs @@ -368,6 +368,29 @@ mod shorthand_serialization { let serialization = shorthand_properties_to_string(properties); assert_eq!(serialization, "border-style: solid dotted;"); } + + use style::values::specified::BorderRadiusSize; + use style::values::specified::length::Percentage; + + #[test] + fn border_radius_should_serialize_correctly() { + let mut properties = Vec::new(); + properties.push(PropertyDeclaration::BorderTopLeftRadius(Box::new(BorderRadiusSize::new( + Percentage(0.01).into(), Percentage(0.05).into() + )))); + properties.push(PropertyDeclaration::BorderTopRightRadius(Box::new(BorderRadiusSize::new( + Percentage(0.02).into(), Percentage(0.06).into() + )))); + properties.push(PropertyDeclaration::BorderBottomRightRadius(Box::new(BorderRadiusSize::new( + Percentage(0.03).into(), Percentage(0.07).into() + )))); + properties.push(PropertyDeclaration::BorderBottomLeftRadius(Box::new(BorderRadiusSize::new( + Percentage(0.04).into(), Percentage(0.08).into() + )))); + + let serialization = shorthand_properties_to_string(properties); + assert_eq!(serialization, "border-radius: 1% 2% 3% 4% / 5% 6% 7% 8%;"); + } }