mirror of
https://github.com/nushell/nushell.git
synced 2024-11-25 01:43:47 +01:00
make first
behave same way as last
: always return list when with number argument (#6616)
* make `first` behave same way as `last` * better behaviour * fix tests * add tests
This commit is contained in:
parent
dd578926c3
commit
32fbcf39cc
@ -146,7 +146,7 @@ fn first_helper(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
if rows_desired == 1 {
|
if rows_desired == 1 && rows.is_none() {
|
||||||
match input_peek.next() {
|
match input_peek.next() {
|
||||||
Some(val) => Ok(val.into_pipeline_data()),
|
Some(val) => Ok(val.into_pipeline_data()),
|
||||||
None => Err(ShellError::AccessBeyondEndOfStream(head)),
|
None => Err(ShellError::AccessBeyondEndOfStream(head)),
|
||||||
|
@ -65,3 +65,17 @@ fn gets_first_row_when_no_amount_given() {
|
|||||||
assert_eq!(actual.out, "1");
|
assert_eq!(actual.out, "1");
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn gets_first_row_as_list_when_amount_given() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
[1, 2, 3]
|
||||||
|
| first 1
|
||||||
|
| describe
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "list<int>");
|
||||||
|
}
|
||||||
|
@ -64,3 +64,17 @@ fn requests_more_rows_than_table_has() {
|
|||||||
|
|
||||||
assert_eq!(actual.out, "1");
|
assert_eq!(actual.out, "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn gets_last_row_as_list_when_amount_given() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
[1, 2, 3]
|
||||||
|
| last 1
|
||||||
|
| describe
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "list<int>");
|
||||||
|
}
|
||||||
|
@ -9,7 +9,7 @@ fn lines() {
|
|||||||
| lines
|
| lines
|
||||||
| skip while $it != "[dependencies]"
|
| skip while $it != "[dependencies]"
|
||||||
| skip 1
|
| skip 1
|
||||||
| first 1
|
| first
|
||||||
| split column "="
|
| split column "="
|
||||||
| get column1.0
|
| get column1.0
|
||||||
| str trim
|
| str trim
|
||||||
|
@ -154,7 +154,7 @@ fn parses_tsv() {
|
|||||||
cwd: "tests/fixtures/formats", pipeline(
|
cwd: "tests/fixtures/formats", pipeline(
|
||||||
r#"
|
r#"
|
||||||
open caco3_plastics.tsv
|
open caco3_plastics.tsv
|
||||||
| first 1
|
| first
|
||||||
| get origin
|
| get origin
|
||||||
"#
|
"#
|
||||||
));
|
));
|
||||||
@ -216,7 +216,7 @@ fn parses_arrow_ipc() {
|
|||||||
r#"
|
r#"
|
||||||
open-df caco3_plastics.arrow
|
open-df caco3_plastics.arrow
|
||||||
| into nu
|
| into nu
|
||||||
| first 1
|
| first
|
||||||
| get origin
|
| get origin
|
||||||
"#
|
"#
|
||||||
));
|
));
|
||||||
|
@ -4,7 +4,7 @@ use nu_test_support::nu;
|
|||||||
fn can_get_reverse_first() {
|
fn can_get_reverse_first() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
"ls | sort-by name | reverse | first 1 | get name | str trim "
|
"ls | sort-by name | reverse | first | get name | str trim "
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "utf16.ini");
|
assert_eq!(actual.out, "utf16.ini");
|
||||||
|
@ -12,7 +12,7 @@ fn by_column() {
|
|||||||
| split column "="
|
| split column "="
|
||||||
| sort-by column1
|
| sort-by column1
|
||||||
| skip 1
|
| skip 1
|
||||||
| first 1
|
| first
|
||||||
| get column1
|
| get column1
|
||||||
| str trim
|
| str trim
|
||||||
"#
|
"#
|
||||||
@ -33,7 +33,7 @@ fn by_invalid_column() {
|
|||||||
| split column "="
|
| split column "="
|
||||||
| sort-by ColumnThatDoesNotExist
|
| sort-by ColumnThatDoesNotExist
|
||||||
| skip 1
|
| skip 1
|
||||||
| first 1
|
| first
|
||||||
| get column1
|
| get column1
|
||||||
| str trim
|
| str trim
|
||||||
"#
|
"#
|
||||||
@ -69,7 +69,7 @@ fn sort_primitive_values() {
|
|||||||
| skip 1
|
| skip 1
|
||||||
| first 6
|
| first 6
|
||||||
| sort-by
|
| sort-by
|
||||||
| first 1
|
| first
|
||||||
"#
|
"#
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use nu_test_support::pipeline;
|
|||||||
fn filters_by_unit_size_comparison() {
|
fn filters_by_unit_size_comparison() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
"ls | where size > 1kib | sort-by size | get name | first 1 | str trim"
|
"ls | where size > 1kib | sort-by size | get name | first | str trim"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "cargo_sample.toml");
|
assert_eq!(actual.out, "cargo_sample.toml");
|
||||||
@ -103,7 +103,7 @@ fn binary_operator_comparisons() {
|
|||||||
open sample.db
|
open sample.db
|
||||||
| get ints
|
| get ints
|
||||||
| where z != 1
|
| where z != 1
|
||||||
| first 1
|
| first
|
||||||
| get z
|
| get z
|
||||||
"#
|
"#
|
||||||
));
|
));
|
||||||
|
@ -6,7 +6,7 @@ use nu_test_support::{nu, pipeline};
|
|||||||
fn table_to_csv_text_and_from_csv_text_back_into_table() {
|
fn table_to_csv_text_and_from_csv_text_back_into_table() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
"open caco3_plastics.csv | to csv | from csv | first 1 | get origin "
|
"open caco3_plastics.csv | to csv | from csv | first | get origin "
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "SPAIN");
|
assert_eq!(actual.out, "SPAIN");
|
||||||
|
@ -6,7 +6,7 @@ use nu_test_support::{nu, pipeline};
|
|||||||
fn table_to_tsv_text_and_from_tsv_text_back_into_table() {
|
fn table_to_tsv_text_and_from_tsv_text_back_into_table() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
"open caco3_plastics.tsv | to tsv | from tsv | first 1 | get origin"
|
"open caco3_plastics.tsv | to tsv | from tsv | first | get origin"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "SPAIN");
|
assert_eq!(actual.out, "SPAIN");
|
||||||
@ -16,7 +16,7 @@ fn table_to_tsv_text_and_from_tsv_text_back_into_table() {
|
|||||||
fn table_to_tsv_text_and_from_tsv_text_back_into_table_using_csv_separator() {
|
fn table_to_tsv_text_and_from_tsv_text_back_into_table_using_csv_separator() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
r"open caco3_plastics.tsv | to tsv | from csv --separator '\t' | first 1 | get origin"
|
r"open caco3_plastics.tsv | to tsv | from csv --separator '\t' | first | get origin"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "SPAIN");
|
assert_eq!(actual.out, "SPAIN");
|
||||||
|
@ -7,7 +7,7 @@ fn chooses_highest_increment_if_given_more_than_one() {
|
|||||||
let actual = nu_with_plugins!(
|
let actual = nu_with_plugins!(
|
||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
plugin: ("nu_plugin_inc"),
|
plugin: ("nu_plugin_inc"),
|
||||||
"open cargo_sample.toml | first 1 | inc package.version --major --minor | get package.version"
|
"open cargo_sample.toml | first | inc package.version --major --minor | get package.version"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "1.0.0");
|
assert_eq!(actual.out, "1.0.0");
|
||||||
@ -16,7 +16,7 @@ fn chooses_highest_increment_if_given_more_than_one() {
|
|||||||
cwd: "tests/fixtures/formats",
|
cwd: "tests/fixtures/formats",
|
||||||
plugin: ("nu_plugin_inc"),
|
plugin: ("nu_plugin_inc"),
|
||||||
// Regardless of order of arguments
|
// Regardless of order of arguments
|
||||||
"open cargo_sample.toml | first 1 | inc package.version --minor --major | get package.version"
|
"open cargo_sample.toml | first | inc package.version --minor --major | get package.version"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "1.0.0");
|
assert_eq!(actual.out, "1.0.0");
|
||||||
|
@ -232,7 +232,7 @@ mod stdin_evaluation {
|
|||||||
| nu --testbin chop
|
| nu --testbin chop
|
||||||
| nu --testbin chop
|
| nu --testbin chop
|
||||||
| lines
|
| lines
|
||||||
| first 1 )
|
| first )
|
||||||
"#
|
"#
|
||||||
))
|
))
|
||||||
.out;
|
.out;
|
||||||
|
Loading…
Reference in New Issue
Block a user