forked from extern/nushell
* start working on source-env * WIP * Get most tests working, still one to go * Fix file-relative paths; Report parser error * Fix merge conflicts; Restore source as deprecated * Tests: Use source-env; Remove redundant tests * Fmt * Respect hidden env vars * Fix file-relative eval for source-env * Add file-relative eval to "overlay use" * Use FILE_PWD only in source-env and "overlay use" * Ignore new tests for now This will be another issue * Throw an error if setting FILE_PWD manually * Fix source-related test failures * Fix nu-check to respect FILE_PWD * Fix corrupted spans in source-env shell errors * Fix up some references to old source * Remove deprecation message * Re-introduce deleted tests Co-authored-by: kubouch <kubouch@gmail.com>
153 lines
4.0 KiB
Rust
153 lines
4.0 KiB
Rust
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
|
|
use nu_test_support::playground::Playground;
|
|
use nu_test_support::{nu, pipeline};
|
|
|
|
#[test]
|
|
fn source_env_eval_export_env() {
|
|
Playground::setup("source_env_eval_export_env", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"spam.nu",
|
|
r#"
|
|
export-env { let-env FOO = 'foo' }
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[r#"source-env spam.nu"#, r#"$env.FOO"#];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert_eq!(actual.out, "foo");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_eval_export_env_hide() {
|
|
Playground::setup("source_env_eval_export_env", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"spam.nu",
|
|
r#"
|
|
export-env { hide-env FOO }
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[
|
|
r#"let-env FOO = 'foo'"#,
|
|
r#"source-env spam.nu"#,
|
|
r#"$env.FOO"#,
|
|
];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert!(actual.err.contains("did you mean"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_do_cd() {
|
|
Playground::setup("source_env_do_cd", |dirs, sandbox| {
|
|
sandbox
|
|
.mkdir("test1/test2")
|
|
.with_files(vec![FileWithContentToBeTrimmed(
|
|
"test1/test2/spam.nu",
|
|
r#"
|
|
cd test1/test2
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[
|
|
r#"source-env test1/test2/spam.nu"#,
|
|
r#"$env.PWD | path basename"#,
|
|
];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert_eq!(actual.out, "test2");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_do_cd_file_relative() {
|
|
Playground::setup("source_env_do_cd_file_relative", |dirs, sandbox| {
|
|
sandbox
|
|
.mkdir("test1/test2")
|
|
.with_files(vec![FileWithContentToBeTrimmed(
|
|
"test1/test2/spam.nu",
|
|
r#"
|
|
cd ($env.FILE_PWD | path join '..')
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[
|
|
r#"source-env test1/test2/spam.nu"#,
|
|
r#"$env.PWD | path basename"#,
|
|
];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert_eq!(actual.out, "test1");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_dont_cd_overlay() {
|
|
Playground::setup("source_env_dont_cd_overlay", |dirs, sandbox| {
|
|
sandbox
|
|
.mkdir("test1/test2")
|
|
.with_files(vec![FileWithContentToBeTrimmed(
|
|
"test1/test2/spam.nu",
|
|
r#"
|
|
overlay new spam
|
|
cd test1/test2
|
|
overlay hide spam
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[
|
|
r#"source-env test1/test2/spam.nu"#,
|
|
r#"$env.PWD | path basename"#,
|
|
];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert_eq!(actual.out, "source_env_dont_cd_overlay");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_nice_parse_error() {
|
|
Playground::setup("source_env_nice_parse_error", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"spam.nu",
|
|
r#"
|
|
let x
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[r#"source-env spam.nu"#];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert!(actual.err.contains("cannot parse this file"));
|
|
assert!(actual.err.contains("───"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn source_env_nice_shell_error() {
|
|
Playground::setup("source_env_nice_shell_error", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"spam.nu",
|
|
r#"
|
|
let-env FILE_PWD = 'foo'
|
|
"#,
|
|
)]);
|
|
|
|
let inp = &[r#"source-env spam.nu"#];
|
|
|
|
let actual = nu!(cwd: dirs.test(), pipeline(&inp.join("; ")));
|
|
|
|
assert!(actual.err.contains("cannot evaluate this file"));
|
|
assert!(actual.err.contains("───"));
|
|
})
|
|
}
|