cargo/tests/testsuite/multitarget.rs
Ed Page 293f2250d6 feat(doc): Print the generated docs links
I've wanted something like this myself.  I dislike using `--open`
because I tend to move up to re-run my `cargo doc` run but then have to
edit it to remove `--open`.
Also makes it annoying when opening docs when `cargo doc` is wrapped by
a tool like `make`.

This was previously attempted in #5592:
- Unlike the request in #5562, this aligns with #5592 in always printing
  rather than using a flag as this seems generally useful
- Unlike #5592, this prints as an alternative to "Opening" to keep
  things light
- Unlike #5592, this prints afterwards as the link is only valid then

Fixes #5562
2023-10-19 10:51:56 -05:00

259 lines
5.9 KiB
Rust

//! Tests for multiple `--target` flags to subcommands
use cargo_test_support::{basic_manifest, cross_compile, project, rustc_host};
#[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")
.arg("--target")
.arg(&t1)
.arg("--target")
.arg(&t2)
.run();
assert!(p.target_bin(t1, "foo").is_file());
assert!(p.target_bin(t2, "foo").is_file());
}
#[cargo_test]
fn simple_build_with_config() {
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() {}")
.file(
".cargo/config.toml",
&format!(
r#"
[build]
target = ["{t1}", "{t2}"]
"#
),
)
.build();
p.cargo("build").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")
.arg("--target")
.arg(&t1)
.arg("--target")
.arg(&t2)
.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 --target a --target b")
.with_stderr("[ERROR] only one `--target` argument is supported")
.with_status(101)
.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")
.arg("--target")
.arg(&t1)
.arg("--target")
.arg(&t2)
.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_doc_open() {
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")
.arg("--open")
.arg("--target")
.arg(&t1)
.arg("--target")
.arg(&t2)
.with_stderr(
"\
[DOCUMENTING] foo v1.0.0 ([..])
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[ERROR] only one `--target` argument is supported",
)
.with_status(101)
.run();
}
#[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")
.arg("--target")
.arg(&t1)
.arg("--target")
.arg(&t2)
.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")
.arg("--target")
.arg(&t)
.arg("--target")
.arg(&t)
.run();
assert!(p.target_bin(t, "foo").is_file());
}
#[cargo_test]
fn same_value_twice_with_config() {
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() {}")
.file(
".cargo/config.toml",
&format!(
r#"
[build]
target = ["{t}", "{t}"]
"#
),
)
.build();
p.cargo("build").run();
assert!(p.target_bin(t, "foo").is_file());
}
#[cargo_test]
fn works_with_config_in_both_string_or_list() {
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() {}")
.file(
".cargo/config.toml",
&format!(
r#"
[build]
target = "{t}"
"#
),
)
.build();
p.cargo("build").run();
assert!(p.target_bin(t, "foo").is_file());
p.cargo("clean").run();
p.change_file(
".cargo/config.toml",
&format!(
r#"
[build]
target = ["{t}"]
"#
),
);
p.cargo("build").run();
assert!(p.target_bin(t, "foo").is_file());
}
#[cargo_test]
fn works_with_env() {
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").env("CARGO_BUILD_TARGET", t).run();
assert!(p.target_bin(t, "foo").is_file());
}