Update reftest runner for new Rust

This commit is contained in:
Keegan McAllister 2013-10-30 19:46:07 -07:00 committed by Jack Moffitt
parent cbcd04ffa8
commit 67baffe748

View file

@ -11,11 +11,12 @@ extern mod std;
extern mod extra;
use std::cell::Cell;
use std::io;
use std::rt::io;
use std::rt::io::file;
use std::rt::io::Reader;
use std::os;
use std::run;
use extra::digest::Digest;
use extra::sha1::Sha1;
use std::str;
use extra::test::{DynTestName, DynTestFn, TestDesc, TestOpts, TestDescAndFn};
use extra::test::run_tests_console;
@ -55,15 +56,17 @@ struct Reftest {
kind: ReftestKind,
left: ~str,
right: ~str,
id: uint,
}
fn parse_lists(filenames: &[~str]) -> ~[TestDescAndFn] {
let mut tests: ~[TestDescAndFn] = ~[];
let mut next_id = 0;
for file in filenames.iter() {
let file_path = Path::new(file.clone());
let contents = match io::read_whole_file_str(&file_path) {
Ok(x) => x,
Err(s) => fail!(s)
let contents = match file::open(&file_path, io::Open, io::Read) {
Some(mut f) => str::from_utf8(f.read_to_end()),
None => fail!("Could not open file")
};
for line in contents.line_iter() {
@ -89,8 +92,11 @@ fn parse_lists(filenames: &[~str]) -> ~[TestDescAndFn] {
kind: kind,
left: file_left,
right: file_right,
id: next_id,
};
next_id += 1;
tests.push(make_test(reftest));
}
}
@ -113,11 +119,8 @@ fn make_test(reftest: Reftest) -> TestDescAndFn {
}
fn check_reftest(reftest: Reftest) {
let id = gen_id(&reftest);
let left_filename = format!("/tmp/{:s}-left.png", id);
let right_filename = format!("/tmp/{:s}-right.png", id);
let left_path = Path::new(left_filename.clone());
let right_path = Path::new(right_filename.clone());
let left_filename = format!("/tmp/servo-reftest-{:06u}-left.png", reftest.id);
let right_filename = format!("/tmp/servo-reftest-{:06u}-right.png", reftest.id);
let args = ~[~"-o", left_filename.clone(), reftest.left.clone()];
let mut process = run::Process::new("./servo", args, run::ProcessOptions::new());
@ -130,42 +133,12 @@ fn check_reftest(reftest: Reftest) {
// assert!(retval == 0);
// check the pngs are bit equal
let left_sha = calc_hash(&left_path);
os::remove_file(&left_path);
let args = ~[left_filename.clone(), right_filename.clone()];
let mut process = run::Process::new("cmp", args, run::ProcessOptions::new());
let retval = process.finish();
let right_sha = calc_hash(&right_path);
os::remove_file(&right_path);
assert!(left_sha.is_some());
assert!(right_sha.is_some());
match reftest.kind {
Same => assert!(left_sha == right_sha),
Different => assert!(left_sha != right_sha),
}
}
fn gen_id(reftest: &Reftest) -> ~str {
let mut sha = Sha1::new();
match reftest.kind {
Same => sha.input_str("=="),
Different => sha.input_str("!="),
}
sha.input_str(reftest.left);
sha.input_str(reftest.right);
sha.result_str()
}
fn calc_hash(path: &Path) -> Option<~str> {
match io::file_reader(path) {
Err(*) => None,
Ok(reader) => {
let mut sha = Sha1::new();
loop {
let bytes = reader.read_bytes(4096);
sha.input(bytes);
if bytes.len() < 4096 { break; }
}
Some(sha.result_str())
}
Same => assert!(retval == 0),
Different => assert!(retval != 0),
}
}