nu 0.113.0

A new type of shell
use crate::repl::tests::{TestResult, fail_test, run_test};

#[test]
fn do_no_argument() -> TestResult {
    let input = "do { 42 }";
    let expected = "42";
    run_test(input, expected)
}

#[test]
fn do_one_argument() -> TestResult {
    let input = "do {|x| $x } 42";
    let expected = "42";
    run_test(input, expected)
}

#[test]
fn do_missing_argument() -> TestResult {
    let input = "do {|x| $x}";
    let expected = "nu::shell::missing_parameter";
    fail_test(input, expected)
}

#[test]
fn do_typed_argument() -> TestResult {
    let input = "do {|x: int| $x} 42";
    let expected = "42";
    run_test(input, expected)
}

#[test]
fn do_type_mismatch() -> TestResult {
    let input = "do {|x: int| $x} 4.2";
    let expected = "nu::shell::cant_convert";
    fail_test(input, expected)
}

#[test]
fn do_optional_argument() -> TestResult {
    let input = "do {|x?| $x | describe}";
    let expected = "nothing";
    run_test(input, expected)
}

#[test]
fn do_variable_argument() -> TestResult {
    let input = "do {|...rest| $rest} 1 2 | to nuon";
    let expected = "[1, 2]";
    run_test(input, expected)
}

#[test]
fn default() -> TestResult {
    let input = "null | default { 42 }";
    let expected = "42";
    run_test(input, expected)
}

#[test]
fn default_optional_argument() -> TestResult {
    let input = "{} | default {|x?| if $x == null { 'no x' } else { $x } } foo | to nuon";
    let expected = "{foo: \"no x\"}";
    run_test(input, expected)
}