5893: Allow running a test as a binary r=matklad a=jonas-schievink

If a test uses `harness = false`, it just contains an `fn main` that is executed via `cargo test`. This adds support for that.

Note though that Cargo doesn't actually tell us whether `harness = false`, so this hint will always show up when you put an `fn main` into an integration test. Normally people shouldn't be doing that if they do use the harness though.

Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
This commit is contained in:
bors[bot] 2020-08-26 17:41:45 +00:00 committed by GitHub
commit 7e012ae8b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 2 deletions

View File

@ -72,7 +72,11 @@ pub(crate) fn runnable_args(
extra_args.push("--nocapture".to_string()); extra_args.push("--nocapture".to_string());
} }
RunnableKind::Bin => { RunnableKind::Bin => {
args.push("run".to_string()); let subcommand = match spec {
Some(CargoTargetSpec { target_kind: TargetKind::Test, .. }) => "test",
_ => "run",
};
args.push(subcommand.to_string());
if let Some(spec) = spec { if let Some(spec) = spec {
spec.push_to(&mut args, kind); spec.push_to(&mut args, kind);
} }

View File

@ -1399,7 +1399,10 @@ fn should_skip_target(runnable: &Runnable, cargo_spec: Option<&CargoTargetSpec>)
RunnableKind::Bin => { RunnableKind::Bin => {
// Do not suggest binary run on other target than binary // Do not suggest binary run on other target than binary
match &cargo_spec { match &cargo_spec {
Some(spec) => !matches!(spec.target_kind, TargetKind::Bin | TargetKind::Example), Some(spec) => !matches!(
spec.target_kind,
TargetKind::Bin | TargetKind::Example | TargetKind::Test
),
None => true, None => true,
} }
} }