/* 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 https://mozilla.org/MPL/2.0/. */
use serde_json::{
self, Value};
use std::env;
use std::fs::{remove_file, File};
use std::path::Path;
use std::process::Command;
#[test]
fn properties_list_json() {
let top = Path::new(&env::var(
"CARGO_MANIFEST_DIR").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")
.arg(
"regular")
.status()
.unwrap();
assert!(status.success(),
"{:?}", status);
let properties: Value = serde_json::from_reader(File::open(json).unwrap()).unwrap();
assert!(properties.as_object().unwrap().len() >
100);
assert!(properties.as_object().unwrap().contains_key(
"margin"));
assert!(properties.as_object().unwrap().contains_key(
"margin-top"));
}
#[cfg(windows)]
fn find_python() -> String {
if Command::new(
"python2.7.exe")
.arg(
"--version")
.output()
.is_ok()
{
return "python2.7.exe".to_owned();
}
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()
}