Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the ParserContext along with the Parser #14373

Merged
merged 2 commits into from Nov 27, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

Fix the unit tests to use context

  • Loading branch information
wafflespeanut committed Nov 27, 2016
commit f290a6f88c53bc7366d16b7735de0dff77fdffdb
@@ -2,17 +2,20 @@
* 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 cssparser::Parser;
use media_queries::CSSErrorReporterTest;
use parsing::parse;
use style::parser::Parse;
use style::parser::{Parse, ParserContext};
use style::stylesheets::Origin;
use style::values::specified::basic_shape::*;
use style_traits::ToCss;

// Ensure that basic-shape sub-functions parse as both basic shapes
// and their individual components
macro_rules! assert_roundtrip_basicshape {
($fun:expr, $input:expr, $output:expr) => {
assert_roundtrip!($fun, $input, $output);
assert_roundtrip!(BasicShape::parse, $input, $output);
assert_roundtrip_with_context!($fun, $input, $output);
assert_roundtrip_with_context!(BasicShape::parse, $input, $output);
}
}

@@ -5,32 +5,19 @@
//! Tests for parsing and serialization of values/properties

use cssparser::Parser;
use media_queries::CSSErrorReporterTest;
use style::parser::ParserContext;
use style::stylesheets::Origin;

fn parse<T, F: Fn(&mut Parser) -> Result<T, ()>>(f: F, s: &str) -> Result<T, ()> {
fn parse<T, F: Fn(&ParserContext, &mut Parser) -> Result<T, ()>>(f: F, s: &str) -> Result<T, ()> {
let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap();
let context = ParserContext::new(Origin::Author, &url, Box::new(CSSErrorReporterTest));
let mut parser = Parser::new(s);
f(&mut parser)
f(&context, &mut parser)
}


// This is a macro so that the file/line information
// is preserved in the panic
macro_rules! assert_roundtrip {
($fun:expr, $string:expr) => {
assert_roundtrip!($fun, $string, $string);
};
($fun:expr, $input:expr, $output:expr) => {
let parsed = $crate::parsing::parse($fun, $input)
.expect(&format!("Failed to parse {}", $input));
let serialized = ToCss::to_css_string(&parsed);
assert_eq!(serialized, $output);

let re_parsed = $crate::parsing::parse($fun, &serialized)
.expect(&format!("Failed to parse serialization {}", $input));
let re_serialized = ToCss::to_css_string(&re_parsed);
assert_eq!(serialized, re_serialized);
}
}

macro_rules! assert_roundtrip_with_context {
($fun:expr, $string:expr) => {
assert_roundtrip_with_context!($fun, $string, $string);
@@ -46,13 +33,12 @@ macro_rules! assert_roundtrip_with_context {

let mut parser = Parser::new(&serialized);
let re_parsed = $fun(&context, &mut parser)
.expect(&format!("Failed to parse {}", $input));
.expect(&format!("Failed to parse serialization {}", $input));
let re_serialized = ToCss::to_css_string(&re_parsed);
assert_eq!(serialized, re_serialized);
}
}


macro_rules! parse_longhand {
($name:ident, $s:expr) => {{
let url = ::servo_url::ServoUrl::parse("http://localhost").unwrap();
@@ -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 cssparser::Parser;
use media_queries::CSSErrorReporterTest;
use parsing::parse;
use style::parser::Parse;
use style::parser::{Parse, ParserContext};
use style::stylesheets::Origin;
use style::values::specified::position::*;
use style_traits::ToCss;

@@ -12,38 +15,38 @@ fn test_position() {
// Serialization is not actually specced
// though these are the values expected by basic-shape
// https://github.com/w3c/csswg-drafts/issues/368
assert_roundtrip!(Position::parse, "center", "center center");
assert_roundtrip!(Position::parse, "top left", "left top");
assert_roundtrip!(Position::parse, "left top", "left top");
assert_roundtrip!(Position::parse, "top right", "right top");
assert_roundtrip!(Position::parse, "right top", "right top");
assert_roundtrip!(Position::parse, "bottom left", "left bottom");
assert_roundtrip!(Position::parse, "left bottom", "left bottom");
assert_roundtrip!(Position::parse, "left center", "left center");
assert_roundtrip!(Position::parse, "right center", "right center");
assert_roundtrip!(Position::parse, "center top", "center top");
assert_roundtrip!(Position::parse, "center bottom", "center bottom");
assert_roundtrip!(Position::parse, "center 10px", "center 10px");
assert_roundtrip!(Position::parse, "center 10%", "center 10%");
assert_roundtrip!(Position::parse, "right 10%", "right 10%");
assert_roundtrip_with_context!(Position::parse, "center", "center center");
assert_roundtrip_with_context!(Position::parse, "top left", "left top");
assert_roundtrip_with_context!(Position::parse, "left top", "left top");
assert_roundtrip_with_context!(Position::parse, "top right", "right top");
assert_roundtrip_with_context!(Position::parse, "right top", "right top");
assert_roundtrip_with_context!(Position::parse, "bottom left", "left bottom");
assert_roundtrip_with_context!(Position::parse, "left bottom", "left bottom");
assert_roundtrip_with_context!(Position::parse, "left center", "left center");
assert_roundtrip_with_context!(Position::parse, "right center", "right center");
assert_roundtrip_with_context!(Position::parse, "center top", "center top");
assert_roundtrip_with_context!(Position::parse, "center bottom", "center bottom");
assert_roundtrip_with_context!(Position::parse, "center 10px", "center 10px");
assert_roundtrip_with_context!(Position::parse, "center 10%", "center 10%");
assert_roundtrip_with_context!(Position::parse, "right 10%", "right 10%");

// Only keywords can be reordered
assert!(parse(Position::parse, "top 40%").is_err());
assert!(parse(Position::parse, "40% left").is_err());

// 3 and 4 value serialization
assert_roundtrip!(Position::parse, "left 10px top 15px", "left 10px top 15px");
assert_roundtrip!(Position::parse, "top 15px left 10px", "left 10px top 15px");
assert_roundtrip!(Position::parse, "left 10% top 15px", "left 10% top 15px");
assert_roundtrip!(Position::parse, "top 15px left 10%", "left 10% top 15px");
assert_roundtrip!(Position::parse, "left top 15px", "left top 15px");
assert_roundtrip!(Position::parse, "top 15px left", "left top 15px");
assert_roundtrip!(Position::parse, "left 10px top", "left 10px top");
assert_roundtrip!(Position::parse, "top left 10px", "left 10px top");
assert_roundtrip!(Position::parse, "right 10px bottom", "right 10px bottom");
assert_roundtrip!(Position::parse, "bottom right 10px", "right 10px bottom");
assert_roundtrip!(Position::parse, "center right 10px", "right 10px center");
assert_roundtrip!(Position::parse, "center bottom 10px", "center bottom 10px");
assert_roundtrip_with_context!(Position::parse, "left 10px top 15px", "left 10px top 15px");
assert_roundtrip_with_context!(Position::parse, "top 15px left 10px", "left 10px top 15px");
assert_roundtrip_with_context!(Position::parse, "left 10% top 15px", "left 10% top 15px");
assert_roundtrip_with_context!(Position::parse, "top 15px left 10%", "left 10% top 15px");
assert_roundtrip_with_context!(Position::parse, "left top 15px", "left top 15px");
assert_roundtrip_with_context!(Position::parse, "top 15px left", "left top 15px");
assert_roundtrip_with_context!(Position::parse, "left 10px top", "left 10px top");
assert_roundtrip_with_context!(Position::parse, "top left 10px", "left 10px top");
assert_roundtrip_with_context!(Position::parse, "right 10px bottom", "right 10px bottom");
assert_roundtrip_with_context!(Position::parse, "bottom right 10px", "right 10px bottom");
assert_roundtrip_with_context!(Position::parse, "center right 10px", "right 10px center");
assert_roundtrip_with_context!(Position::parse, "center bottom 10px", "center bottom 10px");

// Only horizontal and vertical keywords can have positions
assert!(parse(Position::parse, "center 10px left 15px").is_err());
@@ -3,11 +3,13 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use cssparser::{Parser, ToCss};
use media_queries::CSSErrorReporterTest;
use selectors::parser::SelectorList;
use style::parser::ParserContext;
use style::selector_parser::{SelectorImpl, SelectorParser};
use style::stylesheets::{Origin, Namespaces};

fn parse(input: &mut Parser) -> Result<SelectorList<SelectorImpl>, ()> {
fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SelectorList<SelectorImpl>, ()> {
let mut ns = Namespaces::default();
ns.prefixes.insert("svg".into(), ns!(svg));
let parser = SelectorParser {
@@ -19,8 +21,8 @@ fn parse(input: &mut Parser) -> Result<SelectorList<SelectorImpl>, ()> {

#[test]
fn test_selectors() {
assert_roundtrip!(parse, "div");
assert_roundtrip!(parse, "svg|circle");
assert_roundtrip!(parse, "p:before", "p::before");
assert_roundtrip!(parse, "[border = \"0\"]:-servo-nonzero-border ~ ::-servo-details-summary");
assert_roundtrip_with_context!(parse, "div");
assert_roundtrip_with_context!(parse, "svg|circle");
assert_roundtrip_with_context!(parse, "p:before", "p::before");
assert_roundtrip_with_context!(parse, "[border = \"0\"]:-servo-nonzero-border ~ ::-servo-details-summary");
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.