aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-08-20 11:28:33 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-08-20 11:28:33 +1000
commitea3219e5d70cde58b26834c36e0e51dffaa393c0 (patch)
tree446617ded1c3f3b8fd5d19295031e06220645376
parent80c001b2f00fa5982ec896d4a19fd6311a3ece97 (diff)
downloadservo-ea3219e5d70cde58b26834c36e0e51dffaa393c0.tar.gz
servo-ea3219e5d70cde58b26834c36e0e51dffaa393c0.zip
Reftest harness walks directory and appends tests for all manifest files
it finds. This is a first step towards importing some of the css-wg reftests.
-rw-r--r--mk/check.mk4
-rw-r--r--src/test/harness/reftest/reftest.rs34
2 files changed, 28 insertions, 10 deletions
diff --git a/mk/check.mk b/mk/check.mk
index 0431ac6f190..1632ca1d5ff 100644
--- a/mk/check.mk
+++ b/mk/check.mk
@@ -86,12 +86,12 @@ check-servo: $(foreach lib_crate,$(SERVO_LIB_CRATES),check-servo-$(lib_crate)) s
.PHONY: check-ref-cpu
check-ref-cpu: reftest
@$(call E, check: reftests with CPU rendering)
- $(Q)./reftest cpu $(S)src/test/ref/basic.list $(TESTNAME)
+ $(Q)./reftest cpu $(S)src/test/ref $(TESTNAME)
.PHONY: check-ref-gpu
check-ref-gpu: reftest
@$(call E, check: reftests with GPU rendering)
- $(Q)./reftest gpu $(S)src/test/ref/basic.list $(TESTNAME)
+ $(Q)./reftest gpu $(S)src/test/ref $(TESTNAME)
.PHONY: check-ref
check-ref: check-ref-cpu check-ref-gpu
diff --git a/src/test/harness/reftest/reftest.rs b/src/test/harness/reftest/reftest.rs
index ce3aa4f56f6..6046cd62483 100644
--- a/src/test/harness/reftest/reftest.rs
+++ b/src/test/harness/reftest/reftest.rs
@@ -12,6 +12,7 @@ extern crate std;
extern crate test;
extern crate regex;
+use std::ascii::StrAsciiExt;
use std::io;
use std::io::{File, Reader, Command};
use std::io::process::ExitStatus;
@@ -32,10 +33,10 @@ fn main() {
let harness_args = parts.next().unwrap(); // .split() is never empty
let servo_args = parts.next().unwrap_or(&[]);
- let (render_mode_string, manifest, testname) = match harness_args {
- [] | [_] => fail!("USAGE: cpu|gpu manifest [testname regex]"),
- [ref render_mode_string, ref manifest] => (render_mode_string, manifest, None),
- [ref render_mode_string, ref manifest, ref testname, ..] => (render_mode_string, manifest, Some(Regex::new(testname.as_slice()).unwrap())),
+ let (render_mode_string, base_path, testname) = match harness_args {
+ [] | [_] => fail!("USAGE: cpu|gpu base_path [testname regex]"),
+ [ref render_mode_string, ref base_path] => (render_mode_string, base_path, None),
+ [ref render_mode_string, ref base_path, ref testname, ..] => (render_mode_string, base_path, Some(Regex::new(testname.as_slice()).unwrap())),
};
let render_mode = match render_mode_string.as_slice() {
@@ -44,7 +45,24 @@ fn main() {
_ => fail!("First argument must specify cpu or gpu as rendering mode")
};
- let tests = parse_lists(manifest, servo_args, render_mode);
+ let mut all_tests = vec!();
+ println!("Scanning {} for manifests\n", base_path);
+
+ for file in io::fs::walk_dir(&Path::new(base_path.as_slice())).unwrap() {
+ let maybe_extension = file.extension_str();
+ match maybe_extension {
+ Some(extension) => {
+ if extension.to_ascii_lower().as_slice() == "list" && file.is_file() {
+ let manifest = file.as_str().unwrap();
+ let tests = parse_lists(manifest, servo_args, render_mode);
+ println!("\t{} [{} tests]", manifest, tests.len());
+ all_tests.push_all_move(tests);
+ }
+ }
+ _ => {}
+ }
+ }
+
let test_opts = TestOpts {
filter: testname,
run_ignored: false,
@@ -59,7 +77,7 @@ fn main() {
color: AutoColor
};
- match run_tests_console(&test_opts, tests) {
+ match run_tests_console(&test_opts, all_tests) {
Ok(false) => os::set_exit_status(1), // tests failed
Err(_) => os::set_exit_status(2), // I/O-related failure
_ => (),
@@ -89,10 +107,10 @@ struct TestLine<'a> {
file_right: &'a str,
}
-fn parse_lists(file: &String, servo_args: &[String], render_mode: RenderMode) -> Vec<TestDescAndFn> {
+fn parse_lists(file: &str, servo_args: &[String], render_mode: RenderMode) -> Vec<TestDescAndFn> {
let mut tests = Vec::new();
let mut next_id = 0;
- let file_path = Path::new(file.clone());
+ let file_path = Path::new(file);
let contents = File::open_mode(&file_path, io::Open, io::Read)
.and_then(|mut f| f.read_to_string())
.ok().expect("Could not read file");