mirror of
https://github.com/nushell/nushell
synced 2024-12-30 23:08:56 +00:00
fcb8e36caa
# Description Before this change `default` would dive into lists and replace `null` elements with the default value. Therefore there was no easy way to process `null|list<null|string>` input and receive `list<null|string>` (IOW to apply the default on the top level only). However it's trivially easy to apply default values to list elements with the `each` command: ```nushell [null, "a", null] | each { default "b" } ``` So there's no need to have this behavior in `default` command. # User-Facing Changes * `default` no longer dives into lists to replace `null` elements with the default value. # Tests + Formatting Added a couple of tests for the new (and old) behavior. # After Submitting * Update docs.
46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
use nu_test_support::{nu, pipeline};
|
|
|
|
#[test]
|
|
fn adds_row_data_if_column_missing() {
|
|
let sample = r#"
|
|
{
|
|
"amigos": [
|
|
{"name": "Yehuda"},
|
|
{"name": "JT", "rusty_luck": 0},
|
|
{"name": "Andres", "rusty_luck": 0},
|
|
{"name":"GorbyPuff"}
|
|
]
|
|
}
|
|
"#;
|
|
|
|
let actual = nu!(pipeline(&format!(
|
|
"
|
|
{sample}
|
|
| get amigos
|
|
| default 1 rusty_luck
|
|
| where rusty_luck == 1
|
|
| length
|
|
"
|
|
)));
|
|
|
|
assert_eq!(actual.out, "2");
|
|
}
|
|
|
|
#[test]
|
|
fn default_after_empty_filter() {
|
|
let actual = nu!("[a b] | where $it == 'c' | get -i 0 | default 'd'");
|
|
|
|
assert_eq!(actual.out, "d");
|
|
}
|
|
|
|
#[test]
|
|
fn keeps_nulls_in_lists() {
|
|
let actual = nu!(r#"[null, 2, 3] | default [] | to json -r"#);
|
|
assert_eq!(actual.out, "[null,2,3]");
|
|
}
|
|
|
|
#[test]
|
|
fn replaces_null() {
|
|
let actual = nu!(r#"null | default 1"#);
|
|
assert_eq!(actual.out, "1");
|
|
}
|