diff --git a/src/test/harness/reftest/reftest.rs b/src/test/harness/reftest/reftest.rs index e4ee78a8590..c73ff9f167e 100644 --- a/src/test/harness/reftest/reftest.rs +++ b/src/test/harness/reftest/reftest.rs @@ -22,13 +22,16 @@ use extra::test::run_tests_console; fn main() { let args = os::args(); - if args.len() < 2 { - println("error: at least one reftest list must be given"); - os::set_exit_status(1); - return; + let mut parts = args.tail().split(|e| "--" == e.as_slice()); + + let files = parts.next().unwrap(); // .split() is never empty + let servo_args = parts.next().unwrap_or(&[]); + + if files.len() == 0 { + fail!("error: at least one reftest list must be given"); } - let tests = parse_lists(args.tail()); + let tests = parse_lists(files, servo_args); let test_opts = TestOpts { filter: None, run_ignored: false, @@ -57,9 +60,10 @@ struct Reftest { kind: ReftestKind, files: [~str, ..2], id: uint, + servo_args: ~[~str], } -fn parse_lists(filenames: &[~str]) -> ~[TestDescAndFn] { +fn parse_lists(filenames: &[~str], servo_args: &[~str]) -> ~[TestDescAndFn] { let mut tests: ~[TestDescAndFn] = ~[]; let mut next_id = 0; for file in filenames.iter() { @@ -97,6 +101,7 @@ fn parse_lists(filenames: &[~str]) -> ~[TestDescAndFn] { kind: kind, files: [file_left, file_right], id: next_id, + servo_args: servo_args.to_owned(), }; next_id += 1; @@ -123,7 +128,9 @@ fn make_test(reftest: Reftest) -> TestDescAndFn { fn capture(reftest: &Reftest, side: uint) -> png::Image { let filename = format!("/tmp/servo-reftest-{:06u}-{:u}.png", reftest.id, side); - let args = ~[~"-f", ~"-o", filename.clone(), reftest.files[side].clone()]; + let mut args = reftest.servo_args.clone(); + args.push_all_move(~[~"-f", ~"-o", filename.clone(), reftest.files[side].clone()]); + let mut process = Process::new("./servo", args, ProcessOptions::new()).unwrap(); let retval = process.finish(); assert!(retval == ExitStatus(0));