mirror of https://github.com/rust-lang/cargo
Move namespaced features tests to a separate file.
This commit is contained in:
parent
2f115a76e5
commit
2611f5c73c
|
@ -1353,277 +1353,6 @@ fn many_cli_features_comma_and_space_delimited() {
|
|||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_invalid_feature() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `baz` which is not defined as a feature
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_invalid_dependency() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["crate:baz"]
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `crate:baz` which is not a known dependency
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_non_optional_dependency() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["crate:baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `crate:baz` which is not an optional dependency.
|
||||
Consider adding `optional = true` to the dependency
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_implicit_feature() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_shadowed_dep() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = []
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `baz` includes the optional dependency of the same name, but this is left implicit in the features included by this feature.
|
||||
Consider adding `crate:baz` to this feature's requirements.
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_shadowed_non_optional() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = []
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `baz` includes the dependency of the same name, but this is left implicit in the features included by this feature.
|
||||
Additionally, the dependency must be marked as optional to be included in the feature definition.
|
||||
Consider adding `crate:baz` to this feature's requirements and marking the dependency as `optional = true`
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_implicit_non_optional() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `baz` which is not defined as a feature.
|
||||
A non-optional dependency of the same name is defined; consider adding `optional = true` to its definition
|
||||
",
|
||||
).run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_same_name() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = ["crate:baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn only_dep_is_optional() {
|
||||
Package::new("bar", "0.1.0").publish();
|
||||
|
|
|
@ -0,0 +1,274 @@
|
|||
//! Tests for namespaced features.
|
||||
|
||||
use cargo_test_support::project;
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_invalid_feature() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `baz` which is not defined as a feature
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_invalid_dependency() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["crate:baz"]
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `crate:baz` which is not a known dependency
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_non_optional_dependency() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["crate:baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "")
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.masquerade_as_nightly_cargo()
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `crate:baz` which is not an optional dependency.
|
||||
Consider adding `optional = true` to the dependency
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_implicit_feature() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_shadowed_dep() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = []
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `baz` includes the optional dependency of the same name, but this is left implicit in the features included by this feature.
|
||||
Consider adding `crate:baz` to this feature's requirements.
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_shadowed_non_optional() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = []
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `baz` includes the dependency of the same name, but this is left implicit in the features included by this feature.
|
||||
Additionally, the dependency must be marked as optional to be included in the feature definition.
|
||||
Consider adding `crate:baz` to this feature's requirements and marking the dependency as `optional = true`
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_implicit_non_optional() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
bar = ["baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = "0.1"
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().with_status(101).with_stderr(
|
||||
"\
|
||||
[ERROR] failed to parse manifest at `[..]`
|
||||
|
||||
Caused by:
|
||||
Feature `bar` includes `baz` which is not defined as a feature.
|
||||
A non-optional dependency of the same name is defined; consider adding `optional = true` to its definition
|
||||
",
|
||||
).run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn namespaced_same_name() {
|
||||
let p = project()
|
||||
.file(
|
||||
"Cargo.toml",
|
||||
r#"
|
||||
cargo-features = ["namespaced-features"]
|
||||
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
namespaced-features = true
|
||||
|
||||
[features]
|
||||
baz = ["crate:baz"]
|
||||
|
||||
[dependencies]
|
||||
baz = { version = "0.1", optional = true }
|
||||
"#,
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
p.cargo("build").masquerade_as_nightly_cargo().run();
|
||||
}
|
|
@ -45,6 +45,7 @@ mod edition;
|
|||
mod error;
|
||||
mod features;
|
||||
mod features2;
|
||||
mod features_namespaced;
|
||||
mod fetch;
|
||||
mod fix;
|
||||
mod freshness;
|
||||
|
|
Loading…
Reference in New Issue