Skip to content

Commit

Permalink
Auto merge of #7395 - ehuss:fix-timings-test, r=alexcrichton
Browse files Browse the repository at this point in the history
Fix -Ztimings with doc tests.

`cargo test -Ztimings` would crash if you have any doc tests.  This is because the `Doctest` mode unit doesn't generate any artifacts, so a map lookup was failing.

This also adds a basic test just to ensure it works.
  • Loading branch information
bors committed Sep 20, 2019
2 parents 9f7a68f + 8fadd2b commit 317f0f5
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 2 deletions.
1 change: 1 addition & 0 deletions crates/cargo-test-support/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1632,6 +1632,7 @@ fn substitute_macros(input: &str) -> String {
("[RUNNING]", " Running"),
("[COMPILING]", " Compiling"),
("[CHECKING]", " Checking"),
("[COMPLETED]", " Completed"),
("[CREATED]", " Created"),
("[FINISHED]", " Finished"),
("[ERROR]", "error:"),
Expand Down
8 changes: 6 additions & 2 deletions src/cargo/core/compiler/timings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -444,15 +444,19 @@ impl<'a, 'cfg> Timings<'a, 'cfg> {
"todo"
}
.to_string();

// These filter on the unlocked units because not all unlocked
// units are actually "built". For example, Doctest mode units
// don't actually generate artifacts.
let unlocked_units: Vec<usize> = ut
.unlocked_units
.iter()
.map(|unit| unit_map[unit])
.filter_map(|unit| unit_map.get(unit).copied())
.collect();
let unlocked_rmeta_units: Vec<usize> = ut
.unlocked_rmeta_units
.iter()
.map(|unit| unit_map[unit])
.filter_map(|unit| unit_map.get(unit).copied())
.collect();
UnitData {
i,
Expand Down
1 change: 1 addition & 0 deletions tests/testsuite/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ mod shell_quoting;
mod small_fd_limits;
mod standard_lib;
mod test;
mod timings;
mod tool_paths;
mod update;
mod vendor;
Expand Down
68 changes: 68 additions & 0 deletions tests/testsuite/timings.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
use cargo_test_support::registry::Package;
use cargo_test_support::{is_nightly, project};

#[cargo_test]
fn timings_works() {
if !is_nightly() {
// Requires --json flag, remove this check in 1.38.
return;
}

Package::new("dep", "0.1.0").publish();

let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.1.0"
[dependencies]
dep = "0.1"
"#,
)
.file("src/lib.rs", "")
.file("src/main.rs", "fn main() {}")
.file("tests/t1.rs", "")
.file("examples/ex1.rs", "fn main() {}")
.build();

p.cargo("build --all-targets -Ztimings")
.masquerade_as_nightly_cargo()
.with_stderr_unordered(
"\
[UPDATING] [..]
[DOWNLOADING] crates ...
[DOWNLOADED] dep v0.1.0 [..]
[COMPILING] dep v0.1.0
[COMPILING] foo v0.1.0 [..]
[COMPLETED] dep v0.1.0 in [..]s
[COMPLETED] foo v0.1.0 in [..]s
[COMPLETED] foo v0.1.0 bin \"foo\" in [..]s
[COMPLETED] foo v0.1.0 example \"ex1\" in [..]s
[COMPLETED] foo v0.1.0 lib (test) in [..]s
[COMPLETED] foo v0.1.0 bin \"foo\" (test) in [..]s
[COMPLETED] foo v0.1.0 test \"t1\" (test) in [..]s
[FINISHED] [..]
Timing report saved to [..]/foo/cargo-timing-[..].html
",
)
.run();

p.cargo("clean").run();

p.cargo("test -Ztimings")
.masquerade_as_nightly_cargo()
.run();

p.cargo("clean").run();

p.cargo("check -Ztimings")
.masquerade_as_nightly_cargo()
.run();

p.cargo("clean").run();

p.cargo("doc -Ztimings").masquerade_as_nightly_cargo().run();
}

0 comments on commit 317f0f5

Please sign in to comment.