From 64c579517b82d2f2de2cd349ed710c100629ef75 Mon Sep 17 00:00:00 2001 From: WindSoilder Date: Wed, 17 Jul 2024 09:31:52 +0800 Subject: [PATCH] add testcase --- crates/nu-command/tests/commands/generate.rs | 83 ++++++++++++++------ 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/crates/nu-command/tests/commands/generate.rs b/crates/nu-command/tests/commands/generate.rs index 9dc2142515..284a3e3cb8 100644 --- a/crates/nu-command/tests/commands/generate.rs +++ b/crates/nu-command/tests/commands/generate.rs @@ -3,7 +3,7 @@ use nu_test_support::{nu, pipeline}; #[test] fn generate_no_next_break() { let actual = nu!( - "generate 1 {|x| if $x == 3 { {out: $x}} else { {out: $x, next: ($x + 1)} }} | to nuon" + "generate {|x| if $x == 3 { {out: $x}} else { {out: $x, next: ($x + 1)} }} 1 | to nuon" ); assert_eq!(actual.out, "[1, 2, 3]"); @@ -11,7 +11,7 @@ fn generate_no_next_break() { #[test] fn generate_null_break() { - let actual = nu!("generate 1 {|x| if $x <= 3 { {out: $x, next: ($x + 1)} }} | to nuon"); + let actual = nu!("generate {|x| if $x <= 3 { {out: $x, next: ($x + 1)} }} 1 | to nuon"); assert_eq!(actual.out, "[1, 2, 3]"); } @@ -20,13 +20,13 @@ fn generate_null_break() { fn generate_allows_empty_output() { let actual = nu!(pipeline( r#" - generate 0 {|x| + generate {|x| if $x == 1 { {next: ($x + 1)} } else if $x < 3 { {out: $x, next: ($x + 1)} } - } | to nuon + } 0 | to nuon "# )); @@ -37,11 +37,11 @@ fn generate_allows_empty_output() { fn generate_allows_no_output() { let actual = nu!(pipeline( r#" - generate 0 {|x| + generate {|x| if $x < 3 { {next: ($x + 1)} } - } | to nuon + } 0 | to nuon "# )); @@ -52,7 +52,7 @@ fn generate_allows_no_output() { fn generate_allows_null_state() { let actual = nu!(pipeline( r#" - generate 0 {|x| + generate {|x| if $x == null { {out: "done"} } else if $x < 1 { @@ -60,7 +60,7 @@ fn generate_allows_null_state() { } else { {out: "stopping", next: null} } - } | to nuon + } 0 | to nuon "# )); @@ -71,7 +71,42 @@ fn generate_allows_null_state() { fn generate_allows_null_output() { let actual = nu!(pipeline( r#" - generate 0 {|x| + generate {|x| + if $x == 3 { + {out: "done"} + } else { + {out: null, next: ($x + 1)} + } + } 0 | to nuon + "# + )); + + assert_eq!(actual.out, "[null, null, null, done]"); +} + +#[test] +fn generate_disallows_extra_keys() { + let actual = nu!("generate {|x| {foo: bar, out: $x}} 0 "); + assert!(actual.err.contains("Invalid block return")); +} + +#[test] +fn generate_disallows_list() { + let actual = nu!("generate {|x| [$x, ($x + 1)]} 0 "); + assert!(actual.err.contains("Invalid block return")); +} + +#[test] +fn generate_disallows_primitive() { + let actual = nu!("generate {|x| 1} 0"); + assert!(actual.err.contains("Invalid block return")); +} + +#[test] +fn generate_allow_default_parameter() { + let actual = nu!(pipeline( + r#" + generate {|x = 0| if $x == 3 { {out: "done"} } else { @@ -82,22 +117,18 @@ fn generate_allows_null_output() { )); assert_eq!(actual.out, "[null, null, null, done]"); -} -#[test] -fn generate_disallows_extra_keys() { - let actual = nu!("generate 0 {|x| {foo: bar, out: $x}}"); - assert!(actual.err.contains("Invalid block return")); -} - -#[test] -fn generate_disallows_list() { - let actual = nu!("generate 0 {|x| [$x, ($x + 1)]}"); - assert!(actual.err.contains("Invalid block return")); -} - -#[test] -fn generate_disallows_primitive() { - let actual = nu!("generate 0 {|x| 1}"); - assert!(actual.err.contains("Invalid block return")); + // if initial is given, use initial value + let actual = nu!(pipeline( + r#" + generate {|x = 0| + if $x == 3 { + {out: "done"} + } else { + {out: null, next: ($x + 1)} + } + } 1 | to nuon + "# + )); + assert_eq!(actual.out, "[null, null, done]"); }