//! Tests for multiple `--target` flags to subcommands use cargo_test_support::{basic_manifest, cross_compile, project, rustc_host}; #[cargo_test] fn double_target_rejected() { let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/main.rs", "fn main() {}") .build(); p.cargo("build --target a --target b") .with_stderr("error: specifying multiple `--target` flags requires `-Zmultitarget`") .with_status(101) .run(); } #[cargo_test] fn simple_build() { if cross_compile::disabled() { return; } let t1 = cross_compile::alternate(); let t2 = rustc_host(); let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/main.rs", "fn main() {}") .build(); p.cargo("build -Z multitarget") .arg("--target") .arg(&t1) .arg("--target") .arg(&t2) .masquerade_as_nightly_cargo() .run(); assert!(p.target_bin(t1, "foo").is_file()); assert!(p.target_bin(&t2, "foo").is_file()); } #[cargo_test] fn simple_test() { if !cross_compile::can_run_on_host() { return; } let t1 = cross_compile::alternate(); let t2 = rustc_host(); let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/lib.rs", "fn main() {}") .build(); p.cargo("test -Z multitarget") .arg("--target") .arg(&t1) .arg("--target") .arg(&t2) .masquerade_as_nightly_cargo() .with_stderr_contains(&format!("[RUNNING] [..]{}[..]", t1)) .with_stderr_contains(&format!("[RUNNING] [..]{}[..]", t2)) .run(); } #[cargo_test] fn simple_run() { let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/main.rs", "fn main() {}") .build(); p.cargo("run -Z multitarget --target a --target b") .with_stderr("error: only one `--target` argument is supported") .with_status(101) .masquerade_as_nightly_cargo() .run(); } #[cargo_test] fn simple_doc() { if cross_compile::disabled() { return; } let t1 = cross_compile::alternate(); let t2 = rustc_host(); let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/lib.rs", "//! empty lib") .build(); p.cargo("doc -Z multitarget") .arg("--target") .arg(&t1) .arg("--target") .arg(&t2) .masquerade_as_nightly_cargo() .run(); assert!(p.build_dir().join(&t1).join("doc/foo/index.html").is_file()); assert!(p.build_dir().join(&t2).join("doc/foo/index.html").is_file()); } #[cargo_test] fn simple_check() { if cross_compile::disabled() { return; } let t1 = cross_compile::alternate(); let t2 = rustc_host(); let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/main.rs", "fn main() {}") .build(); p.cargo("check -Z multitarget") .arg("--target") .arg(&t1) .arg("--target") .arg(&t2) .masquerade_as_nightly_cargo() .run(); } #[cargo_test] fn same_value_twice() { if cross_compile::disabled() { return; } let t = rustc_host(); let p = project() .file("Cargo.toml", &basic_manifest("foo", "1.0.0")) .file("src/main.rs", "fn main() {}") .build(); p.cargo("build -Z multitarget") .arg("--target") .arg(&t) .arg("--target") .arg(&t) .masquerade_as_nightly_cargo() .run(); assert!(p.target_bin(&t, "foo").is_file()); }