diff --git a/src/cargo/ops/cargo_test.rs b/src/cargo/ops/cargo_test.rs index 1ddf7755fc57..e940571b5bfc 100644 --- a/src/cargo/ops/cargo_test.rs +++ b/src/cargo/ops/cargo_test.rs @@ -149,7 +149,7 @@ fn run_unit_tests( unit: unit.clone(), kind: test_kind, }; - report_test_error(ws, &options.compile_opts, &unit_err, e); + report_test_error(ws, test_args, &options.compile_opts, &unit_err, e); errors.push(unit_err); if !options.no_fail_fast { return Err(CliError::code(code)); @@ -275,7 +275,7 @@ fn run_doc_tests( unit: unit.clone(), kind: TestKind::Doctest, }; - report_test_error(ws, &options.compile_opts, &unit_err, e); + report_test_error(ws, test_args, &options.compile_opts, &unit_err, e); errors.push(unit_err); if !options.no_fail_fast { return Err(CliError::code(code)); @@ -407,6 +407,7 @@ fn no_fail_fast_err( /// Displays an error on the console about a test failure. fn report_test_error( ws: &Workspace<'_>, + test_args: &[&str], opts: &ops::CompileOptions, unit_err: &UnitTestError, test_error: anyhow::Error, @@ -429,4 +430,13 @@ fn report_test_error( } crate::display_error(&err, &mut ws.config().shell()); + + let harness: bool = unit_err.unit.target.harness(); + let nocapture: bool = test_args.contains(&"--nocapture"); + + if !is_simple && harness && !nocapture { + drop(ws.config().shell().note( + "test exited abnormally; to see the full output pass --nocapture to the harness.", + )); + } } diff --git a/tests/testsuite/test.rs b/tests/testsuite/test.rs index 455246b852b1..fa782761628d 100644 --- a/tests/testsuite/test.rs +++ b/tests/testsuite/test.rs @@ -4792,6 +4792,21 @@ error: test failed, to rerun pass `--test t1` [RUNNING] tests/t2.rs (target/debug/deps/t2[..]) error: test failed, to rerun pass `--test t2` +Caused by: + process didn't exit successfully: `[ROOT]/foo/target/debug/deps/t2[..]` (exit [..]: 4) +note: test exited abnormally; to see the full output pass --nocapture to the harness. +", + ) + .with_status(4) + .run(); + + p.cargo("test --test t2 -- --nocapture") + .with_stderr( + "\ +[FINISHED] test [..] +[RUNNING] tests/t2.rs (target/debug/deps/t2[..]) +error: test failed, to rerun pass `--test t2` + Caused by: process didn't exit successfully: `[ROOT]/foo/target/debug/deps/t2[..]` (exit [..]: 4) ", @@ -4823,6 +4838,28 @@ error: test failed, to rerun pass `--test t1` [RUNNING] tests/t2.rs (target/debug/deps/t2[..]) error: test failed, to rerun pass `--test t2` +Caused by: + process didn't exit successfully: `[ROOT]/foo/target/debug/deps/t2[..]` (exit [..]: 4) +note: test exited abnormally; to see the full output pass --nocapture to the harness. +error: 2 targets failed: + `--test t1` + `--test t2` +", + ) + .with_status(101) + .run(); + + p.cargo("test --no-fail-fast -- --nocapture") + .with_stderr( + "\ +[FINISHED] test [..] +[RUNNING] tests/t1.rs (target/debug/deps/t1[..]) +thread 't' panicked at 'this is a normal error', tests/t1[..] +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +error: test failed, to rerun pass `--test t1` +[RUNNING] tests/t2.rs (target/debug/deps/t2[..]) +error: test failed, to rerun pass `--test t2` + Caused by: process didn't exit successfully: `[ROOT]/foo/target/debug/deps/t2[..]` (exit [..]: 4) error: 2 targets failed: