cargo/tests/testsuite/hints.rs
2025-07-12 14:55:10 -07:00

326 lines
8.3 KiB
Rust

//! Tests for hints.
use crate::prelude::*;
use cargo_test_support::registry::Package;
use cargo_test_support::{project, str};
#[cargo_test]
fn empty_hints_no_warn() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[hints]
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -v")
.with_stderr_data(str![[r#"
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.run();
}
#[cargo_test]
fn unknown_hints_warn() {
Package::new("bar", "1.0.0")
.file(
"Cargo.toml",
r#"
[package]
name = "bar"
version = "1.0.0"
edition = "2015"
[hints]
this-is-an-unknown-hint = true
"#,
)
.file("src/lib.rs", "")
.publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[dependencies]
bar = "1.0"
[hints]
this-is-an-unknown-hint = true
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -v")
.with_stderr_data(str![[r#"
[WARNING] unused manifest key: hints.this-is-an-unknown-hint
[UPDATING] `dummy-registry` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] bar v1.0.0 (registry `dummy-registry`)
[CHECKING] bar v1.0.0
[RUNNING] `rustc --crate-name bar [..]`
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.run();
}
#[cargo_test]
fn hint_unknown_type_warn() {
Package::new("bar", "1.0.0")
.file(
"Cargo.toml",
r#"
[package]
name = "bar"
version = "1.0.0"
edition = "2015"
[hints]
mostly-unused = 1
"#,
)
.file("src/lib.rs", "")
.publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[dependencies]
bar = "1.0"
[hints]
mostly-unused = "string"
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -v")
.with_stderr_data(str![[r#"
[UPDATING] `dummy-registry` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] bar v1.0.0 (registry `dummy-registry`)
[WARNING] foo@0.0.1: ignoring unsupported value type (string) for 'hints.mostly-unused', which expects a boolean
[CHECKING] bar v1.0.0
[RUNNING] `rustc --crate-name bar [..]`
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.with_stderr_does_not_contain("-Zhint-mostly-unused")
.run();
}
#[cargo_test]
fn hints_mostly_unused_warn_without_gate() {
Package::new("bar", "1.0.0")
.file(
"Cargo.toml",
r#"
[package]
name = "bar"
version = "1.0.0"
edition = "2015"
[hints]
mostly-unused = true
"#,
)
.file("src/lib.rs", "")
.publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[dependencies]
bar = "1.0"
[hints]
mostly-unused = true
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -v")
.with_stderr_data(str![[r#"
[UPDATING] `dummy-registry` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] bar v1.0.0 (registry `dummy-registry`)
[WARNING] foo@0.0.1: ignoring 'hints.mostly-unused', pass `-Zprofile-hint-mostly-unused` to enable it
[CHECKING] bar v1.0.0
[RUNNING] `rustc --crate-name bar [..]`
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.with_stderr_does_not_contain("-Zhint-mostly-unused")
.run();
}
#[cargo_test(nightly, reason = "-Zhint-mostly-unused is unstable")]
fn hints_mostly_unused_nightly() {
Package::new("bar", "1.0.0")
.file(
"Cargo.toml",
r#"
[package]
name = "bar"
version = "1.0.0"
edition = "2015"
[hints]
mostly-unused = true
"#,
)
.file("src/lib.rs", "")
.publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[dependencies]
bar = "1.0"
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -Zprofile-hint-mostly-unused -v")
.masquerade_as_nightly_cargo(&["profile-hint-mostly-unused"])
.with_stderr_data(str![[r#"
[UPDATING] `dummy-registry` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] bar v1.0.0 (registry `dummy-registry`)
[CHECKING] bar v1.0.0
[RUNNING] `rustc --crate-name bar [..] -Zhint-mostly-unused [..]`
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.with_stderr_does_not_contain(
"[RUNNING] `rustc --crate-name foo [..] -Zhint-mostly-unused [..]",
)
.run();
}
#[cargo_test(nightly, reason = "-Zhint-mostly-unused is unstable")]
fn mostly_unused_profile_overrides_hints_nightly() {
Package::new("bar", "1.0.0")
.file(
"Cargo.toml",
r#"
[package]
name = "bar"
version = "1.0.0"
edition = "2015"
[hints]
mostly-unused = true
"#,
)
.file("src/lib.rs", "")
.publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[dependencies]
bar = "1.0"
[profile.dev.package.bar]
hint-mostly-unused = false
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -Zprofile-hint-mostly-unused -v")
.masquerade_as_nightly_cargo(&["profile-hint-mostly-unused"])
.with_stderr_data(str![[r#"
[UPDATING] `dummy-registry` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] bar v1.0.0 (registry `dummy-registry`)
[CHECKING] bar v1.0.0
[RUNNING] `rustc --crate-name bar [..]`
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.with_stderr_does_not_contain("-Zhint-mostly-unused")
.run();
}
#[cargo_test(nightly, reason = "-Zhint-mostly-unused is unstable")]
fn mostly_unused_profile_overrides_hints_on_self_nightly() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
edition = "2015"
[hints]
mostly-unused = true
[profile.dev]
hint-mostly-unused = false
"#,
)
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("check -v")
.with_stderr_data(str![[r#"
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[RUNNING] `rustc --crate-name foo [..]`
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
"#]])
.with_stderr_does_not_contain("-Zhint-mostly-unused")
.run();
}