diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:47:55 +0000 |
commit | 2aadc03ef15cb5ca5cc2af8a7c08e070742f0ac4 (patch) | |
tree | 033cc839730fda84ff08db877037977be94e5e3a /tests/testsuite/edition.rs | |
parent | Initial commit. (diff) | |
download | cargo-upstream.tar.xz cargo-upstream.zip |
Adding upstream version 0.70.1+ds1.upstream/0.70.1+ds1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/testsuite/edition.rs')
-rw-r--r-- | tests/testsuite/edition.rs | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/tests/testsuite/edition.rs b/tests/testsuite/edition.rs new file mode 100644 index 0000000..377a86e --- /dev/null +++ b/tests/testsuite/edition.rs @@ -0,0 +1,124 @@ +//! Tests for edition setting. + +use cargo::core::Edition; +use cargo_test_support::{basic_lib_manifest, project}; + +#[cargo_test] +fn edition_works_for_build_script() { + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = 'foo' + version = '0.1.0' + edition = '2018' + + [build-dependencies] + a = { path = 'a' } + "#, + ) + .file("src/lib.rs", "") + .file( + "build.rs", + r#" + fn main() { + a::foo(); + } + "#, + ) + .file("a/Cargo.toml", &basic_lib_manifest("a")) + .file("a/src/lib.rs", "pub fn foo() {}") + .build(); + + p.cargo("check -v").run(); +} + +#[cargo_test] +fn edition_unstable_gated() { + // During the period where a new edition is coming up, but not yet stable, + // this test will verify that it cannot be used on stable. If there is no + // next edition, it does nothing. + let next = match Edition::LATEST_UNSTABLE { + Some(next) => next, + None => { + eprintln!("Next edition is currently not available, skipping test."); + return; + } + }; + let p = project() + .file( + "Cargo.toml", + &format!( + r#" + [package] + name = "foo" + version = "0.1.0" + edition = "{}" + "#, + next + ), + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("check") + .with_status(101) + .with_stderr(&format!( + "\ +[ERROR] failed to parse manifest at `[..]/foo/Cargo.toml` + +Caused by: + feature `edition{next}` is required + + The package requires the Cargo feature called `edition{next}`, \ + but that feature is not stabilized in this version of Cargo (1.[..]). + Consider trying a newer version of Cargo (this may require the nightly release). + See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-{next} \ + for more information about the status of this feature. +", + next = next + )) + .run(); +} + +#[cargo_test(nightly, reason = "fundamentally always nightly")] +fn edition_unstable() { + // During the period where a new edition is coming up, but not yet stable, + // this test will verify that it can be used with `cargo-features`. If + // there is no next edition, it does nothing. + let next = match Edition::LATEST_UNSTABLE { + Some(next) => next, + None => { + eprintln!("Next edition is currently not available, skipping test."); + return; + } + }; + let p = project() + .file( + "Cargo.toml", + &format!( + r#" + cargo-features = ["edition{next}"] + + [package] + name = "foo" + version = "0.1.0" + edition = "{next}" + "#, + next = next + ), + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("check") + .masquerade_as_nightly_cargo(&["always_nightly"]) + .with_stderr( + "\ +[CHECKING] foo [..] +[FINISHED] [..] +", + ) + .run(); +} |