From cfc264d981cd430c6b5c80ef9e87473d2eb00f7d Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Mon, 3 Mar 2014 17:23:52 -0800 Subject: [PATCH 1/3] De-duplicate reftest code --- src/test/harness/reftest/reftest.rs | 34 ++++++++++++----------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/test/harness/reftest/reftest.rs b/src/test/harness/reftest/reftest.rs index f9b5201ac52..e4ee78a8590 100644 --- a/src/test/harness/reftest/reftest.rs +++ b/src/test/harness/reftest/reftest.rs @@ -55,8 +55,7 @@ enum ReftestKind { struct Reftest { name: ~str, kind: ReftestKind, - left: ~str, - right: ~str, + files: [~str, ..2], id: uint, } @@ -96,8 +95,7 @@ fn parse_lists(filenames: &[~str]) -> ~[TestDescAndFn] { let reftest = Reftest { name: parts[1] + " / " + parts[2], kind: kind, - left: file_left, - right: file_right, + files: [file_left, file_right], id: next_id, }; @@ -123,23 +121,19 @@ 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 process = Process::new("./servo", args, ProcessOptions::new()).unwrap(); + let retval = process.finish(); + assert!(retval == ExitStatus(0)); + + png::load_png(&from_str::(filename).unwrap()).unwrap() +} + fn check_reftest(reftest: Reftest) { - 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 = ~[~"-f", ~"-o", left_filename.clone(), reftest.left.clone()]; - let mut process = Process::new("./servo", args, ProcessOptions::new()).unwrap(); - let retval = process.finish(); - assert!(retval == ExitStatus(0)); - - let args = ~[~"-f", ~"-o", right_filename.clone(), reftest.right.clone()]; - let mut process = Process::new("./servo", args, ProcessOptions::new()).unwrap(); - let retval = process.finish(); - assert!(retval == ExitStatus(0)); - - // check the pngs are bit equal - let left = png::load_png(&from_str::(left_filename).unwrap()).unwrap(); - let right = png::load_png(&from_str::(right_filename).unwrap()).unwrap(); + let left = capture(&reftest, 0); + let right = capture(&reftest, 1); let pixels: ~[u8] = left.pixels.iter().zip(right.pixels.iter()).map(|(&a, &b)| { if (a as i8 - b as i8 == 0) { From 9a4ac450613b5fff579bbe27d9f91a4858a2bc1e Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Mon, 3 Mar 2014 18:03:02 -0800 Subject: [PATCH 2/3] reftest: Allow passing Servo args after -- --- src/test/harness/reftest/reftest.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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)); From 32cdc2107bfc804a040683d4d63c7fb382cbd210 Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Mon, 3 Mar 2014 18:09:18 -0800 Subject: [PATCH 3/3] Reftest both CPU and GPU rendering Fixes #1179. --- mk/check.mk | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mk/check.mk b/mk/check.mk index 28e7ebee81a..384d4c5ab22 100644 --- a/mk/check.mk +++ b/mk/check.mk @@ -81,8 +81,10 @@ check-servo: $(foreach lib_crate,$(SERVO_LIB_CRATES),check-servo-$(lib_crate)) s .PHONY: check-ref check-ref: reftest - @$(call E, check: reftests) + @$(call E, check: reftests with GPU rendering) $(Q)./reftest $(S)src/test/ref/*.list + @$(call E, check: reftests with CPU rendering) + $(Q)./reftest $(S)src/test/ref/*.list -- -c .PHONY: check-content check-content: contenttest