From bcc0ae631611e6fa91325b146f50f67ce3e35520 Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Wed, 11 Dec 2013 14:08:38 -0800 Subject: [PATCH 1/4] contenttest: Print stderr --- src/test/harness/contenttest/contenttest.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/harness/contenttest/contenttest.rs b/src/test/harness/contenttest/contenttest.rs index 1b0defe8cc0..562ff62589b 100644 --- a/src/test/harness/contenttest/contenttest.rs +++ b/src/test/harness/contenttest/contenttest.rs @@ -16,7 +16,7 @@ use std::{os, str}; use std::cell::Cell; use std::os::list_dir_path; use std::rt::io::Reader; -use std::rt::io::process::{Process, ProcessConfig, Ignored, CreatePipe}; +use std::rt::io::process::{Process, ProcessConfig, Ignored, CreatePipe, InheritFd}; #[deriving(Clone)] struct Config { @@ -88,14 +88,15 @@ fn run_test(file: ~str) { let path = os::make_absolute(&Path::new(file)); // FIXME (#1094): not the right way to transform a path let infile = ~"file://" + path.display().to_str(); - let create_pipe = CreatePipe(true, false); // rustc #10228 + let stdout = CreatePipe(true, false); // rustc #10228 + let stderr = InheritFd(2); let config = ProcessConfig { program: "./servo", args: [~"-z", infile.clone()], env: None, cwd: None, - io: [Ignored, create_pipe, Ignored] + io: [Ignored, stdout, stderr] }; let mut prc = Process::new(config).unwrap(); From e349bfadb7138d6e8726175a25f6b39933ee227a Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Wed, 11 Dec 2013 15:10:03 -0800 Subject: [PATCH 2/4] Kill Servo instead of displaying about:failure when running content tests Fixes #1380. --- src/components/gfx/opts.rs | 3 +++ src/components/main/pipeline.rs | 4 ++++ src/test/harness/contenttest/contenttest.rs | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/gfx/opts.rs b/src/components/gfx/opts.rs index 8ed3e9aa50e..ca9c9cc815b 100644 --- a/src/components/gfx/opts.rs +++ b/src/components/gfx/opts.rs @@ -39,6 +39,7 @@ pub struct Opts { output_file: Option<~str>, headless: bool, + hard_fail: bool, } fn print_usage(app: &str, opts: &[groups::OptGroup]) { @@ -59,6 +60,7 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { groups::optflagopt("p", "profile", "Profiler flag and output interval", "10"), groups::optflag("x", "exit", "Exit after load flag"), groups::optflag("z", "headless", "Headless mode"), + groups::optflag("f", "hard-fail", "Exit on task failure instead of displaying about:failure"), groups::optflag("h", "help", "Print this message") ]; @@ -127,5 +129,6 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { exit_after_load: opt_match.opt_present("x"), output_file: opt_match.opt_str("o"), headless: opt_match.opt_present("z"), + hard_fail: opt_match.opt_present("f"), } } diff --git a/src/components/main/pipeline.rs b/src/components/main/pipeline.rs index 7b619de378a..77ac8741787 100644 --- a/src/components/main/pipeline.rs +++ b/src/components/main/pipeline.rs @@ -100,6 +100,7 @@ impl Pipeline { // Wrap task creation within a supervised task so that failure will // only tear down those tasks instead of ours. + let hard_fail = opts.hard_fail; let failure_chan = constellation_chan.clone(); let mut supervised_task = task::task(); let task_port = supervised_task.future_result(); @@ -139,6 +140,9 @@ impl Pipeline { match task_port.recv() { Ok(*) => (), Err(*) => { + if hard_fail { + fail!("Pipeline failed in hard-fail mode"); + } failure_chan.send(FailureMsg(id, subpage_id)); } } diff --git a/src/test/harness/contenttest/contenttest.rs b/src/test/harness/contenttest/contenttest.rs index 562ff62589b..bee7e175f4f 100644 --- a/src/test/harness/contenttest/contenttest.rs +++ b/src/test/harness/contenttest/contenttest.rs @@ -93,7 +93,7 @@ fn run_test(file: ~str) { let config = ProcessConfig { program: "./servo", - args: [~"-z", infile.clone()], + args: [~"-z", ~"-f", infile.clone()], env: None, cwd: None, io: [Ignored, stdout, stderr] From 8891587901f41c850a29f3bfa3453bc80880b694 Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Wed, 11 Dec 2013 15:16:01 -0800 Subject: [PATCH 3/4] contenttest: Fail if Servo exits with non-zero status Remove "let stdout" to make the borrow checker happy. --- src/test/harness/contenttest/contenttest.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/harness/contenttest/contenttest.rs b/src/test/harness/contenttest/contenttest.rs index bee7e175f4f..e7548b24610 100644 --- a/src/test/harness/contenttest/contenttest.rs +++ b/src/test/harness/contenttest/contenttest.rs @@ -100,10 +100,9 @@ fn run_test(file: ~str) { }; let mut prc = Process::new(config).unwrap(); - let stdout = prc.io[1].get_mut_ref(); let mut output = ~[]; loop { - let byte = stdout.read_byte(); + let byte = prc.io[1].get_mut_ref().read_byte(); match byte { Some(byte) => { print!("{}", byte as char); @@ -120,4 +119,9 @@ fn run_test(file: ~str) { fail!(line); } } + + let retval = prc.wait(); + if retval != 0 { + fail!("Servo exited with non-zero status {}", retval); + } } From f0613184cfa410215724966a9a476dc0eeebdbbe Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Wed, 11 Dec 2013 15:26:05 -0800 Subject: [PATCH 4/4] Don't clear buffers if we have no native graphics context Fixes ./servo -z for content that calls window.close(), such as content tests. --- src/components/gfx/render_task.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs index e25c1354bba..00c30a51958 100644 --- a/src/components/gfx/render_task.rs +++ b/src/components/gfx/render_task.rs @@ -174,7 +174,9 @@ impl RenderTask { render_task.start(); // Destroy all the buffers. - render_task.buffer_map.clear(native_graphics_context!(render_task)); + render_task.native_graphics_context.as_ref().map(|ctx| + render_task.buffer_map.clear(ctx) + ); } }