From b9181ef3b5e9b15c72bacf536a6f9310404305b8 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Sat, 21 Apr 2018 17:21:42 -0700 Subject: [PATCH] Add some more tests. --- tests/testsuite/cargotest/support/mod.rs | 34 ++++--- tests/testsuite/profile_overrides.rs | 111 +++++++++++++++++++++++ tests/testsuite/rustc.rs | 56 +++++++++++- tests/testsuite/test.rs | 75 ++++++++++++++- 4 files changed, 259 insertions(+), 17 deletions(-) diff --git a/tests/testsuite/cargotest/support/mod.rs b/tests/testsuite/cargotest/support/mod.rs index f51ea4384..4ae3aeabc 100644 --- a/tests/testsuite/cargotest/support/mod.rs +++ b/tests/testsuite/cargotest/support/mod.rs @@ -9,26 +9,28 @@ use std::process::Output; use std::str; use std::usize; -use serde_json::{self, Value}; -use url::Url; -use hamcrest as ham; use cargo::util::ProcessBuilder; use cargo::util::ProcessError; +use hamcrest as ham; +use serde_json::{self, Value}; +use url::Url; use cargotest::support::paths::CargoPathExt; macro_rules! t { - ($e:expr) => (match $e { - Ok(e) => e, - Err(e) => panic!("{} failed with {}", stringify!($e), e), - }) + ($e:expr) => { + match $e { + Ok(e) => e, + Err(e) => panic!("{} failed with {}", stringify!($e), e), + } + }; } -pub mod paths; -pub mod git; -pub mod registry; pub mod cross_compile; +pub mod git; +pub mod paths; pub mod publish; +pub mod registry; /* * @@ -588,7 +590,10 @@ impl Execs { if let Some(ref objects) = self.expect_json { let stdout = str::from_utf8(&actual.stdout) .map_err(|_| "stdout was not utf8 encoded".to_owned())?; - let lines = stdout.lines().collect::>(); + let lines = stdout + .lines() + .filter(|line| line.starts_with("{")) + .collect::>(); if lines.len() != objects.len() { return Err(format!( "expected {} json lines, got {}, stdout:\n{}", @@ -744,8 +749,11 @@ impl Execs { }; } if a.len() > 0 { - Err(format!("Output included extra lines:\n\ - {}\n", a.join("\n"))) + Err(format!( + "Output included extra lines:\n\ + {}\n", + a.join("\n") + )) } else { Ok(()) } diff --git a/tests/testsuite/profile_overrides.rs b/tests/testsuite/profile_overrides.rs index 458e9e057..59a61616d 100644 --- a/tests/testsuite/profile_overrides.rs +++ b/tests/testsuite/profile_overrides.rs @@ -232,3 +232,114 @@ fn profile_override_bad_settings() { ); } } + +#[test] +fn profile_override_hierarchy() { + // Test that the precedence rules are correct for different types. + let p = project("foo") + .file( + "Cargo.toml", + r#" + cargo-features = ["profile-overrides"] + + [workspace] + members = ["m1", "m2", "m3"] + + [profile.dev] + codegen-units = 1 + + [profile.dev.overrides.m2] + codegen-units = 2 + + [profile.dev.overrides."*"] + codegen-units = 3 + + [profile.dev.build-override] + codegen-units = 4 + "#) + + // m1 + .file("m1/Cargo.toml", + r#" + [package] + name = "m1" + version = "0.0.1" + + [dependencies] + m2 = { path = "../m2" } + dep = { path = "../../dep" } + "#) + .file("m1/src/lib.rs", + r#" + extern crate m2; + extern crate dep; + "#) + .file("m1/build.rs", + r#"fn main() {}"#) + + // m2 + .file("m2/Cargo.toml", + r#" + [package] + name = "m2" + version = "0.0.1" + + [dependencies] + m3 = { path = "../m3" } + + [build-dependencies] + m3 = { path = "../m3" } + dep = { path = "../../dep" } + "#) + .file("m2/src/lib.rs", + r#" + extern crate m3; + "#) + .file("m2/build.rs", + r#" + extern crate m3; + extern crate dep; + fn main() {} + "#) + + // m3 + .file("m3/Cargo.toml", &basic_lib_manifest("m3")) + .file("m3/src/lib.rs", "") + .build(); + + // dep (outside of workspace) + let _dep = project("dep") + .file("Cargo.toml", &basic_lib_manifest("dep")) + .file("src/lib.rs", "") + .build(); + + // Profiles should be: + // m3: 4 (as build.rs dependency) + // m3: 1 (as [profile.dev] as workspace member) + // dep: 3 (as [profile.dev.overrides."*"] as non-workspace member) + // m1 build.rs: 4 (as [profile.dev.build-override]) + // m2 build.rs: 2 (as [profile.dev.overrides.m2]) + // m2: 2 (as [profile.dev.overrides.m2]) + // m1: 1 (as [profile.dev]) + + assert_that( + p.cargo("build -v").masquerade_as_nightly_cargo(), + execs().with_status(0).with_stderr_unordered("\ +[COMPILING] m3 [..] +[COMPILING] dep [..] +[RUNNING] `rustc --crate-name m3 m3[/]src[/]lib.rs --crate-type lib --emit=dep-info,link -C codegen-units=4 [..] +[RUNNING] `rustc --crate-name dep [..]dep[/]src[/]lib.rs --crate-type lib --emit=dep-info,link -C codegen-units=3 [..] +[RUNNING] `rustc --crate-name m3 m3[/]src[/]lib.rs --crate-type lib --emit=dep-info,link -C codegen-units=1 [..] +[RUNNING] `rustc --crate-name build_script_build m1[/]build.rs --crate-type bin --emit=dep-info,link -C codegen-units=4 [..] +[COMPILING] m2 [..] +[RUNNING] `rustc --crate-name build_script_build m2[/]build.rs --crate-type bin --emit=dep-info,link -C codegen-units=2 [..] +[RUNNING] `[..][/]m1-[..][/]build-script-build` +[RUNNING] `[..][/]m2-[..][/]build-script-build` +[RUNNING] `rustc --crate-name m2 m2[/]src[/]lib.rs --crate-type lib --emit=dep-info,link -C codegen-units=2 [..] +[COMPILING] m1 [..] +[RUNNING] `rustc --crate-name m1 m1[/]src[/]lib.rs --crate-type lib --emit=dep-info,link -C codegen-units=1 [..] +[FINISHED] dev [unoptimized + debuginfo] [..] +", + ), + ); +} diff --git a/tests/testsuite/rustc.rs b/tests/testsuite/rustc.rs index dd7d51b50..95691b8df 100644 --- a/tests/testsuite/rustc.rs +++ b/tests/testsuite/rustc.rs @@ -1,4 +1,4 @@ -use cargotest::support::{execs, project}; +use cargotest::support::{basic_lib_manifest, execs, project}; use hamcrest::assert_that; const CARGO_RUSTC_ERROR: &'static str = @@ -595,3 +595,57 @@ fn rustc_with_other_profile() { execs().with_status(0), ); } + +#[test] +fn rustc_fingerprint() { + // Verify that the fingerprint includes the rustc args. + let p = project("foo") + .file("Cargo.toml", &basic_lib_manifest("foo")) + .file("src/lib.rs", "") + .build(); + + assert_that( + p.cargo("rustc -v -- -C debug-assertions"), + execs().with_status(0).with_stderr( + "\ +[COMPILING] foo [..] +[RUNNING] `rustc [..]-C debug-assertions [..] +[FINISHED] [..] +", + ), + ); + + assert_that( + p.cargo("rustc -v -- -C debug-assertions"), + execs().with_status(0).with_stderr( + "\ +[FRESH] foo [..] +[FINISHED] [..] +", + ), + ); + + assert_that( + p.cargo("rustc -v"), + execs() + .with_status(0) + .with_stderr_does_not_contain("-C debug-assertions") + .with_stderr( + "\ +[COMPILING] foo [..] +[RUNNING] `rustc [..] +[FINISHED] [..] +", + ), + ); + + assert_that( + p.cargo("rustc -v"), + execs().with_status(0).with_stderr( + "\ +[FRESH] foo [..] +[FINISHED] [..] +", + ), + ); +} diff --git a/tests/testsuite/test.rs b/tests/testsuite/test.rs index 925aa3b55..315e886c5 100644 --- a/tests/testsuite/test.rs +++ b/tests/testsuite/test.rs @@ -3,12 +3,12 @@ use std::io::prelude::*; use std::str; use cargo; -use cargotest::{is_nightly, rustc_host, sleep_ms}; -use cargotest::support::{basic_bin_manifest, basic_lib_manifest, cargo_exe, execs, project}; +use cargo::util::process; use cargotest::support::paths::CargoPathExt; use cargotest::support::registry::Package; +use cargotest::support::{basic_bin_manifest, basic_lib_manifest, cargo_exe, execs, project}; +use cargotest::{is_nightly, rustc_host, sleep_ms}; use hamcrest::{assert_that, existing_file, is_not}; -use cargo::util::process; #[test] fn cargo_test_simple() { @@ -3975,3 +3975,72 @@ fn test_hint_workspace() { .with_status(101), ); } + +#[test] +fn json_artifact_includes_test_flag() { + // Verify that the JSON artifact output includes `test` flag. + let p = project("foo") + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [profile.test] + opt-level = 1 + "#, + ) + .file("src/lib.rs", "") + .build(); + + assert_that( + p.cargo("test -v --message-format=json"), + execs().with_status(0).with_json( + r#" + { + "reason":"compiler-artifact", + "profile": { + "debug_assertions": true, + "debuginfo": 2, + "opt_level": "0", + "overflow_checks": true, + "test": false + }, + "features": [], + "package_id":"foo 0.0.1 ([..])", + "target":{ + "kind":["lib"], + "crate_types":["lib"], + "name":"foo", + "src_path":"[..]lib.rs" + }, + "filenames":["[..].rlib"], + "fresh": false + } + + { + "reason":"compiler-artifact", + "profile": { + "debug_assertions": true, + "debuginfo": 2, + "opt_level": "1", + "overflow_checks": true, + "test": true + }, + "features": [], + "package_id":"foo 0.0.1 ([..])", + "target":{ + "kind":["lib"], + "crate_types":["lib"], + "name":"foo", + "src_path":"[..]lib.rs" + }, + "filenames":["[..][/]foo-[..]"], + "fresh": false + } +"#, + ), + ); +}