Rework handling of --tests and --benches with implied targets.

This commit is contained in:
Eric Huss 2017-10-20 14:34:21 -07:00
parent 0acc67ca47
commit 3dd21d80ba
5 changed files with 69 additions and 37 deletions

View file

@ -111,8 +111,7 @@ pub fn execute(options: Options, config: &mut Config) -> CliResult {
&options.flag_exclude,
&options.flag_package)?;
let test = options.flag_tests ||
match options.flag_profile.as_ref().map(|t| &t[..]) {
let test = match options.flag_profile.as_ref().map(|t| &t[..]) {
Some("test") => true,
None => false,
Some(profile) => {
@ -132,8 +131,8 @@ pub fn execute(options: Options, config: &mut Config) -> CliResult {
spec: spec,
mode: ops::CompileMode::Check{test:test},
release: options.flag_release,
filter: ops::CompileFilter::new(options.flag_lib || options.flag_tests,
&options.flag_bin, options.flag_bins || options.flag_tests,
filter: ops::CompileFilter::new(options.flag_lib,
&options.flag_bin, options.flag_bins,
&options.flag_test, options.flag_tests,
&options.flag_example, options.flag_examples,
&options.flag_bench, options.flag_benches,

View file

@ -652,10 +652,22 @@ fn generate_targets<'a>(pkg: &'a Package,
pkg, bins, "bin", Target::is_bin, profile)?);
targets.append(&mut propose_indicated_targets(
pkg, examples, "example", Target::is_example, profile)?);
// If --benches was specified, add all targets that would be
// generated by `cargo bench`.
let bench_filter = match benches {
FilterRule::All => Target::benched,
FilterRule::Just(_) => Target::is_bench
};
targets.append(&mut propose_indicated_targets(
pkg, tests, "test", Target::is_test, test_profile)?);
pkg, benches, "bench", bench_filter, bench_profile)?);
// If --tests was specified, add all targets that would be
// generated by `cargo test`.
let test_filter = match tests {
FilterRule::All => Target::tested,
FilterRule::Just(_) => Target::is_test
};
targets.append(&mut propose_indicated_targets(
pkg, benches, "bench", Target::is_bench, bench_profile)?);
pkg, tests, "test", test_filter, test_profile)?);
targets
}
};

View file

@ -862,7 +862,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
ret.extend(self.maybe_lib(unit));
// Integration tests/benchmarks require binaries to be built
if unit.profile.test && !unit.profile.check &&
if unit.profile.test &&
(unit.target.is_test() || unit.target.is_bench()) {
ret.extend(unit.pkg.targets().iter().filter(|t| {
let no_required_features = Vec::new();
@ -876,7 +876,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
Unit {
pkg: unit.pkg,
target: t,
profile: self.lib_profile(),
profile: self.lib_or_check_profile(unit, t),
kind: unit.kind.for_target(t),
}
}));

View file

@ -488,9 +488,9 @@ fn check_unit_test_profile() {
.with_stderr_contains("[..]badtext[..]"));
}
// Verify what is checked with various command-line filters.
#[test]
fn check_unit_test_all_tests() {
// Lib unit.
fn check_filters() {
let p = project("foo")
.file("Cargo.toml", SIMPLE_MANIFEST)
.file("src/lib.rs", r#"
@ -533,36 +533,54 @@ fn check_unit_test_all_tests() {
.build();
assert_that(p.cargo("check"),
execs().with_status(0)
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_does_not_contain("unused_noraml_t1")
.with_stderr_does_not_contain("unused_noraml_ex1")
.with_stderr_does_not_contain("unused_noraml_b1")
.with_stderr_does_not_contain("unused_unit_"));
execs().with_status(0)
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_does_not_contain("unused_normal_t1")
.with_stderr_does_not_contain("unused_normal_ex1")
.with_stderr_does_not_contain("unused_normal_b1")
.with_stderr_does_not_contain("unused_unit_"));
p.root().join("target").rm_rf();
assert_that(p.cargo("check").arg("--tests").arg("-v"),
execs().with_status(0)
.with_stderr_contains("[..]unused_unit_lib[..]")
.with_stderr_contains("[..]unused_unit_bin[..]")
.with_stderr_contains("[..]unused_unit_t1[..]")
.with_stderr_does_not_contain("unused_normal_ex1")
.with_stderr_does_not_contain("unused_normal_b1")
.with_stderr_does_not_contain("unused_unit_ex1")
.with_stderr_does_not_contain("unused_unit_b1"));
execs().with_status(0)
.with_stderr_contains("[..] --crate-name foo src[/]lib.rs [..] --test [..]")
.with_stderr_contains("[..] --crate-name foo src[/]lib.rs --crate-type lib [..]")
.with_stderr_contains("[..] --crate-name foo src[/]main.rs [..] --test [..]")
.with_stderr_contains("[..] --crate-name foo src[/]main.rs --crate-type bin [..]")
.with_stderr_contains("[..]unused_unit_lib[..]")
.with_stderr_contains("[..]unused_unit_bin[..]")
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_contains("[..]unused_unit_t1[..]")
.with_stderr_contains("[..]unused_normal_ex1[..]")
.with_stderr_contains("[..]unused_unit_ex1[..]")
.with_stderr_does_not_contain("unused_normal_b1")
.with_stderr_does_not_contain("unused_unit_b1"));
p.root().join("target").rm_rf();
assert_that(p.cargo("check").arg("--test").arg("t1").arg("-v"),
execs().with_status(0)
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_contains("[..]unused_unit_t1[..]")
.with_stderr_does_not_contain("unused_unit_lib")
.with_stderr_does_not_contain("unused_unit_bin")
.with_stderr_does_not_contain("unused_normal_ex1")
.with_stderr_does_not_contain("unused_normal_b1")
.with_stderr_does_not_contain("unused_unit_ex1")
.with_stderr_does_not_contain("unused_unit_b1"));
p.root().join("target").rm_rf();
assert_that(p.cargo("check").arg("--all-targets").arg("-v"),
execs().with_status(0)
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_contains("[..]unused_normal_t1[..]")
.with_stderr_contains("[..]unused_normal_ex1[..]")
.with_stderr_contains("[..]unused_normal_b1[..]")
.with_stderr_contains("[..]unused_unit_b1[..]")
.with_stderr_contains("[..]unused_unit_t1[..]")
.with_stderr_does_not_contain("unused_unit_lib")
.with_stderr_does_not_contain("unused_unit_bin")
.with_stderr_does_not_contain("unused_unit_ex1"));
execs().with_status(0)
.with_stderr_contains("[..]unused_normal_lib[..]")
.with_stderr_contains("[..]unused_normal_bin[..]")
.with_stderr_contains("[..]unused_normal_t1[..]")
.with_stderr_contains("[..]unused_normal_ex1[..]")
.with_stderr_contains("[..]unused_normal_b1[..]")
.with_stderr_contains("[..]unused_unit_b1[..]")
.with_stderr_contains("[..]unused_unit_t1[..]")
.with_stderr_contains("[..]unused_unit_lib[..]")
.with_stderr_contains("[..]unused_unit_bin[..]")
.with_stderr_contains("[..]unused_unit_ex1[..]"));
}
#[test]

View file

@ -1203,7 +1203,9 @@ fn test_run_implicit_test_target() {
.with_stderr(format!("\
[COMPILING] foo v0.0.1 ({dir})
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] target[/]debug[/]deps[/]mytest-[..][EXE]", dir = prj.url()))
[RUNNING] target[/]debug[/]deps[/]mybin-[..][EXE]
[RUNNING] target[/]debug[/]deps[/]mytest-[..][EXE]
[RUNNING] target[/]debug[/]examples[/]myexm-[..][EXE]", dir = prj.url()))
.with_stdout_contains("test test_in_test ... ok"));
}
@ -1233,6 +1235,7 @@ fn test_run_implicit_bench_target() {
.with_stderr(format!("\
[COMPILING] foo v0.0.1 ({dir})
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] target[/]debug[/]deps[/]mybin-[..][EXE]
[RUNNING] target[/]debug[/]deps[/]mybench-[..][EXE]", dir = prj.url()))
.with_stdout_contains("test test_in_bench ... ok"));
}