Remove file I/O from tests that don't need it (#11182)

# Description

This PR implements modifications to command tests that write unnecessary
json and csv to disk then load it with open, by using nuon literals
instead.

- Fixes #7189



# User-Facing Changes
None

# Tests + Formatting
This only affects existing tests, which still pass.
This commit is contained in:
Renan Ribeiro 2023-11-29 19:21:34 -03:00 committed by GitHub
parent d08e254d16
commit 54d73748e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 414 additions and 760 deletions

View File

@ -1,13 +1,8 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn discards_rows_where_given_column_is_empty() {
Playground::setup("compact_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_amigos.json",
r#"
let sample_json = r#"
{
"amigos": [
{"name": "Yehuda", "rusty_luck": 1},
@ -16,27 +11,22 @@ fn discards_rows_where_given_column_is_empty() {
{"name":"GorbyPuff"}
]
}
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_tres_amigos.json
{sample_json}
| get amigos
| compact rusty_luck
| length
"
));
)));
assert_eq!(actual.out, "3");
});
}
#[test]
fn discards_empty_rows_by_default() {
Playground::setup("compact_test_2", |dirs, _| {
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(
r#"
echo "[1,2,3,14,null]"
| from json
@ -46,5 +36,4 @@ fn discards_empty_rows_by_default() {
));
assert_eq!(actual.out, "4");
});
}

View File

@ -1,13 +1,8 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn adds_row_data_if_column_missing() {
Playground::setup("default_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_amigos.json",
r#"
let sample = r#"
{
"amigos": [
{"name": "Yehuda"},
@ -16,22 +11,19 @@ fn adds_row_data_if_column_missing() {
{"name":"GorbyPuff"}
]
}
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_tres_amigos.json
{sample}
| get amigos
| default 1 rusty_luck
| where rusty_luck == 1
| length
"
));
)));
assert_eq!(actual.out, "2");
});
}
#[test]

View File

@ -1,5 +1,3 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
@ -43,10 +41,7 @@ fn flatten_nested_tables() {
#[test]
fn flatten_row_column_explicitly() {
Playground::setup("flatten_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"katz.json",
r#"
let sample = r#"
[
{
"people": {
@ -61,24 +56,18 @@ fn flatten_row_column_explicitly() {
}
}
]
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(),
"open katz.json | flatten people --all | where name == Andres | length"
);
let actual = nu!(pipeline(&format!(
"{sample} | flatten people --all | where name == Andres | length"
)));
assert_eq!(actual.out, "1");
})
}
#[test]
fn flatten_row_columns_having_same_column_names_flats_separately() {
Playground::setup("flatten_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"katz.json",
r#"
let sample = r#"
[
{
"people": {
@ -95,24 +84,18 @@ fn flatten_row_columns_having_same_column_names_flats_separately() {
"city": [{"name": "Oregon"}, {"name": "Brooklin"}]
}
]
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(),
"open katz.json | flatten --all | flatten people city | get city_name | length"
);
let actual = nu!(pipeline(&format!(
"{sample} | flatten --all | flatten people city | get city_name | length"
)));
assert_eq!(actual.out, "4");
})
}
#[test]
fn flatten_table_columns_explicitly() {
Playground::setup("flatten_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"katz.json",
r#"
let sample = r#"
[
{
"people": {
@ -129,24 +112,18 @@ fn flatten_table_columns_explicitly() {
"city": ["Oregon", "Brooklin"]
}
]
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(),
"open katz.json | flatten city --all | where people.name == Katz | length"
);
let actual = nu!(pipeline(&format!(
"{sample} | flatten city --all | where people.name == Katz | length",
)));
assert_eq!(actual.out, "2");
})
}
#[test]
fn flatten_more_than_one_column_that_are_subtables_not_supported() {
Playground::setup("flatten_test_4", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"katz.json",
r#"
let sample = r#"
[
{
"people": {
@ -165,15 +142,10 @@ fn flatten_more_than_one_column_that_are_subtables_not_supported() {
"city": ["Oregon", "Brooklin"]
}
]
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(),
"open katz.json | flatten tags city --all"
);
let actual = nu!(pipeline(&format!("{sample} | flatten tags city --all")));
assert!(actual.err.contains("tried flattening"));
assert!(actual.err.contains("but is flattened already"));
})
}

View File

@ -1,40 +1,29 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn groups() {
Playground::setup("group_by_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
"#,
)]);
let sample = r#"
[[first_name, last_name, rusty_at, type];
[Andrés, Robalino, "10/11/2013", A],
[JT, Turner, "10/12/2013", B],
[Yehuda, Katz, "10/11/2013", A]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_tres_caballeros.csv
{sample}
| group-by rusty_at
| get "10/11/2013"
| length
"#
));
)));
assert_eq!(actual.out, "2");
})
}
#[test]
fn errors_if_given_unknown_column_name() {
Playground::setup("group_by_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.json",
r#"
let sample = r#"
{
"nu": {
"committers": [
@ -54,46 +43,33 @@ fn errors_if_given_unknown_column_name() {
]
}
}
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_tres_caballeros.json
| group-by {|| get nu.releases.version }
'{sample}'
| from json
| group-by {{|| get nu.releases.version }}
"#
));
)));
assert!(actual
.err
.contains("requires a table with one value for grouping"));
})
}
#[test]
fn errors_if_column_not_found() {
Playground::setup("group_by_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
"#,
)]);
let sample = r#"
[[first_name, last_name, rusty_at, type];
[Andrés, Robalino, "10/11/2013", A],
[JT, Turner, "10/12/2013", B],
[Yehuda, Katz, "10/11/2013", A]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
"
open los_tres_caballeros.csv
| group-by ttype
"
));
let actual = nu!(pipeline(&format!("{sample} | group-by ttype")));
assert!(actual.err.contains("did you mean 'type'"),);
})
}
#[test]

View File

@ -1,95 +1,61 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
const SAMPLE_INPUT: &str = r#"
[[first_name, last_name, rusty_at];
[Andrés, Robalino, Ecuador],
[JT, Turner, "Estados Unidos"],
[Yehuda, Katz, "Estados Unidos"]]
"#;
#[test]
fn summarizes_by_column_given() {
Playground::setup("histogram_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
let actual = nu!(pipeline(&format!(
r#"
first_name,last_name,rusty_at
Andrés,Robalino,Ecuador
JT,Turner,Estados Unidos
Yehuda,Katz,Estados Unidos
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open los_tres_caballeros.csv
{SAMPLE_INPUT}
| histogram rusty_at countries --percentage-type relative
| where rusty_at == "Ecuador"
| get countries
| get 0
"#
));
)));
assert_eq!(
actual.out,
"**************************************************"
);
// 50%
})
}
#[test]
fn summarizes_by_column_given_with_normalize_percentage() {
Playground::setup("histogram_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
let actual = nu!(pipeline(&format!(
r#"
first_name,last_name,rusty_at
Andrés,Robalino,Ecuador
JT,Turner,Estados Unidos
Yehuda,Katz,Estados Unidos
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open los_tres_caballeros.csv
{SAMPLE_INPUT}
| histogram rusty_at countries
| where rusty_at == "Ecuador"
| get countries
| get 0
"#
));
)));
assert_eq!(actual.out, "*********************************");
// 33%
})
}
#[test]
fn summarizes_by_values() {
Playground::setup("histogram_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
let actual = nu!(pipeline(&format!(
r#"
first_name,last_name,rusty_at
Andrés,Robalino,Ecuador
JT,Turner,Estados Unidos
Yehuda,Katz,Estados Unidos
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open los_tres_caballeros.csv
{SAMPLE_INPUT}
| get rusty_at
| histogram
| where value == "Estados Unidos"
| get count
| get 0
"#
));
)));
assert_eq!(actual.out, "2");
})
}
#[test]

View File

@ -1,14 +1,9 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
use std::str::FromStr;
#[test]
fn all() {
Playground::setup("sum_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"meals.json",
r#"
let sample = r#"
{
meals: [
{description: "1 large egg", calories: 90},
@ -16,21 +11,18 @@ fn all() {
{description: "1 tablespoon fish oil", calories: 108}
]
}
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open meals.json
{sample}
| get meals
| get calories
| math sum
"#
));
)));
assert_eq!(actual.out, "448");
})
}
#[test]

View File

@ -1,44 +1,27 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn row() {
Playground::setup("merge_test_1", |dirs, sandbox| {
sandbox.with_files(vec![
FileWithContentToBeTrimmed(
"caballeros.csv",
r#"
name,country,luck
Andrés,Ecuador,0
JT,USA,0
Jason,Canada,0
Yehuda,USA,0
"#,
),
FileWithContentToBeTrimmed(
"new_caballeros.csv",
r#"
name,country,luck
Andrés Robalino,Guayaquil Ecuador,1
JT Turner,New Zealand,1
"#,
),
]);
let left_sample = r#"[[name, country, luck];
[Andrés, Ecuador, 0],
[JT, USA, 0],
[Jason, Canada, 0],
[Yehuda, USA, 0]]"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
open caballeros.csv
| merge (open new_caballeros.csv)
let right_sample = r#"[[name, country, luck];
["Andrés Robalino", "Guayaquil Ecuador", 1],
["JT Turner", "New Zealand", 1]]"#;
let actual = nu!(pipeline(&format!(
r#" ({left_sample})
| merge ({right_sample})
| where country in ["Guayaquil Ecuador" "New Zealand"]
| get luck
| math sum
"#
));
)));
assert_eq!(actual.out, "2");
});
}
#[test]

View File

@ -1,130 +1,102 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn moves_a_column_before() {
Playground::setup("move_column_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"sample.csv",
r#"
column1,column2,column3,...,column98,column99,column100
-------,-------,-------,---,--------, A ,---------
-------,-------,-------,---,--------, N ,---------
-------,-------,-------,---,--------, D ,---------
-------,-------,-------,---,--------, R ,---------
-------,-------,-------,---,--------, E ,---------
-------,-------,-------,---,--------, S ,---------
"#,
)]);
let sample = r#"
[[column1 column2 column3 ... column98 column99 column100];
[------- ------- ------- --- -------- " A " ---------],
[------- ------- ------- --- -------- " N " ---------],
[------- ------- ------- --- -------- " D " ---------],
[------- ------- ------- --- -------- " R " ---------],
[------- ------- ------- --- -------- " E " ---------],
[------- ------- ------- --- -------- " S " ---------]]"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open sample.csv
{sample}
| move column99 --before column1
| rename chars
| get chars
| str trim
| str join
"#
));
)));
assert!(actual.out.contains("ANDRES"));
})
}
#[test]
fn moves_columns_before() {
Playground::setup("move_column_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"sample.csv",
r#"
column1,column2,column3,...,column98,column99,column100
-------,-------, A ,---,--------, N ,---------
-------,-------, D ,---,--------, R ,---------
-------,-------, E ,---,--------, S ,---------
-------,-------, : ,---,--------, : ,---------
-------,-------, J ,---,--------, T ,---------
"#,
)]);
let sample = r#"
[[column1 column2 column3 ... column98 column99 column100];
[------- ------- " A " --- -------- " N " ---------]
[------- ------- " D " --- -------- " R " ---------]
[------- ------- " E " --- -------- " S " ---------]
[------- ------- " : " --- -------- " : " ---------]
[------- ------- " J " --- -------- " T " ---------]]"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open sample.csv
{sample}
| move column99 column3 --before column2
| rename _ chars_1 chars_2
| select chars_2 chars_1
| upsert new_col {|f| $f | transpose | get column1 | str trim | str join}
| upsert new_col {{|f| $f | transpose | get column1 | str trim | str join}}
| get new_col
| str join
"#
));
)));
assert!(actual.out.contains("ANDRES::JT"));
})
}
#[test]
fn moves_a_column_after() {
Playground::setup("move_column_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"sample.csv",
r#"
column1,column2,letters,...,column98,and_more,column100
-------,-------, A ,---,--------, N ,---------
-------,-------, D ,---,--------, R ,---------
-------,-------, E ,---,--------, S ,---------
-------,-------, : ,---,--------, : ,---------
-------,-------, J ,---,--------, T ,---------
"#,
)]);
let sample = r#"
[[column1 column2 letters ... column98 and_more column100];
[------- ------- " A " --- -------- " N " ---------]
[------- ------- " D " --- -------- " R " ---------]
[------- ------- " E " --- -------- " S " ---------]
[------- ------- " : " --- -------- " : " ---------]
[------- ------- " J " --- -------- " T " ---------]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open sample.csv
{sample}
| move letters --after and_more
| move letters and_more --before column2
| rename _ chars_1 chars_2
| select chars_1 chars_2
| upsert new_col {|f| $f | transpose | get column1 | str trim | str join}
| upsert new_col {{|f| $f | transpose | get column1 | str trim | str join}}
| get new_col
| str join
"#
));
)));
assert!(actual.out.contains("ANDRES::JT"));
})
}
#[test]
fn moves_columns_after() {
Playground::setup("move_column_test_4", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"sample.csv",
r#"
column1,column2,letters,...,column98,and_more,column100
-------,-------, A ,---,--------, N ,---------
-------,-------, D ,---,--------, R ,---------
-------,-------, E ,---,--------, S ,---------
-------,-------, : ,---,--------, : ,---------
-------,-------, J ,---,--------, T ,---------
"#,
)]);
let content = r#"
[[column1 column2 letters ... column98 and_more column100];
[------- ------- " A " --- -------- " N " ---------]
[------- ------- " D " --- -------- " R " ---------]
[------- ------- " E " --- -------- " S " ---------]
[------- ------- " : " --- -------- " : " ---------]
[------- ------- " J " --- -------- " T " ---------]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open sample.csv
{content}
| move letters and_more --after column1
| columns
| select 1 2
| str join
"#
));
)));
assert!(actual.out.contains("lettersand_more"));
})
}

View File

@ -1,116 +1,85 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn changes_the_column_name() {
Playground::setup("rename_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_cuatro_mosqueteros.txt",
r#"
Andrés N. Robalino
JT Turner
Yehuda Katz
Jason Gedge
"#,
)]);
let sample = r#"
[["Andrés N. Robalino"],
["JT Turner"],
["Yehuda Katz"],
["Jason Gedge"]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
"
open los_cuatro_mosqueteros.txt
| lines
let actual = nu!(pipeline(&format!(
" {sample}
| wrap name
| rename mosqueteros
| get mosqueteros
| length
"
));
)));
assert_eq!(actual.out, "4");
})
}
#[test]
fn keeps_remaining_original_names_given_less_new_names_than_total_original_names() {
Playground::setup("rename_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_cuatro_mosqueteros.txt",
r#"
Andrés N. Robalino
JT Turner
Yehuda Katz
Jason Gedge
"#,
)]);
let sample = r#"
[["Andrés N. Robalino"],
["JT Turner"],
["Yehuda Katz"],
["Jason Gedge"]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_cuatro_mosqueteros.txt
| lines
{sample}
| wrap name
| default "arepa!" hit
| rename mosqueteros
| get hit
| length
"#
));
)));
assert_eq!(actual.out, "4");
})
}
#[test]
fn errors_if_no_columns_present() {
Playground::setup("rename_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_cuatro_mosqueteros.txt",
r#"
Andrés N. Robalino
JT Turner
Yehuda Katz
Jason Gedge
"#,
)]);
let sample = r#"
[["Andrés N. Robalino"],
["JT Turner"],
["Yehuda Katz"],
["Jason Gedge"]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_cuatro_mosqueteros.txt
| lines
{sample}
| rename mosqueteros
"
));
)));
assert!(actual.err.contains("command doesn't support"));
})
}
#[test]
fn errors_if_columns_param_is_empty() {
Playground::setup("rename_test_4", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_cuatro_mosqueteros.txt",
r#"
Andrés N. Robalino
JT Turner
Yehuda Katz
Jason Gedge
"#,
)]);
let sample = r#"
[["Andrés N. Robalino"],
["JT Turner"],
["Yehuda Katz"],
["Jason Gedge"]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_cuatro_mosqueteros.txt
| lines
{sample}
| wrap name
| default "arepa!" hit
| rename --column {}
| rename --column {{}}
"#
));
)));
assert!(actual.err.contains("The column info cannot be empty"));
})
}

View File

@ -1,4 +1,4 @@
use nu_test_support::fs::Stub::{EmptyFile, FileWithContentToBeTrimmed};
use nu_test_support::fs::Stub::EmptyFile;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
@ -24,10 +24,7 @@ fn regular_columns() {
#[test]
fn complex_nested_columns() {
Playground::setup("select_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.json",
r#"
let sample = r#"
{
"nu": {
"committers": [
@ -47,22 +44,19 @@ fn complex_nested_columns() {
]
}
}
"#,
)]);
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_tres_caballeros.json
{sample}
| select nu."0xATYKARNU" nu.committers.name nu.releases.version
| get nu_releases_version
| where $it > "0.8"
| get 0
"#
));
)));
assert_eq!(actual.out, "0.9999999");
})
}
#[test]

View File

@ -1,53 +1,38 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn condition_is_met() {
Playground::setup("skip_until_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt",
r#"
CHICKEN SUMMARY report date: April 29th, 2020
--------------------------------------------------------------------
Chicken Collection,29/04/2020,30/04/2020,31/04/2020
Yellow Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,1
Blue Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,2
Red Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,3
"#,
)]);
let sample = r#"
[["Chicken Collection", "29/04/2020", "30/04/2020", "31/04/2020"];
["Yellow Chickens", "", "", ""],
[Andrés, 0, 0, 1],
[JT, 0, 0, 1],
[Jason, 0, 0, 1],
[Yehuda, 0, 0, 1],
["Blue Chickens", "", "", ""],
[Andrés, 0, 0, 2],
[JT, 0, 0, 2],
[Jason, 0, 0, 2],
[Yehuda, 0, 0, 2],
["Red Chickens", "", "", ""],
[Andrés, 0, 0, 1],
[JT, 0, 0, 1],
[Jason, 0, 0, 1],
[Yehuda, 0, 0, 3]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open --raw ./caballeros.txt
| lines
| skip 2
| str trim
| str join (char nl)
| from csv
| skip until {|row| $row."Chicken Collection" == "Red Chickens" }
{sample}
| skip until {{|row| $row."Chicken Collection" == "Red Chickens" }}
| skip 1
| into int "31/04/2020"
| get "31/04/2020"
| math sum
"#
));
)));
assert_eq!(actual.out, "6");
})
}
#[test]

View File

@ -1,53 +1,38 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn condition_is_met() {
Playground::setup("skip_while_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt",
r#"
CHICKEN SUMMARY report date: April 29th, 2020
--------------------------------------------------------------------
Chicken Collection,29/04/2020,30/04/2020,31/04/2020
Yellow Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,1
Blue Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,2
Red Chickens,,,
Andrés,0,0,1
JT,0,0,1
Jason,0,0,1
Yehuda,0,0,3
"#,
)]);
let sample = r#"
[["Chicken Collection", "29/04/2020", "30/04/2020", "31/04/2020"];
["Yellow Chickens", "", "", ""],
[Andrés, 0, 0, 1],
[JT, 0, 0, 1],
[Jason, 0, 0, 1],
[Yehuda, 0, 0, 1],
["Blue Chickens", "", "", ""],
[Andrés, 0, 0, 2],
[JT, 0, 0, 2],
[Jason, 0, 0, 2],
[Yehuda, 0, 0, 2],
["Red Chickens", "", "", ""],
[Andrés, 0, 0, 1],
[JT, 0, 0, 1],
[Jason, 0, 0, 1],
[Yehuda, 0, 0, 3]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open --raw caballeros.txt
| lines
| skip 2
| str trim
| str join (char nl)
| from csv
| skip while {|row| $row."Chicken Collection" != "Red Chickens" }
{sample}
| skip while {{|row| $row."Chicken Collection" != "Red Chickens" }}
| skip 1
| into int "31/04/2020"
| get "31/04/2020"
| math sum
"#
));
)));
assert_eq!(actual.out, "6");
})
}
#[test]

View File

@ -1,33 +1,27 @@
use nu_test_support::fs::Stub::{EmptyFile, FileWithContentToBeTrimmed};
use nu_test_support::fs::Stub::EmptyFile;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn splits() {
Playground::setup("split_by_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
"#,
)]);
let sample = r#"
[[first_name, last_name, rusty_at, type];
[Andrés, Robalino, "10/11/2013", A],
[JT, Turner, "10/12/2013", B],
[Yehuda, Katz, "10/11/2013", A]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open los_tres_caballeros.csv
{sample}
| group-by rusty_at
| split-by type
| get A."10/11/2013"
| length
"#
));
)));
assert_eq!(actual.out, "2");
})
}
#[test]

View File

@ -1,33 +1,24 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn rows() {
Playground::setup("take_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.csv",
r#"
name,lucky_code
Andrés,1
JT,1
Jason,2
Yehuda,1
"#,
)]);
let sample = r#"
[[name, lucky_code];
[Andrés, 1],
[JT , 1],
[Jason , 2],
[Yehuda, 1]]"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open caballeros.csv
{sample}
| take 3
| get lucky_code
| math sum
"#
));
)));
assert_eq!(actual.out, "4");
})
}
#[test]

View File

@ -1,54 +1,39 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn condition_is_met() {
Playground::setup("take_until_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt",
r#"
CHICKEN SUMMARY report date: April 29th, 2020
--------------------------------------------------------------------
Chicken Collection,29/04/2020,30/04/2020,31/04/2020
Yellow Chickens,,,
Andrés,1,1,1
JT,1,1,1
Jason,1,1,1
Yehuda,1,1,1
Blue Chickens,,,
Andrés,1,1,2
JT,1,1,2
Jason,1,1,2
Yehuda,1,1,2
Red Chickens,,,
Andrés,1,1,3
JT,1,1,3
Jason,1,1,3
Yehuda,1,1,3
"#,
)]);
let sample = r#"
[["Chicken Collection", "29/04/2020", "30/04/2020", "31/04/2020"];
["Yellow Chickens", "", "", ""],
[Andrés, 1, 1, 1],
[JT, 1, 1, 1],
[Jason, 1, 1, 1],
[Yehuda, 1, 1, 1],
["Blue Chickens", "", "", ""],
[Andrés, 1, 1, 2],
[JT, 1, 1, 2],
[Jason, 1, 1, 2],
[Yehuda, 1, 1, 2],
["Red Chickens", "", "", ""],
[Andrés, 1, 1, 3],
[JT, 1, 1, 3],
[Jason, 1, 1, 3],
[Yehuda, 1, 1, 3]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open --raw caballeros.txt
| lines
| skip 2
| str trim
| str join (char nl)
| from csv
| skip while {|row| $row."Chicken Collection" != "Blue Chickens" }
| take until {|row| $row."Chicken Collection" == "Red Chickens" }
{sample}
| skip while {{|row| $row."Chicken Collection" != "Blue Chickens" }}
| take until {{|row| $row."Chicken Collection" == "Red Chickens" }}
| skip 1
| into int "31/04/2020"
| get "31/04/2020"
| math sum
"#
));
)));
assert_eq!(actual.out, "8");
})
}
#[test]

View File

@ -1,53 +1,38 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn condition_is_met() {
Playground::setup("take_while_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt",
r#"
CHICKEN SUMMARY report date: April 29th, 2020
--------------------------------------------------------------------
Chicken Collection,29/04/2020,30/04/2020,31/04/2020
Yellow Chickens,,,
Andrés,1,1,1
JT,1,1,1
Jason,1,1,1
Yehuda,1,1,1
Blue Chickens,,,
Andrés,1,1,2
JT,1,1,2
Jason,1,1,2
Yehuda,1,1,2
Red Chickens,,,
Andrés,1,1,3
JT,1,1,3
Jason,1,1,3
Yehuda,1,1,3
"#,
)]);
let sample = r#"
[["Chicken Collection", "29/04/2020", "30/04/2020", "31/04/2020"];
["Yellow Chickens", "", "", ""],
[Andrés, 1, 1, 1],
[JT, 1, 1, 1],
[Jason, 1, 1, 1],
[Yehuda, 1, 1, 1],
["Blue Chickens", "", "", ""],
[Andrés, 1, 1, 2],
[JT, 1, 1, 2],
[Jason, 1, 1, 2],
[Yehuda, 1, 1, 2],
["Red Chickens", "", "", ""],
[Andrés, 1, 1, 3],
[JT, 1, 1, 3],
[Jason, 1, 1, 3],
[Yehuda, 1, 1, 3]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
r#"
open --raw caballeros.txt
| lines
| skip 2
| str trim
| str join (char nl)
| from csv
{sample}
| skip 1
| take while {|row| $row."Chicken Collection" != "Blue Chickens"}
| take while {{|row| $row."Chicken Collection" != "Blue Chickens"}}
| into int "31/04/2020"
| get "31/04/2020"
| math sum
"#
));
)));
assert_eq!(actual.out, "4");
})
}
#[test]

View File

@ -1,62 +1,27 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
const SAMPLE_CSV_CONTENT: &str = r#"
[[first_name, last_name, rusty_at, type];
[Andrés, Robalino, "10/11/2013", A],
[JT, Turner, "10/12/2013", B],
[Yehuda, Katz, "10/11/2013", A],
[JT, Turner, "10/12/2013", B],
[Yehuda, Katz, "10/11/2013", A]]
"#;
#[test]
fn removes_duplicate_rows() {
Playground::setup("uniq_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
"
open los_tres_caballeros.csv
| uniq
| length
"
));
let actual = nu!(pipeline(&format!("{SAMPLE_CSV_CONTENT} | uniq | length ")));
assert_eq!(actual.out, "3");
})
}
#[test]
fn uniq_values() {
Playground::setup("uniq_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
JT,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
"#,
)]);
let actual = nu!(
cwd: dirs.test(), pipeline(
"
open los_tres_caballeros.csv
| select type
| uniq
| length
"
));
let actual = nu!(pipeline(&format!(
"{SAMPLE_CSV_CONTENT} | select type | uniq | length ",
)));
assert_eq!(actual.out, "2");
})
}
#[test]
@ -68,10 +33,7 @@ fn uniq_empty() {
#[test]
fn nested_json_structures() {
Playground::setup("uniq_test_3", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"nested_json_structures.json",
r#"
let sample = r#"
[
{
"name": "this is duplicated",
@ -114,19 +76,11 @@ fn nested_json_structures() {
}
}
]
"#,
)]);
"#;
let actual = nu!(pipeline(&format!("'{sample}' | from json | uniq | length")));
let actual = nu!(
cwd: dirs.test(), pipeline(
"
open nested_json_structures.json
| uniq
| length
"
));
assert_eq!(actual.out, "3");
})
}
#[test]

View File

@ -1,32 +1,24 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn removes_duplicate_rows() {
Playground::setup("uniq_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.csv",
r#"
first_name,last_name,rusty_at,type
Andrés,Robalino,10/11/2013,A
Afonso,Turner,10/12/2013,B
Yehuda,Katz,10/11/2013,A
JT,Turner,11/12/2011,O
"#,
)]);
let sample = r#"
[[first_name , last_name, rusty_at, type];
[Andrés , Robalino, "10/11/2013", A],
[Afonso , Turner, "10/12/2013", B],
[Yehuda , Katz, "10/11/2013", A],
[JT , Turner, "11/12/2011", O]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_tres_caballeros.csv
{sample}
| uniq-by last_name
| length
"
));
)));
assert_eq!(actual.out, "3");
})
}
#[test]

View File

@ -1,61 +1,45 @@
use nu_test_support::fs::Stub::FileWithContentToBeTrimmed;
use nu_test_support::playground::Playground;
use nu_test_support::{nu, pipeline};
#[test]
fn wrap_rows_into_a_row() {
Playground::setup("wrap_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.txt",
r#"
first_name,last_name
Andrés,Robalino
JT,Turner
Yehuda,Katz
"#,
)]);
let sample = r#"
[[first_name, last_name];
[Andrés, Robalino],
[JT, Turner],
[Yehuda, Katz]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_tres_caballeros.txt
| from csv
{sample}
| wrap caballeros
| get caballeros
| get 0
| get last_name
"
));
)));
assert_eq!(actual.out, "Robalino");
})
}
#[test]
fn wrap_rows_into_a_table() {
Playground::setup("wrap_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"los_tres_caballeros.txt",
r#"
first_name,last_name
Andrés,Robalino
JT,Turner
Yehuda,Katz
"#,
)]);
let sample = r#"
[[first_name, last_name];
[Andrés, Robalino],
[JT, Turner],
[Yehuda, Katz]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open los_tres_caballeros.txt
| from csv
{sample}
| get last_name
| wrap caballero
| get 2
| get caballero
"
));
)));
assert_eq!(actual.out, "Katz");
})
}

View File

@ -5,31 +5,25 @@ use pretty_assertions::assert_eq;
#[test]
fn takes_rows_of_nu_value_strings_and_pipes_it_to_stdin_of_external() {
Playground::setup("internal_to_external_pipe_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed(
"nu_times.csv",
"
name,rusty_luck,origin
Jason,1,Canada
JT,1,New Zealand
Andrés,1,Ecuador
AndKitKatz,1,Estados Unidos
",
)]);
let sample = r#"
[[name, rusty_luck, origin];
[Jason, 1, Canada],
[JT, 1, "New Zealand"],
[Andrés, 1, Ecuador],
[AndKitKatz, 1, "Estados Unidos"]]
"#;
let actual = nu!(
cwd: dirs.test(), pipeline(
let actual = nu!(pipeline(&format!(
"
open nu_times.csv
{sample}
| get origin
| each { |it| nu --testbin cococo $it | nu --testbin chop }
| each {{ |it| nu --testbin cococo $it | nu --testbin chop }}
| get 2
"
));
)));
// chop will remove the last escaped double quote from \"Estados Unidos\"
assert_eq!(actual.out, "Ecuado");
})
}
#[test]
@ -111,7 +105,7 @@ fn subexpression_handles_dot() {
));
assert_eq!(actual.out, "AndKitKat");
})
});
}
#[test]