nu-command 0.114.0

Nushell's built-in commands
Documentation
use nu_test_support::prelude::*;

#[test]
fn split_row() -> Result {
    let sample = "importer,shipper,tariff_item,name,origin";
    let code = r#"$in | split row "," | length"#;
    test().run_with_data(code, sample).expect_value_eq(5)
}

#[test]
fn split_row_number() -> Result {
    let sample = "importer,shipper,tariff_item,name,origin";

    let code = r#"$in | split row -n 3 ",""#;
    test().run_with_data(code, sample).expect_value_eq(vec![
        "importer",
        "shipper",
        "tariff_item,name,origin",
    ])?;

    let code = r#"$in | split row -n 3 --right ",""#;
    test().run_with_data(code, sample).expect_value_eq(vec![
        "importer,shipper,tariff_item",
        "name",
        "origin",
    ])
}

#[test]
fn split_row_number_zero() -> Result {
    let code = r#""x" | split row -n 0 ",""#;
    test().run(code).expect_value_eq::<Vec<Value>>(vec![])?;
    let code = r#""x" | split row -n 0 --right ",""#;
    test().run(code).expect_value_eq::<Vec<Value>>(vec![])?;
    Ok(())
}

#[test]
fn split_row_number_error() -> Result {
    let code = r#""x" | split row -n -1 ",""#;
    test().run(code).expect_shell_error()?;
    let code = r#""x" | split row -n -1 --right ",""#;
    test().run(code).expect_shell_error()?;
    Ok(())
}

#[test]
fn to_row_no_sep_found() -> Result {
    let sample = "stuff";

    let code = r#"$in | split row "|""#;
    test()
        .run_with_data(code, sample)
        .expect_value_eq(vec![sample])?;

    let code = r#"$in | split row -n 3 "|""#;
    test()
        .run_with_data(code, sample)
        .expect_value_eq(vec![sample])?;

    let code = r#"$in | split row -n 3 --right "|""#;
    test()
        .run_with_data(code, sample)
        .expect_value_eq(vec![sample])
}

#[test]
fn split_row_regex() -> Result {
    let sample = "importer      ,   shipper      ,  tariff_item,name      ,    origin";
    let code = r#"$in | split row -r '\s*,\s*' | length"#;
    test().run_with_data(code, sample).expect_value_eq(5)
}

#[test]
fn split_row_type() -> Result {
    let code = r#"
        def foo [a: list<string>] {
            $a | describe
        }

        foo (["a b", "c d"] | split row " ")
    "#;
    test().run(code).expect_value_eq("list<string>")
}