Make contenttest harness build again.

This commit is contained in:
Josh Matthews 2013-07-09 12:53:34 -04:00
parent 32c147fbde
commit 27b059b062

View file

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