nushell/tests/shell/pipeline/commands/external.rs
Jonathan Turner 1ec2ec72b5
Add automatic change directory (#1496)
* Allow automatic cd in cli mode

* Set correct priority for auto-cd and add test
2020-03-18 07:13:38 +13:00

234 lines
5.1 KiB
Rust

use nu_test_support::{nu, nu_error};
// #[test]
// fn shows_error_for_command_that_fails() {
// let actual = nu_error!(
// cwd: ".",
// "fail"
// );
// assert!(actual.contains("External command failed"));
// }
#[test]
fn shows_error_for_command_not_found() {
let actual = nu_error!(
cwd: ".",
"ferris_is_not_here.exe"
);
assert!(actual.contains("Command not found"));
}
#[test]
fn automatically_change_directory() {
use nu_test_support::playground::Playground;
Playground::setup("cd_test_5_1", |dirs, sandbox| {
sandbox.within("autodir").mkdir("bar");
let actual = nu!(
cwd: dirs.test(),
r#"
autodir
pwd | echo $it
"#
);
assert!(actual.ends_with("autodir"));
})
}
mod it_evaluation {
use super::nu;
use nu_test_support::fs::Stub::{EmptyFile, FileWithContent, FileWithContentToBeTrimmed};
use nu_test_support::{pipeline, playground::Playground};
#[test]
fn takes_rows_of_nu_value_strings() {
Playground::setup("it_argument_test_1", |dirs, sandbox| {
sandbox.with_files(vec![
EmptyFile("jonathan_likes_cake.txt"),
EmptyFile("andres_likes_arepas.txt"),
]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
ls
| sort-by name
| get name
| cococo $it
| lines
| nth 1
| echo $it
"#
));
assert_eq!(actual, "jonathan_likes_cake.txt");
})
}
#[test]
fn takes_rows_of_nu_value_lines() {
Playground::setup("it_argument_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"nu_candies.txt",
r#"
AndrásWithKitKatzz
AndrásWithKitKatz
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open nu_candies.txt
| lines
| chop $it
| lines
| nth 1
| echo $it
"#
));
assert_eq!(actual, "AndrásWithKitKat");
})
}
#[test]
fn supports_fetching_given_a_column_path_to_it() {
Playground::setup("it_argument_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContent(
"sample.toml",
r#"
nu_party_venue = "zion"
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open sample.toml
| cococo $it.nu_party_venue
| echo $it
"#
));
assert_eq!(actual, "zion");
})
}
}
mod stdin_evaluation {
use super::{nu, nu_error};
use nu_test_support::pipeline;
#[test]
fn does_not_panic_with_no_newline_in_stream() {
let stderr = nu_error!(
cwd: ".",
pipeline(r#"
nonu "where's the nuline?"
| count
"#
));
assert_eq!(stderr, "");
}
#[test]
fn does_not_block_indefinitely() {
let stdout = nu!(
cwd: ".",
pipeline(r#"
iecho yes
| chop
| chop
| lines
| first 1
"#
));
assert_eq!(stdout, "y");
}
}
mod external_words {
use super::nu;
#[test]
fn relaxed_external_words() {
let actual = nu!(cwd: ".", r#"
cococo joturner@foo.bar.baz
"#);
assert_eq!(actual, "joturner@foo.bar.baz");
}
}
mod nu_commands {
use super::nu;
#[test]
fn echo_internally_externally() {
let actual = nu!(cwd: ".", r#"
nu -c "echo 'foo'"
"#);
assert_eq!(actual, "foo");
}
}
mod nu_script {
use super::nu;
#[test]
fn run_nu_script() {
let actual = nu!(cwd: "tests/fixtures/formats", r#"
nu script.nu
"#);
assert_eq!(actual, "done");
}
#[test]
fn run_nu_script_multiline() {
let actual = nu!(cwd: "tests/fixtures/formats", r#"
nu script_multiline.nu
"#);
assert_eq!(actual, "23");
}
}
mod tilde_expansion {
use super::nu;
#[test]
fn as_home_directory_when_passed_as_argument_and_begins_with_tilde() {
let actual = nu!(
cwd: ".",
r#"
cococo ~
"#
);
assert!(
!actual.contains('~'),
format!("'{}' should not contain ~", actual)
);
}
#[test]
fn does_not_expand_when_passed_as_argument_and_does_not_start_with_tilde() {
let actual = nu!(
cwd: ".",
r#"
cococo "1~1"
"#
);
assert_eq!(actual, "1~1");
}
}