fixed the wrong behavior of border-spacing

This commit is contained in:
Huxley 2017-02-17 14:29:07 +08:00
parent 11396b4dd3
commit 06650f8428
3 changed files with 22 additions and 6 deletions

View file

@ -113,15 +113,11 @@ ${helpers.single_keyword("caption-side", "top bottom",
Err(()) => (), Err(()) => (),
Ok(length) => { Ok(length) => {
first = Some(length); first = Some(length);
match specified::Length::parse_non_negative(input) { if let Ok(len) = input.try(|input| specified::Length::parse_non_negative(input)) {
Err(()) => (), second = Some(len);
Ok(length) => second = Some(length),
} }
} }
} }
if input.next().is_ok() {
return Err(())
}
match (first, second) { match (first, second) {
(None, None) => Err(()), (None, None) => Err(()),
(Some(length), None) => { (Some(length), None) => {

View file

@ -139,3 +139,12 @@ fn test_border_style() {
assert_roundtrip_with_context!(BorderStyle::parse, r#"inset"#); assert_roundtrip_with_context!(BorderStyle::parse, r#"inset"#);
assert_roundtrip_with_context!(BorderStyle::parse, r#"outset"#); 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);
}

View file

@ -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 { macro_rules! parse_longhand {
($name:ident, $s:expr) => {{ ($name:ident, $s:expr) => {{
let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap(); let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap();