diff --git a/src/test/harness/contenttest/contenttest.rs b/src/test/harness/contenttest/contenttest.rs index 0815cf439e0..db8f2bfd3ca 100644 --- a/src/test/harness/contenttest/contenttest.rs +++ b/src/test/harness/contenttest/contenttest.rs @@ -8,11 +8,15 @@ // except according to those terms. extern mod std; +extern mod extra; -use std::test::{TestOpts, run_tests_console, TestDesc}; -use std::getopts::{getopts, reqopt, opt_str, fail_str}; -use os::list_dir_path; +use extra::test::{TestOpts, run_tests_console, TestDesc, TestDescAndFn, DynTestFn, DynTestName}; +use extra::getopts::{getopts, reqopt, opt_str, fail_str}; +use std::{os, run, io, str, vec}; +use std::cell::Cell; +use std::os::list_dir_path; +#[deriving(Clone)] struct Config { source_dir: ~str, filter: Option<~str> @@ -21,63 +25,68 @@ struct Config { fn main() { let args = os::args(); let config = parse_config(args); - let opts = test_options(config); + let opts = test_options(config.clone()); let tests = find_tests(config); run_tests_console(&opts, tests); } fn parse_config(args: ~[~str]) -> Config { let args = args.tail(); - let opts = ~[reqopt(~"source-dir")]; + let opts = ~[reqopt("source-dir")]; let matches = match getopts(args, opts) { Ok(m) => m, - Err(f) => fail fail_str(f) + Err(f) => fail!(fail_str(f)) }; Config { - source_dir: opt_str(matches, ~"source-dir"), + source_dir: opt_str(&matches, "source-dir"), filter: if matches.free.is_empty() { None } else { - Some(matches.free.head()) + Some((*matches.free.head()).clone()) } } } fn test_options(config: Config) -> TestOpts { - { + TestOpts { filter: config.filter, run_ignored: false, + run_tests: true, + run_benchmarks: false, + save_results: None, + compare_results: None, logfile: None } } -fn find_tests(config: Config) -> ~[TestDesc] { +fn find_tests(config: Config) -> ~[TestDescAndFn] { let all_files = list_dir_path(&Path(config.source_dir)); - let html_files = all_files.filter( |file| file.to_str().ends_with(".html") ); - return html_files.map(|file| make_test(config, (*file).to_str()) ); + let html_files = vec::filter(all_files, |file| file.to_str().ends_with(".html") ); + return html_files.map(|file| make_test((*file).to_str()) ); } -fn make_test(config: Config, file: ~str) -> TestDesc { - { - name: file, - testfn: fn~() { run_test(config, file) }, - ignore: false, - should_fail: false +fn make_test(file: ~str) -> TestDescAndFn { + let f = Cell::new(file.clone()); + TestDescAndFn { + desc: TestDesc { + name: DynTestName(file), + ignore: false, + should_fail: false + }, + testfn: DynTestFn(|| { run_test(f.take()) }) } } -fn run_test(config: Config, file: ~str) { +fn run_test(file: ~str) { let infile = ~"file://" + os::make_absolute(&Path(file)).to_str(); - let res = run::program_output("./servo", ~[infile]); - io::print(res.out); - do str::split_char_each(res.out, '\n') |line| { + let res = run::process_output("./servo", [infile]); + let out = str::from_bytes(res.output); + io::print(out); + let lines: ~[&str] = out.split_iter('\n').collect(); + for lines.iter().advance |&line| { if line.contains("TEST-UNEXPECTED-FAIL") { - fail str::from_slice(line); + fail!(line); } - true } } - -fn render_servo(config: Config, file: ~str) { -}