diff --git a/components/style/properties/longhand/inherited_table.mako.rs b/components/style/properties/longhand/inherited_table.mako.rs index 1a6daa55417..b3cefca4304 100644 --- a/components/style/properties/longhand/inherited_table.mako.rs +++ b/components/style/properties/longhand/inherited_table.mako.rs @@ -114,15 +114,11 @@ ${helpers.single_keyword("caption-side", "top bottom", Err(()) => (), Ok(length) => { first = Some(length); - match specified::Length::parse_non_negative(input) { - Err(()) => (), - Ok(length) => second = Some(length), + if let Ok(len) = input.try(|input| specified::Length::parse_non_negative(input)) { + second = Some(len); } } } - if input.next().is_ok() { - return Err(()) - } match (first, second) { (None, None) => Err(()), (Some(length), None) => { diff --git a/tests/unit/style/parsing/border.rs b/tests/unit/style/parsing/border.rs index 56a0ad47a90..fe6ef2ef087 100644 --- a/tests/unit/style/parsing/border.rs +++ b/tests/unit/style/parsing/border.rs @@ -139,3 +139,12 @@ fn test_border_style() { assert_roundtrip_with_context!(BorderStyle::parse, r#"inset"#); assert_roundtrip_with_context!(BorderStyle::parse, r#"outset"#); } + +#[test] +fn test_border_spacing() { + use style::properties::longhands::border_spacing; + + assert_parser_exhausted!(border_spacing, "1px rubbish", false); + assert_parser_exhausted!(border_spacing, "1px", true); + assert_parser_exhausted!(border_spacing, "1px 2px", true); +} diff --git a/tests/unit/style/parsing/mod.rs b/tests/unit/style/parsing/mod.rs index 627f995a6ff..72684bccc50 100644 --- a/tests/unit/style/parsing/mod.rs +++ b/tests/unit/style/parsing/mod.rs @@ -58,6 +58,17 @@ macro_rules! assert_roundtrip { } } +macro_rules! assert_parser_exhausted { + ($name:ident, $string:expr, $should_exhausted:expr) => {{ + let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap(); + let context = ParserContext::new(Origin::Author, &url, Box::new(CSSErrorReporterTest)); + let mut parser = Parser::new($string); + let parsed = $name::parse(&context, &mut parser); + assert_eq!(parsed.is_ok(), true); + assert_eq!(parser.is_exhausted(), $should_exhausted); + }} +} + macro_rules! parse_longhand { ($name:ident, $s:expr) => {{ let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap();