mirror of
https://github.com/nushell/nushell.git
synced 2025-08-15 11:23:12 +02:00
Add default --empty
to handle empty values (#15223)
# Description Adds a new `--empty/-e` flag to the `default` command. # User-Facing Changes Before: ```nushell $env.FOO = "" $env.FOO = $env.FOO? | default bar $env.FOO # => Empty string ``` After: ```nushell $env.FOO = "" $env.FOO = $env.FOO? | default -e bar $env.FOO # => bar ``` * Uses `val.is_empty`, which means that empty lists and records are also replaced * Empty values in tables (with a column specifier) are also replaced. # Tests + Formatting 7 tests added and 1 updated + 1 new example - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting N/A
This commit is contained in:
@ -5,10 +5,13 @@ fn adds_row_data_if_column_missing() {
|
||||
let sample = r#"
|
||||
{
|
||||
"amigos": [
|
||||
{"name": "Yehuda"},
|
||||
{"name": "Yehuda"},
|
||||
{"name": "JT", "rusty_luck": 0},
|
||||
{"name": "Andres", "rusty_luck": 0},
|
||||
{"name":"GorbyPuff"}
|
||||
{"name": "Andres", "rusty_luck": 0},
|
||||
{"name": "Michael", "rusty_luck": []},
|
||||
{"name": "Darren", "rusty_luck": {}},
|
||||
{"name": "Stefan", "rusty_luck": ""},
|
||||
{"name": "GorbyPuff"}
|
||||
]
|
||||
}
|
||||
"#;
|
||||
@ -44,3 +47,68 @@ fn replaces_null() {
|
||||
let actual = nu!(r#"null | default 1"#);
|
||||
assert_eq!(actual.out, "1");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn adds_row_data_if_column_missing_or_empty() {
|
||||
let sample = r#"
|
||||
{
|
||||
"amigos": [
|
||||
{"name": "Yehuda"},
|
||||
{"name": "JT", "rusty_luck": 0},
|
||||
{"name": "Andres", "rusty_luck": 0},
|
||||
{"name": "Michael", "rusty_luck": []},
|
||||
{"name": "Darren", "rusty_luck": {}},
|
||||
{"name": "Stefan", "rusty_luck": ""},
|
||||
{"name": "GorbyPuff"}
|
||||
]
|
||||
}
|
||||
"#;
|
||||
|
||||
let actual = nu!(pipeline(&format!(
|
||||
"
|
||||
{sample}
|
||||
| get amigos
|
||||
| default -e 1 rusty_luck
|
||||
| where rusty_luck == 1
|
||||
| length
|
||||
"
|
||||
)));
|
||||
|
||||
assert_eq!(actual.out, "5");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replace_empty_string() {
|
||||
let actual = nu!(r#"'' | default -e foo"#);
|
||||
assert_eq!(actual.out, "foo");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn do_not_replace_empty_string() {
|
||||
let actual = nu!(r#"'' | default 1"#);
|
||||
assert_eq!(actual.out, "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replace_empty_list() {
|
||||
let actual = nu!(r#"[] | default -e foo"#);
|
||||
assert_eq!(actual.out, "foo");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn do_not_replace_empty_list() {
|
||||
let actual = nu!(r#"[] | default 1 | length"#);
|
||||
assert_eq!(actual.out, "0");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replace_empty_record() {
|
||||
let actual = nu!(r#"{} | default -e foo"#);
|
||||
assert_eq!(actual.out, "foo");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn do_not_replace_empty_record() {
|
||||
let actual = nu!(r#"{} | default {a:5} | columns | length"#);
|
||||
assert_eq!(actual.out, "0");
|
||||
}
|
||||
|
Reference in New Issue
Block a user