mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Update reftest runner for new Rust
This commit is contained in:
parent
cbcd04ffa8
commit
67baffe748
1 changed files with 19 additions and 46 deletions
|
@ -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),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue