Recursive set and overwrite

This commit is contained in:
Sam Hedin 2020-07-10 03:45:20 +02:00
parent 4b431925ab
commit adad7e8aac

View File

@ -239,17 +239,18 @@ impl DirectorySpecificEnvironment {
#[cfg(test)]
mod tests {
use nu_test_support::fs::Stub::FileWithContent;
use nu_test_support::nu;
use nu_test_support::playground::Playground;
use nu_test_support::fs::Stub::FileWithContent;
#[test]
fn basic_autoenv_vars_are_added_and_removed(){
fn basic_autoenv_vars_are_added_and_removed() {
Playground::setup("autoenv_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContent(
".nu-env",
r#"
sandbox.mkdir("foo/bar");
sandbox.with_files(vec![
FileWithContent(
".nu-env",
r#"
[env]
testkey = "testvalue"
[scriptvars]
@ -259,7 +260,23 @@ mod tests {
entryscripts = ["touch hello.txt"]
exitscripts = ["touch bye.txt"]
"#,
)]);
),
FileWithContent(
"foo/.nu-env",
r#"
[env]
overwrite_me = "set_in_foo"
fookey = "fooval"
"#,
),
FileWithContent(
"foo/bar/.nu-env",
r#"
[env]
overwrite_me = "set_in_bar"
"#,
)
]);
//Make sure basic keys are set
let actual = nu!(
@ -283,7 +300,7 @@ mod tests {
);
assert!(actual.out.contains("hello.txt"));
//Back out of directory
//Backing out of the directory should unset the keys
let actual = nu!(
cwd: dirs.test(),
r#"cd ..
@ -291,7 +308,6 @@ mod tests {
);
assert!(!actual.out.ends_with("testvalue"));
// Make sure exit scripts are run
let actual = nu!(
cwd: dirs.test(),
@ -299,6 +315,27 @@ mod tests {
ls | where name == "bye.txt" | get name"#
);
assert!(actual.out.contains("bye.txt"));
//Subdirectories should overwrite the values of parent directories.
let actual = nu!(
cwd: dirs.test(),
r#"autoenv trust foo
cd foo/bar
autoenv trust
echo $nu.env.overwrite_me"#
);
assert!(actual.out.ends_with("set_in_bar"));
//Variables set in parent directories should be set even if you cd to a subdir
let actual = nu!(
cwd: dirs.test(),
r#"autoenv trust foo
cd foo/bar
autoenv trust
echo $nu.env.fookey"#
);
assert!(actual.out.ends_with("fooval"));
})
}
}