Rework handling of --tests and --benches with implied targets.
authorEric Huss <eric@huss.org>
Fri, 20 Oct 2017 21:34:21 +0000 (14:34 -0700)
committerEric Huss <eric@huss.org>
Fri, 20 Oct 2017 21:34:21 +0000 (14:34 -0700)
src/bin/check.rs
src/cargo/ops/cargo_compile.rs
src/cargo/ops/cargo_rustc/context.rs
tests/check.rs
tests/test.rs

index c1b963c373c5c8627296cebab4f1293aab2bb488..8a2ab42dd22067323c37e61d3988ed35636603f9 100644 (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,
index b646afeb026e121e669ea228685388e8ffab72d2..2aabb150b49250803e43b2e37800fa61477f08b6 100644 (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
         }
     };
index 334af3eaa88b025ccc322cbf49814bb38650d055..9e3696787233e08b7f654d35f1f5d714836845bf 100644 (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),
                 }
             }));
index f58348487c1f0dd02220f1329f4b65192fc81cf4..073ee3186eeb43c606aed802ad9b6c55b11df769 100644 (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]
index d657e034228724ebe2f101aff0f8e9f272366b3e..2a454f043c4f6cff7da2282ae7499814ae3dd08e 100644 (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"));
 }