Partially revert change to testing examples.
authorEric Huss <eric@huss.org>
Thu, 3 May 2018 03:17:53 +0000 (20:17 -0700)
committerEric Huss <eric@huss.org>
Thu, 3 May 2018 03:17:53 +0000 (20:17 -0700)
Fixes #5437

I don't think changing the behavior was quite the correct thing to do.  This new behavior is very similar to the old with a few small differences:

```
cargo test
    ORGINAL: Only builds examples.
    NEW: Builds all examples.  Any example with `test` set is tested.

cargo test --tests
    ORIGINAL: Runs all examples as tests.
    NEW: Only runs examples as tests if `test` is set.

cargo test --examples
    ORIGINAL: Runs all examples as tests.
    NEW: (SAME)

cargo test --example foo
    ORIGINAL: Runs the given example as a test.
    NEW: (SAME)

cargo test --all-targets
    ORIGINAL: Runs all examples as tests.
    NEW: (SAME)
```

src/cargo/ops/cargo_compile.rs
tests/testsuite/test.rs

index 594c7b43020f7d7bea96c2225bd0b7fa98ad2c5c..c13ad0a355104474a6ebd86eaa4db33d4328d38f 100644 (file)
@@ -603,7 +603,7 @@ fn generate_targets<'a>(
         };
         let target_mode = match target_mode {
             CompileMode::Test => {
-                if target.is_example() {
+                if target.is_example() && !filter.is_specific() && !target.tested() {
                     // Examples are included as regular binaries to verify
                     // that they compile.
                     CompileMode::Build
index 36c2f9b369eb9435b2f024361f69022eb614104b..c48dbf2bb2c8e6bc1fcd7205b97272616f62807d 100644 (file)
@@ -1721,8 +1721,15 @@ fn test_run_implicit_example_target() {
             authors = []
 
             [[bin]]
-            name="mybin"
-            path="src/mybin.rs"
+            name = "mybin"
+            path = "src/mybin.rs"
+
+            [[example]]
+            name = "myexm1"
+
+            [[example]]
+            name = "myexm2"
+            test = true
         "#,
         )
         .file(
@@ -1733,20 +1740,61 @@ fn test_run_implicit_example_target() {
         .file("tests/mytest.rs", "#[test] fn test_in_test() { }")
         .file("benches/mybench.rs", "#[test] fn test_in_bench() { }")
         .file(
-            "examples/myexm.rs",
-            r#"#[test] fn test_in_exm() { panic!("Don't even test me."); }
-               fn main() { panic!("Don't execute me!"); }"#,
+            "examples/myexm1.rs",
+            "#[test] fn test_in_exm() { }
+               fn main() { panic!(\"Don't execute me!\"); }",
+        )
+        .file(
+            "examples/myexm2.rs",
+            "#[test] fn test_in_exm() { }
+               fn main() { panic!(\"Don't execute me!\"); }",
         )
         .build();
 
+    // Compiles myexm1 as normal, but does not run it.
     assert_that(
-        prj.cargo("test").arg("--examples"),
-        execs().with_status(0).with_stderr(format!(
-            "\
-[COMPILING] foo v0.0.1 ({dir})
-[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]",
-            dir = prj.url()
-        )),
+        prj.cargo("test -v"),
+        execs()
+            .with_status(0)
+            .with_stderr_contains("[RUNNING] `rustc [..]myexm1.rs --crate-type bin[..]")
+            .with_stderr_contains("[RUNNING] `rustc [..]myexm2.rs [..]--test[..]")
+            .with_stderr_does_not_contain("[RUNNING] [..]myexm1-[..]")
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm2-[..]"),
+    );
+
+    // Only tests myexm2.
+    assert_that(
+        prj.cargo("test --tests"),
+        execs()
+            .with_status(0)
+            .with_stderr_does_not_contain("[RUNNING] [..]myexm1-[..]")
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm2-[..]"),
+    );
+
+    // Tests all examples.
+    assert_that(
+        prj.cargo("test --examples"),
+        execs()
+            .with_status(0)
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm1-[..]")
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm2-[..]"),
+    );
+
+    // Test an example, even without `test` set.
+    assert_that(
+        prj.cargo("test --example myexm1"),
+        execs()
+            .with_status(0)
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm1-[..]"),
+    );
+
+    // Tests all examples.
+    assert_that(
+        prj.cargo("test --all-targets"),
+        execs()
+            .with_status(0)
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm1-[..]")
+            .with_stderr_contains("[RUNNING] [..]target[/]debug[/]examples[/]myexm2-[..]"),
     );
 }