diff options
Diffstat (limited to 'src/tools/cargo/tests/testsuite/cargo_env_config.rs')
-rw-r--r-- | src/tools/cargo/tests/testsuite/cargo_env_config.rs | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/cargo_env_config.rs b/src/tools/cargo/tests/testsuite/cargo_env_config.rs new file mode 100644 index 000000000..d80c38d0e --- /dev/null +++ b/src/tools/cargo/tests/testsuite/cargo_env_config.rs @@ -0,0 +1,181 @@ +//! Tests for `[env]` config. + +use cargo_test_support::{basic_bin_manifest, project}; + +#[cargo_test] +fn env_basic() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo")) + .file( + "src/main.rs", + r#" + use std::env; + fn main() { + println!( "compile-time:{}", env!("ENV_TEST_1233") ); + println!( "run-time:{}", env::var("ENV_TEST_1233").unwrap()); + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + ENV_TEST_1233 = "Hello" + "#, + ) + .build(); + + p.cargo("run") + .with_stdout_contains("compile-time:Hello") + .with_stdout_contains("run-time:Hello") + .run(); +} + +#[cargo_test] +fn env_invalid() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo")) + .file( + "src/main.rs", + r#" + fn main() { + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + ENV_TEST_BOOL = false + "#, + ) + .build(); + + p.cargo("check") + .with_status(101) + .with_stderr_contains("[..]could not load config key `env.ENV_TEST_BOOL`") + .run(); +} + +#[cargo_test] +fn env_no_cargo_home() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo")) + .file( + "src/main.rs", + r#" + fn main() { + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + CARGO_HOME = "/" + "#, + ) + .build(); + + p.cargo("check") + .with_status(101) + .with_stderr_contains("[..]setting the `CARGO_HOME` environment variable is not supported in the `[env]` configuration table") + .run(); +} + +#[cargo_test] +fn env_force() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo")) + .file( + "src/main.rs", + r#" + use std::env; + fn main() { + println!( "ENV_TEST_FORCED:{}", env!("ENV_TEST_FORCED") ); + println!( "ENV_TEST_UNFORCED:{}", env!("ENV_TEST_UNFORCED") ); + println!( "ENV_TEST_UNFORCED_DEFAULT:{}", env!("ENV_TEST_UNFORCED_DEFAULT") ); + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + ENV_TEST_UNFORCED_DEFAULT = "from-config" + ENV_TEST_UNFORCED = { value = "from-config", force = false } + ENV_TEST_FORCED = { value = "from-config", force = true } + "#, + ) + .build(); + + p.cargo("run") + .env("ENV_TEST_FORCED", "from-env") + .env("ENV_TEST_UNFORCED", "from-env") + .env("ENV_TEST_UNFORCED_DEFAULT", "from-env") + .with_stdout_contains("ENV_TEST_FORCED:from-config") + .with_stdout_contains("ENV_TEST_UNFORCED:from-env") + .with_stdout_contains("ENV_TEST_UNFORCED_DEFAULT:from-env") + .run(); +} + +#[cargo_test] +fn env_relative() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo2")) + .file( + "src/main.rs", + r#" + use std::env; + use std::path::Path; + fn main() { + println!( "ENV_TEST_REGULAR:{}", env!("ENV_TEST_REGULAR") ); + println!( "ENV_TEST_REGULAR_DEFAULT:{}", env!("ENV_TEST_REGULAR_DEFAULT") ); + println!( "ENV_TEST_RELATIVE:{}", env!("ENV_TEST_RELATIVE") ); + + assert!( Path::new(env!("ENV_TEST_RELATIVE")).is_absolute() ); + assert!( !Path::new(env!("ENV_TEST_REGULAR")).is_absolute() ); + assert!( !Path::new(env!("ENV_TEST_REGULAR_DEFAULT")).is_absolute() ); + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + ENV_TEST_REGULAR = { value = "Cargo.toml", relative = false } + ENV_TEST_REGULAR_DEFAULT = "Cargo.toml" + ENV_TEST_RELATIVE = { value = "Cargo.toml", relative = true } + "#, + ) + .build(); + + p.cargo("run").run(); +} + +#[cargo_test] +fn env_no_override() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("unchanged")) + .file( + "src/main.rs", + r#" + use std::env; + fn main() { + println!( "CARGO_PKG_NAME:{}", env!("CARGO_PKG_NAME") ); + } + "#, + ) + .file( + ".cargo/config", + r#" + [env] + CARGO_PKG_NAME = { value = "from-config", force = true } + "#, + ) + .build(); + + p.cargo("run") + .with_stdout_contains("CARGO_PKG_NAME:unchanged") + .run(); +} |