diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 620ec07eb28..d09f61f623e 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -2071,6 +2071,7 @@ dependencies = [ "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index f0eccee59af..ee6fbd05837 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -14,8 +14,6 @@ import re import sys import os import os.path as path -import subprocess -import json from collections import OrderedDict from time import time @@ -141,8 +139,6 @@ class MachCommands(CommandBase): @CommandArgument('test_name', nargs=argparse.REMAINDER, help="Only run tests that match this pattern or file path") def test_unit(self, test_name=None, package=None): - check_css_properties_json(self.context.topdir) - if test_name is None: test_name = [] @@ -657,23 +653,3 @@ testing/web-platform/mozilla/tests for Servo-only tests""" % reference_path) if editor: proc.wait() - - -def check_css_properties_json(topdir): - print("Testing generation of css-properties.json...") - filename = path.join(topdir, "target", "doc", "servo", "css-properties.json") - - if path.exists(filename): - os.remove(filename) - subprocess.check_call([ - sys.executable, - path.join(topdir, "components", "style", "properties", "build.py"), - "servo", - "html", - ]) - properties = json.load(open(filename)) - - assert len(properties) >= 100 - assert "margin-top" in properties - assert "margin" in properties - print("OK") diff --git a/tests/unit/style/Cargo.toml b/tests/unit/style/Cargo.toml index 0b6ffdf843b..24bb07c95b7 100644 --- a/tests/unit/style/Cargo.toml +++ b/tests/unit/style/Cargo.toml @@ -30,3 +30,4 @@ euclid = {version = "0.6.4", features = ["plugins"]} selectors = {version = "0.5", features = ["heap_size"]} string_cache = {version = "0.2.12", features = ["heap_size"]} url = {version = "1.0.0", features = ["heap_size"]} +rustc-serialize = "0.3" diff --git a/tests/unit/style/lib.rs b/tests/unit/style/lib.rs index 9869ff4af72..7f6a1c11b7f 100644 --- a/tests/unit/style/lib.rs +++ b/tests/unit/style/lib.rs @@ -10,6 +10,7 @@ extern crate app_units; extern crate cssparser; extern crate euclid; extern crate msg; +extern crate rustc_serialize; extern crate selectors; #[macro_use(atom, ns)] extern crate string_cache; extern crate style; @@ -20,6 +21,7 @@ extern crate util; #[cfg(test)] mod attr; #[cfg(test)] mod logical_geometry; #[cfg(test)] mod media_queries; +#[cfg(test)] mod properties; #[cfg(test)] mod stylesheets; #[cfg(test)] mod viewport; diff --git a/tests/unit/style/properties.rs b/tests/unit/style/properties.rs new file mode 100644 index 00000000000..9f4c3f08af0 --- /dev/null +++ b/tests/unit/style/properties.rs @@ -0,0 +1,53 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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 rustc_serialize::json::Json; +use std::env; +use std::fs::{File, remove_file}; +use std::path::Path; +use std::process::Command; + +#[test] +fn properties_list_json() { + let top = Path::new(file!()).parent().unwrap().join("..").join("..").join(".."); + let json = top.join("target").join("doc").join("servo").join("css-properties.json"); + if json.exists() { + remove_file(&json).unwrap() + } + let python = env::var("PYTHON").ok().unwrap_or_else(find_python); + let script = top.join("components").join("style").join("properties").join("build.py"); + let status = Command::new(python) + .arg(&script) + .arg("servo") + .arg("html") + .status() + .unwrap(); + assert!(status.success()); + let properties = Json::from_reader(&mut File::open(json).unwrap()).unwrap(); + assert!(properties.as_object().unwrap().len() > 100); + assert!(properties.find("margin").is_some()); + assert!(properties.find("margin-top").is_some()); +} + +#[cfg(windows)] +fn find_python() -> String { + if Command::new("python27.exe").arg("--version").output().is_ok() { + return "python27.exe".to_owned(); + } + + if Command::new("python.exe").arg("--version").output().is_ok() { + return "python.exe".to_owned(); + } + + panic!("Can't find python (tried python27.exe and python.exe)! Try fixing PATH or setting the PYTHON env var"); +} + +#[cfg(not(windows))] +fn find_python() -> String { + if Command::new("python2.7").arg("--version").output().unwrap().status.success() { + "python2.7" + } else { + "python" + }.to_owned() +}