forked from extern/nushell
29431e73c2
This commit changes the way we shell out externals when using the `"$it"` argument. Also pipes per row to an external's stdin if no `"$it"` argument is present for external commands. Further separation of logic (preparing the external's command arguments, getting the data for piping, emitting values, spawning processes) will give us a better idea for lower level details regarding external commands until we can find the right abstractions for making them more generic and unify within the pipeline calling logic of Nu internal's and external's.
137 lines
3.7 KiB
Rust
137 lines
3.7 KiB
Rust
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
|
|
use nu_test_support::playground::Playground;
|
|
use nu_test_support::{nu, pipeline};
|
|
|
|
#[test]
|
|
fn table_to_tsv_text_and_from_tsv_text_back_into_table() {
|
|
let actual = nu!(
|
|
cwd: "tests/fixtures/formats",
|
|
"open caco3_plastics.tsv | to-tsv | from-tsv | first 1 | get origin | echo $it"
|
|
);
|
|
|
|
assert_eq!(actual, "SPAIN");
|
|
}
|
|
|
|
#[test]
|
|
fn table_to_tsv_text_and_from_tsv_text_back_into_table_using_csv_separator() {
|
|
let actual = nu!(
|
|
cwd: "tests/fixtures/formats",
|
|
r"open caco3_plastics.tsv | to-tsv | from-csv --separator '\t' | first 1 | get origin | echo $it"
|
|
);
|
|
|
|
assert_eq!(actual, "SPAIN");
|
|
}
|
|
|
|
#[test]
|
|
fn table_to_tsv_text() {
|
|
Playground::setup("filter_to_tsv_test_1", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"tsv_text_sample.txt",
|
|
r#"
|
|
importer shipper tariff_item name origin
|
|
Plasticos Rival Reverte 2509000000 Calcium carbonate Spain
|
|
Tigre Ecuador OMYA Andina 3824909999 Calcium carbonate Colombia
|
|
"#,
|
|
)]);
|
|
|
|
let actual = nu!(
|
|
cwd: dirs.test(), pipeline(
|
|
r#"
|
|
open tsv_text_sample.txt
|
|
| lines
|
|
| split-column "\t" a b c d origin
|
|
| last 1
|
|
| to-tsv
|
|
| lines
|
|
| nth 1
|
|
| echo $it
|
|
"#
|
|
));
|
|
|
|
assert!(actual.contains("Colombia"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn table_to_tsv_text_skipping_headers_after_conversion() {
|
|
Playground::setup("filter_to_tsv_test_2", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"tsv_text_sample.txt",
|
|
r#"
|
|
importer shipper tariff_item name origin
|
|
Plasticos Rival Reverte 2509000000 Calcium carbonate Spain
|
|
Tigre Ecuador OMYA Andina 3824909999 Calcium carbonate Colombia
|
|
"#,
|
|
)]);
|
|
|
|
let actual = nu!(
|
|
cwd: dirs.test(), pipeline(
|
|
r#"
|
|
open tsv_text_sample.txt
|
|
| lines
|
|
| split-column "\t" a b c d origin
|
|
| last 1
|
|
| to-tsv --headerless
|
|
| echo $it
|
|
"#
|
|
));
|
|
|
|
assert!(actual.contains("Colombia"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn from_tsv_text_to_table() {
|
|
Playground::setup("filter_from_tsv_test_1", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"los_tres_amigos.txt",
|
|
r#"
|
|
first Name Last Name rusty_luck
|
|
Andrés Robalino 1
|
|
Jonathan Turner 1
|
|
Yehuda Katz 1
|
|
"#,
|
|
)]);
|
|
|
|
let actual = nu!(
|
|
cwd: dirs.test(), pipeline(
|
|
r#"
|
|
open los_tres_amigos.txt
|
|
| from-tsv
|
|
| get rusty_luck
|
|
| count
|
|
| echo $it
|
|
"#
|
|
));
|
|
|
|
assert_eq!(actual, "3");
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn from_tsv_text_skipping_headers_to_table() {
|
|
Playground::setup("filter_from_tsv_test_2", |dirs, sandbox| {
|
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
|
"los_tres_amigos.txt",
|
|
r#"
|
|
Andrés Robalino 1
|
|
Jonathan Turner 1
|
|
Yehuda Katz 1
|
|
"#,
|
|
)]);
|
|
|
|
let actual = nu!(
|
|
cwd: dirs.test(), pipeline(
|
|
r#"
|
|
open los_tres_amigos.txt
|
|
| from-tsv --headerless
|
|
| get Column3
|
|
| count
|
|
| echo $it
|
|
"#
|
|
));
|
|
|
|
assert_eq!(actual, "3");
|
|
})
|
|
}
|