add more tests for new $in behaviour

This commit is contained in:
Devyn Cairns 2024-07-12 21:06:31 -07:00
parent ba6a214bfa
commit 5272bca240
3 changed files with 62 additions and 0 deletions

View File

@ -439,3 +439,37 @@ fn no_duplicate_redirection() {
); );
}); });
} }
#[rstest::rstest]
#[case("let", "out>")]
#[case("let", "err>")]
#[case("let", "out+err>")]
#[case("mut", "out>")]
#[case("mut", "err>")]
#[case("mut", "out+err>")]
fn file_redirection_in_let_and_mut(#[case] keyword: &str, #[case] redir: &str) {
Playground::setup("file redirection in let and mut", |dirs, _| {
let actual = nu!(
cwd: dirs.test(),
format!("$env.BAZ = 'foo'; {keyword} v = nu --testbin echo_env_mixed out-err BAZ BAZ {redir} result.txt")
);
assert!(actual.status.success());
assert!(file_contents(dirs.test().join("result.txt")).contains("foo"));
})
}
#[rstest::rstest]
#[case("let", "err>|", 3)]
#[case("let", "out+err>|", 6)]
#[case("mut", "err>|", 3)]
#[case("mut", "out+err>|", 6)]
fn pipe_redirection_in_let_and_mut(
#[case] keyword: &str,
#[case] redir: &str,
#[case] length: usize,
) {
let actual = nu!(
format!("$env.BAZ = 'foo'; {keyword} v = nu --testbin echo_env_mixed out-err BAZ BAZ {redir} str length; $v")
);
assert_eq!(actual.out.len(), length);
}

View File

@ -52,6 +52,21 @@ fn in_and_if_else() -> TestResult {
) )
} }
#[test]
fn in_with_closure() -> TestResult {
// Can use $in twice
run_test(r#"3 | do { let x = $in; let y = $in; $x + $y }"#, "6")
}
#[test]
fn in_with_custom_command() -> TestResult {
// Can use $in twice
run_test(
r#"def foo [] { let x = $in; let y = $in; $x + $y }; 3 | foo"#,
"6",
)
}
#[test] #[test]
fn help_works_with_missing_requirements() -> TestResult { fn help_works_with_missing_requirements() -> TestResult {
run_test(r#"each --help | lines | length"#, "72") run_test(r#"each --help | lines | length"#, "72")

View File

@ -129,3 +129,16 @@ fn transpose_into_load_env() -> TestResult {
"10", "10",
) )
} }
#[test]
fn in_variable_expression_correct_output_type() -> TestResult {
run_test(r#"def foo []: nothing -> string { 'foo' | $"($in)" }"#, "")
}
#[test]
fn in_variable_expression_wrong_output_type() -> TestResult {
fail_test(
r#"def foo []: nothing -> int { 'foo' | $"($in)" }"#,
"expected int",
)
}