Rename RunnableTest to TestThreadArgs and inline its methods
This commit is contained in:
@@ -107,23 +107,33 @@ fn spawn_test_thread(
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let runnable_test = RunnableTest::new(test);
|
let args = TestThreadArgs {
|
||||||
|
config: Arc::clone(&test.config),
|
||||||
|
testpaths: test.testpaths.clone(),
|
||||||
|
revision: test.revision.clone(),
|
||||||
|
};
|
||||||
let should_panic = test.desc.should_panic;
|
let should_panic = test.desc.should_panic;
|
||||||
let run_test = move || run_test_inner(id, should_panic, runnable_test, completion_tx);
|
let run_test = move || test_thread_main(id, should_panic, args, completion_tx);
|
||||||
|
|
||||||
let thread_builder = thread::Builder::new().name(test.desc.name.clone());
|
let thread_builder = thread::Builder::new().name(test.desc.name.clone());
|
||||||
let join_handle = thread_builder.spawn(run_test).unwrap();
|
let join_handle = thread_builder.spawn(run_test).unwrap();
|
||||||
Some(join_handle)
|
Some(join_handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TestThreadArgs {
|
||||||
|
config: Arc<Config>,
|
||||||
|
testpaths: TestPaths,
|
||||||
|
revision: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
/// Runs a single test, within the dedicated thread spawned by the caller.
|
/// Runs a single test, within the dedicated thread spawned by the caller.
|
||||||
fn run_test_inner(
|
fn test_thread_main(
|
||||||
id: TestId,
|
id: TestId,
|
||||||
should_panic: ShouldPanic,
|
should_panic: ShouldPanic,
|
||||||
runnable_test: RunnableTest,
|
args: TestThreadArgs,
|
||||||
completion_sender: mpsc::Sender<TestCompletion>,
|
completion_sender: mpsc::Sender<TestCompletion>,
|
||||||
) {
|
) {
|
||||||
let capture = CaptureKind::for_config(&runnable_test.config);
|
let capture = CaptureKind::for_config(&args.config);
|
||||||
|
|
||||||
// Install a panic-capture buffer for use by the custom panic hook.
|
// Install a panic-capture buffer for use by the custom panic hook.
|
||||||
if capture.should_set_panic_hook() {
|
if capture.should_set_panic_hook() {
|
||||||
@@ -133,7 +143,24 @@ fn run_test_inner(
|
|||||||
let stdout = capture.stdout();
|
let stdout = capture.stdout();
|
||||||
let stderr = capture.stderr();
|
let stderr = capture.stderr();
|
||||||
|
|
||||||
let panic_payload = panic::catch_unwind(move || runnable_test.run(stdout, stderr)).err();
|
// Run the test, catching any panics so that we can gracefully report
|
||||||
|
// failure (or success).
|
||||||
|
//
|
||||||
|
// FIXME(Zalathar): Ideally we would report test failures with `Result`,
|
||||||
|
// and use panics only for bugs within compiletest itself, but that would
|
||||||
|
// require a major overhaul of error handling in the test runners.
|
||||||
|
let panic_payload = panic::catch_unwind(|| {
|
||||||
|
__rust_begin_short_backtrace(|| {
|
||||||
|
crate::runtest::run(
|
||||||
|
&args.config,
|
||||||
|
stdout,
|
||||||
|
stderr,
|
||||||
|
&args.testpaths,
|
||||||
|
args.revision.as_deref(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.err();
|
||||||
|
|
||||||
if let Some(panic_buf) = panic_hook::take_capture_buf() {
|
if let Some(panic_buf) = panic_hook::take_capture_buf() {
|
||||||
let panic_buf = panic_buf.lock().unwrap_or_else(|e| e.into_inner());
|
let panic_buf = panic_buf.lock().unwrap_or_else(|e| e.into_inner());
|
||||||
@@ -207,33 +234,6 @@ impl CaptureKind {
|
|||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||||
struct TestId(usize);
|
struct TestId(usize);
|
||||||
|
|
||||||
struct RunnableTest {
|
|
||||||
config: Arc<Config>,
|
|
||||||
testpaths: TestPaths,
|
|
||||||
revision: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RunnableTest {
|
|
||||||
fn new(test: &CollectedTest) -> Self {
|
|
||||||
let config = Arc::clone(&test.config);
|
|
||||||
let testpaths = test.testpaths.clone();
|
|
||||||
let revision = test.revision.clone();
|
|
||||||
Self { config, testpaths, revision }
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run(&self, stdout: &dyn ConsoleOut, stderr: &dyn ConsoleOut) {
|
|
||||||
__rust_begin_short_backtrace(|| {
|
|
||||||
crate::runtest::run(
|
|
||||||
&self.config,
|
|
||||||
stdout,
|
|
||||||
stderr,
|
|
||||||
&self.testpaths,
|
|
||||||
self.revision.as_deref(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Fixed frame used to clean the backtrace with `RUST_BACKTRACE=1`.
|
/// Fixed frame used to clean the backtrace with `RUST_BACKTRACE=1`.
|
||||||
#[inline(never)]
|
#[inline(never)]
|
||||||
fn __rust_begin_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
|
fn __rust_begin_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
|
||||||
|
|||||||
Reference in New Issue
Block a user