Make css-properties.json checking a proper unit test.

This commit is contained in:
Simon Sapin 2016-04-26 16:05:24 +02:00
parent cb42be9827
commit a3b271266c
5 changed files with 57 additions and 24 deletions

View file

@ -2071,6 +2071,7 @@ dependencies = [
"euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1", "msg 0.0.1",
"plugins 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)", "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)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1", "style 0.0.1",

View file

@ -14,8 +14,6 @@ import re
import sys import sys
import os import os
import os.path as path import os.path as path
import subprocess
import json
from collections import OrderedDict from collections import OrderedDict
from time import time from time import time
@ -141,8 +139,6 @@ class MachCommands(CommandBase):
@CommandArgument('test_name', nargs=argparse.REMAINDER, @CommandArgument('test_name', nargs=argparse.REMAINDER,
help="Only run tests that match this pattern or file path") help="Only run tests that match this pattern or file path")
def test_unit(self, test_name=None, package=None): def test_unit(self, test_name=None, package=None):
check_css_properties_json(self.context.topdir)
if test_name is None: if test_name is None:
test_name = [] test_name = []
@ -657,23 +653,3 @@ testing/web-platform/mozilla/tests for Servo-only tests""" % reference_path)
if editor: if editor:
proc.wait() 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")

View file

@ -30,3 +30,4 @@ euclid = {version = "0.6.4", features = ["plugins"]}
selectors = {version = "0.5", features = ["heap_size"]} selectors = {version = "0.5", features = ["heap_size"]}
string_cache = {version = "0.2.12", features = ["heap_size"]} string_cache = {version = "0.2.12", features = ["heap_size"]}
url = {version = "1.0.0", features = ["heap_size"]} url = {version = "1.0.0", features = ["heap_size"]}
rustc-serialize = "0.3"

View file

@ -10,6 +10,7 @@ extern crate app_units;
extern crate cssparser; extern crate cssparser;
extern crate euclid; extern crate euclid;
extern crate msg; extern crate msg;
extern crate rustc_serialize;
extern crate selectors; extern crate selectors;
#[macro_use(atom, ns)] extern crate string_cache; #[macro_use(atom, ns)] extern crate string_cache;
extern crate style; extern crate style;
@ -20,6 +21,7 @@ extern crate util;
#[cfg(test)] mod attr; #[cfg(test)] mod attr;
#[cfg(test)] mod logical_geometry; #[cfg(test)] mod logical_geometry;
#[cfg(test)] mod media_queries; #[cfg(test)] mod media_queries;
#[cfg(test)] mod properties;
#[cfg(test)] mod stylesheets; #[cfg(test)] mod stylesheets;
#[cfg(test)] mod viewport; #[cfg(test)] mod viewport;

View file

@ -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()
}