Add tests for uv_pep508::verbatim_url::expand_env_vars (#18676)
## Summary I noticed a gap in testing while working in this area so I added some unit tests for `expand_env_vars`. ## Test Plan N/A (tests don't need tests)
This commit is contained in:
committed by
GitHub
parent
2175e2ffba
commit
c43c0d0e8b
Generated
+1
@@ -6717,6 +6717,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"smallvec",
|
||||
"temp-env",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
"tracing-test",
|
||||
|
||||
@@ -34,6 +34,7 @@ rustc-hash = { workspace = true }
|
||||
schemars = { workspace = true, optional = true }
|
||||
serde = { workspace = true, features = ["derive", "rc"] }
|
||||
smallvec = { workspace = true }
|
||||
temp-env = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
tracing = { workspace = true, optional = true }
|
||||
unicode-width = { workspace = true }
|
||||
|
||||
@@ -1084,7 +1084,6 @@ impl<T: Pep508Url + Display, D: rkyv::rancor::Fallible + ?Sized>
|
||||
mod tests {
|
||||
//! Half of these tests are copied from <https://github.com/pypa/packaging/pull/624>
|
||||
|
||||
use std::env;
|
||||
use std::str::FromStr;
|
||||
|
||||
use insta::assert_snapshot;
|
||||
@@ -1822,7 +1821,7 @@ mod tests {
|
||||
"foo @ file:foo-3.0.0-py3-none-any.whl",
|
||||
"foo @ ./foo-3.0.0-py3-none-any.whl",
|
||||
];
|
||||
let cwd = env::current_dir().unwrap();
|
||||
let cwd = std::env::current_dir().unwrap();
|
||||
|
||||
for requirement in requirements {
|
||||
assert_eq!(
|
||||
|
||||
@@ -791,4 +791,77 @@ mod tests {
|
||||
@"ambiguous user/pass authority in URL (not percent-encoded?): https:***@domain/a/b/c"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn env_vars() {
|
||||
temp_env::with_vars(
|
||||
[
|
||||
("FOO", None),
|
||||
("BAR", Some("bar")),
|
||||
("BAZ", Some("baz")),
|
||||
("Not-Valid", Some("Not-Valid")),
|
||||
("TEST_1", Some("Test 1")),
|
||||
("PROJECT_ROOT", None),
|
||||
],
|
||||
|| {
|
||||
// Basic
|
||||
assert_eq!(expand_env_vars(""), Cow::Borrowed(""));
|
||||
assert_eq!(expand_env_vars("test"), Cow::Borrowed("test"));
|
||||
assert_eq!(expand_env_vars("$"), Cow::Borrowed("$"));
|
||||
|
||||
// Invalid
|
||||
assert_eq!(expand_env_vars("$FOO"), Cow::Borrowed("$FOO"));
|
||||
assert_eq!(expand_env_vars("$BAR"), Cow::Borrowed("$BAR"));
|
||||
assert_eq!(expand_env_vars("${BAR"), Cow::Borrowed("${BAR"));
|
||||
assert_eq!(expand_env_vars("$BAR}"), Cow::Borrowed("$BAR}"));
|
||||
assert_eq!(expand_env_vars("${ BAR }"), Cow::Borrowed("${ BAR }"));
|
||||
assert_eq!(
|
||||
expand_env_vars("${Not-Valid}"),
|
||||
Cow::Borrowed("${Not-Valid}")
|
||||
);
|
||||
assert_eq!(expand_env_vars("${}"), Cow::Borrowed("${}"));
|
||||
|
||||
// Missing
|
||||
assert_eq!(expand_env_vars("${FOO}"), "${FOO}");
|
||||
|
||||
// Case sensitive
|
||||
assert_eq!(expand_env_vars("${bar}"), "${bar}");
|
||||
|
||||
// One variable referenced
|
||||
assert_eq!(expand_env_vars("${BAR}"), "bar");
|
||||
assert_eq!(expand_env_vars("foo ${BAR}"), "foo bar");
|
||||
assert_eq!(expand_env_vars("foo ${BAR} baz"), "foo bar baz");
|
||||
assert_eq!(expand_env_vars("foo ${BAR} baz ${BAR}"), "foo bar baz bar");
|
||||
|
||||
// Two variables referenced
|
||||
assert_eq!(expand_env_vars("${FOO} ${BAR} ${BAZ}"), "${FOO} bar baz");
|
||||
assert_eq!(expand_env_vars("<${BAR}-${BAZ}>"), "<bar-baz>");
|
||||
assert_eq!(
|
||||
expand_env_vars("${FOO}${BAR}${BAZ}${FOO}${BAR}${BAZ}"),
|
||||
"${FOO}barbaz${FOO}barbaz"
|
||||
);
|
||||
|
||||
// Weird
|
||||
assert_eq!(expand_env_vars("${${TEST_1}}"), "${Test 1}");
|
||||
|
||||
// PROJECT_ROOT
|
||||
let cwd = std::env::current_dir().unwrap();
|
||||
let cwd = cwd.to_string_lossy();
|
||||
|
||||
assert_eq!(
|
||||
expand_env_vars("${PROJECT_ROOT}/file"),
|
||||
format!("{cwd}/file")
|
||||
);
|
||||
assert_eq!(
|
||||
expand_env_vars("$PROJECT_ROOT/file.txt"),
|
||||
Cow::Borrowed("$PROJECT_ROOT/file.txt")
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
expand_env_vars("${FOO} ${BAR} ${PROJECT_ROOT} ${BAZ}"),
|
||||
format!("${{FOO}} bar {cwd} baz")
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user