nushell/crates/nu-command/tests/commands/unfold.rs
Antoine Stevan 030e55acbf
add unfold back with a deprecation warning (#10771)
related to
- https://github.com/nushell/nushell/pull/10770

# Description
because some people look into `unfold` already (myself included lol) and
there will be 4 weeks with that new command which has a decent section
in the release note, i fear that
https://github.com/nushell/nushell/pull/10770 is a bit too brutal,
removing `unfold` without any warning...

this PR brings `unfold` back to life.
the `unfold` command will have a deprecation warning and will be removed
in 0.88.

# User-Facing Changes
`unfold` is only deprecated, not removed.

# Tests + Formatting

# After Submitting
2023-10-19 19:23:06 +02:00

103 lines
2.1 KiB
Rust

use nu_test_support::{nu, pipeline};
#[test]
fn unfold_no_next_break() {
let actual =
nu!("unfold 1 {|x| if $x == 3 { {out: $x}} else { {out: $x, next: ($x + 1)} }} | to nuon");
assert_eq!(actual.out, "[1, 2, 3]");
}
#[test]
fn unfold_null_break() {
let actual = nu!("unfold 1 {|x| if $x <= 3 { {out: $x, next: ($x + 1)} }} | to nuon");
assert_eq!(actual.out, "[1, 2, 3]");
}
#[test]
fn unfold_allows_empty_output() {
let actual = nu!(pipeline(
r#"
unfold 0 {|x|
if $x == 1 {
{next: ($x + 1)}
} else if $x < 3 {
{out: $x, next: ($x + 1)}
}
} | to nuon
"#
));
assert_eq!(actual.out, "[0, 2]");
}
#[test]
fn unfold_allows_no_output() {
let actual = nu!(pipeline(
r#"
unfold 0 {|x|
if $x < 3 {
{next: ($x + 1)}
}
} | to nuon
"#
));
assert_eq!(actual.out, "[]");
}
#[test]
fn unfold_allows_null_state() {
let actual = nu!(pipeline(
r#"
unfold 0 {|x|
if $x == null {
{out: "done"}
} else if $x < 1 {
{out: "going", next: ($x + 1)}
} else {
{out: "stopping", next: null}
}
} | to nuon
"#
));
assert_eq!(actual.out, "[going, stopping, done]");
}
#[test]
fn unfold_allows_null_output() {
let actual = nu!(pipeline(
r#"
unfold 0 {|x|
if $x == 3 {
{out: "done"}
} else {
{out: null, next: ($x + 1)}
}
} | to nuon
"#
));
assert_eq!(actual.out, "[null, null, null, done]");
}
#[test]
fn unfold_disallows_extra_keys() {
let actual = nu!("unfold 0 {|x| {foo: bar, out: $x}}");
assert!(actual.err.contains("Invalid block return"));
}
#[test]
fn unfold_disallows_list() {
let actual = nu!("unfold 0 {|x| [$x, ($x + 1)]}");
assert!(actual.err.contains("Invalid block return"));
}
#[test]
fn unfold_disallows_primitive() {
let actual = nu!("unfold 0 {|x| 1}");
assert!(actual.err.contains("Invalid block return"));
}