nu-command 0.112.1

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

use super::join_path_sep;

#[test]
fn returns_dirname_of_empty_input() -> Result {
    let code = r#"
        echo ""
        | path dirname
    "#;

    test().cwd("tests").run(code).expect_value_eq("")
}

#[test]
fn replaces_dirname_of_empty_input() -> Result {
    let code = r#"
        echo ""
        | path dirname --replace newdir
    "#;

    test().cwd("tests").run(code).expect_value_eq("newdir")
}

#[test]
fn returns_dirname_of_path_ending_with_dot() -> Result {
    let code = r#"
        echo "some/dir/."
        | path dirname
    "#;

    test().cwd("tests").run(code).expect_value_eq("some")
}

#[test]
fn replaces_dirname_of_path_ending_with_dot() -> Result {
    let code = r#"
        echo "some/dir/."
        | path dirname --replace eggs
    "#;

    let expected = join_path_sep(&["eggs", "dir"]);
    test().cwd("tests").run(code).expect_value_eq(expected)
}

#[test]
fn returns_dirname_of_path_ending_with_double_dot() -> Result {
    let code = r#"
        echo "some/dir/.."
        | path dirname
    "#;

    test().cwd("tests").run(code).expect_value_eq("some/dir")
}

#[test]
fn replaces_dirname_of_path_with_double_dot() -> Result {
    let code = r#"
        echo "some/dir/.."
        | path dirname --replace eggs
    "#;

    let expected = join_path_sep(&["eggs", ".."]);
    test().cwd("tests").run(code).expect_value_eq(expected)
}

#[test]
fn returns_dirname_of_zero_levels() -> Result {
    let code = r#"
        echo "some/dir/with/spam.txt"
        | path dirname --num-levels 0
    "#;

    test()
        .cwd("tests")
        .run(code)
        .expect_value_eq("some/dir/with/spam.txt")
}

#[test]
fn replaces_dirname_of_zero_levels_with_empty_string() -> Result {
    let code = r#"
        echo "some/dir/with/spam.txt"
        | path dirname --num-levels 0 --replace ""
    "#;

    test().cwd("tests").run(code).expect_value_eq("")
}

#[test]
fn replaces_dirname_of_more_levels() -> Result {
    let code = r#"
        echo "some/dir/with/spam.txt"
        | path dirname --replace eggs -n 2
    "#;

    let expected = join_path_sep(&["eggs", "with/spam.txt"]);
    test().cwd("tests").run(code).expect_value_eq(expected)
}

#[test]
fn replaces_dirname_of_way_too_many_levels() -> Result {
    let code = r#"
        echo "some/dir/with/spam.txt"
        | path dirname --replace eggs -n 999
    "#;

    let expected = join_path_sep(&["eggs", "some/dir/with/spam.txt"]);
    test().cwd("tests").run(code).expect_value_eq(expected)
}

#[test]
fn const_path_dirname() -> Result {
    let code = "const name = ('spam/eggs.txt' | path dirname); $name";
    test().run(code).expect_value_eq("spam")
}