summaryrefslogtreecommitdiffstats
path: root/src/tools/cargo/tests/testsuite/pub_priv.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
commit10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch)
treebdffd5d80c26cf4a7a518281a204be1ace85b4c1 /src/tools/cargo/tests/testsuite/pub_priv.rs
parentReleasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff)
downloadrustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz
rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.zip
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/cargo/tests/testsuite/pub_priv.rs')
-rw-r--r--src/tools/cargo/tests/testsuite/pub_priv.rs199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/pub_priv.rs b/src/tools/cargo/tests/testsuite/pub_priv.rs
new file mode 100644
index 000000000..83c6a49f8
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/pub_priv.rs
@@ -0,0 +1,199 @@
+//! Tests for public/private dependencies.
+
+use cargo_test_support::project;
+use cargo_test_support::registry::Package;
+
+#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
+fn exported_priv_warning() {
+ Package::new("priv_dep", "0.1.0")
+ .file("src/lib.rs", "pub struct FromPriv;")
+ .publish();
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ cargo-features = ["public-dependency"]
+
+ [package]
+ name = "foo"
+ version = "0.0.1"
+
+ [dependencies]
+ priv_dep = "0.1.0"
+ "#,
+ )
+ .file(
+ "src/lib.rs",
+ "
+ extern crate priv_dep;
+ pub fn use_priv(_: priv_dep::FromPriv) {}
+ ",
+ )
+ .build();
+
+ p.cargo("check --message-format=short")
+ .masquerade_as_nightly_cargo(&["public-dependency"])
+ .with_stderr_contains(
+ "\
+src/lib.rs:3:13: warning: type `[..]FromPriv` from private dependency 'priv_dep' in public interface
+",
+ )
+ .run()
+}
+
+#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
+fn exported_pub_dep() {
+ Package::new("pub_dep", "0.1.0")
+ .file("src/lib.rs", "pub struct FromPub;")
+ .publish();
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ cargo-features = ["public-dependency"]
+
+ [package]
+ name = "foo"
+ version = "0.0.1"
+
+ [dependencies]
+ pub_dep = {version = "0.1.0", public = true}
+ "#,
+ )
+ .file(
+ "src/lib.rs",
+ "
+ extern crate pub_dep;
+ pub fn use_pub(_: pub_dep::FromPub) {}
+ ",
+ )
+ .build();
+
+ p.cargo("check --message-format=short")
+ .masquerade_as_nightly_cargo(&["public-dependency"])
+ .with_stderr(
+ "\
+[UPDATING] `[..]` index
+[DOWNLOADING] crates ...
+[DOWNLOADED] pub_dep v0.1.0 ([..])
+[CHECKING] pub_dep v0.1.0
+[CHECKING] foo v0.0.1 ([CWD])
+[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
+",
+ )
+ .run()
+}
+
+#[cargo_test]
+pub fn requires_nightly_cargo() {
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ cargo-features = ["public-dependency"]
+ "#,
+ )
+ .file("src/lib.rs", "")
+ .build();
+
+ p.cargo("check --message-format=short")
+ .with_status(101)
+ .with_stderr(
+ "\
+error: failed to parse manifest at `[..]`
+
+Caused by:
+ the cargo feature `public-dependency` requires a nightly version of Cargo, but this is the `stable` channel
+ See https://doc.rust-lang.org/book/appendix-07-nightly-rust.html for more information about Rust release channels.
+ See https://doc.rust-lang.org/[..]cargo/reference/unstable.html#public-dependency for more information about using this feature.
+"
+ )
+ .run()
+}
+
+#[cargo_test]
+fn requires_feature() {
+ Package::new("pub_dep", "0.1.0")
+ .file("src/lib.rs", "")
+ .publish();
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ [package]
+ name = "foo"
+ version = "0.0.1"
+
+ [dependencies]
+ pub_dep = { version = "0.1.0", public = true }
+ "#,
+ )
+ .file("src/lib.rs", "")
+ .build();
+
+ p.cargo("check --message-format=short")
+ .masquerade_as_nightly_cargo(&["public-dependency"])
+ .with_status(101)
+ .with_stderr(
+ "\
+error: failed to parse manifest at `[..]`
+
+Caused by:
+ feature `public-dependency` is required
+
+ The package requires the Cargo feature called `public-dependency`, \
+ but that feature is not stabilized in this version of Cargo (1.[..]).
+ Consider adding `cargo-features = [\"public-dependency\"]` to the top of Cargo.toml \
+ (above the [package] table) to tell Cargo you are opting in to use this unstable feature.
+ See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#public-dependency \
+ for more information about the status of this feature.
+",
+ )
+ .run()
+}
+
+#[cargo_test]
+fn pub_dev_dependency() {
+ Package::new("pub_dep", "0.1.0")
+ .file("src/lib.rs", "pub struct FromPub;")
+ .publish();
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ cargo-features = ["public-dependency"]
+
+ [package]
+ name = "foo"
+ version = "0.0.1"
+
+ [dev-dependencies]
+ pub_dep = {version = "0.1.0", public = true}
+ "#,
+ )
+ .file(
+ "src/lib.rs",
+ "
+ extern crate pub_dep;
+ pub fn use_pub(_: pub_dep::FromPub) {}
+ ",
+ )
+ .build();
+
+ p.cargo("check --message-format=short")
+ .masquerade_as_nightly_cargo(&["public-dependency"])
+ .with_status(101)
+ .with_stderr(
+ "\
+error: failed to parse manifest at `[..]`
+
+Caused by:
+ 'public' specifier can only be used on regular dependencies, not Development dependencies
+",
+ )
+ .run()
+}