cargo-make 0.37.24

Rust task runner and build tool.
Documentation
use super::*;

#[test]
fn get_shebang_empty_vec() {
    let output = get_shebang(&vec![]);

    assert!(output.runner.is_none());
}

#[test]
fn get_shebang_not_shebang_line() {
    let output = get_shebang(&vec!["test".to_string()]);

    assert!(output.runner.is_none());
}

#[test]
fn get_shebang_empty_shebang_line() {
    let output = get_shebang(&vec!["#!".to_string()]);

    assert!(output.runner.is_none());
}

#[test]
fn get_shebang_space_shebang_line() {
    let output = get_shebang(&vec!["#!   ".to_string()]);

    assert!(output.runner.is_none());
}

#[test]
fn get_shebang_single_command() {
    let output = get_shebang(&vec!["#! test  ".to_string()]);

    assert!(output.runner.is_some());
    assert_eq!(output.runner.unwrap(), "test");
    assert!(output.arguments.is_none());
}

#[test]
fn get_shebang_command_and_args() {
    let output = get_shebang(&vec!["#! test 1  2   3 ".to_string()]);

    assert!(output.runner.is_some());
    assert_eq!(output.runner.unwrap(), "test");
    assert!(output.arguments.is_some());

    let args = output.arguments.unwrap();
    assert_eq!(args.len(), 3);
    assert_eq!(args[0], "1");
    assert_eq!(args[1], "2");
    assert_eq!(args[2], "3");
}

#[test]
fn get_shebang_second_line() {
    let output = get_shebang(&vec!["test".to_string(), "#! test 1  2   3 ".to_string()]);

    assert!(output.runner.is_none());
}

#[test]
fn get_shebang_command_and_args_multi_line() {
    let output = get_shebang(&vec!["#! test 1  2   3 ".to_string(), "test".to_string()]);

    assert!(output.runner.is_some());
    assert_eq!(output.runner.unwrap(), "test");
    assert!(output.arguments.is_some());

    let args = output.arguments.unwrap();
    assert_eq!(args.len(), 3);
    assert_eq!(args[0], "1");
    assert_eq!(args[1], "2");
    assert_eq!(args[2], "3");
}

#[test]
fn get_shebang_single_command_with_spaces_before_shebang() {
    let output = get_shebang(&vec!["     #! test  ".to_string()]);

    assert!(output.runner.is_some());
    assert_eq!(output.runner.unwrap(), "test");
    assert!(output.arguments.is_none());
}

#[test]
#[cfg(target_os = "linux")]
fn execute_sh() {
    let valid = execute(
        &vec!["#! sh".to_string(), "exit $1".to_string()],
        &None,
        &vec!["0".to_string()],
        true,
    )
    .unwrap();
    assert!(valid);
}

#[test]
#[should_panic]
#[cfg(target_os = "linux")]
fn execute_sh_error() {
    execute(
        &vec!["#! sh".to_string(), "exit $1".to_string()],
        &None,
        &vec!["1".to_string()],
        true,
    )
    .unwrap();
}

#[test]
fn get_extension_for_runner_empty() {
    let output = get_extension_for_runner("");

    let expected = if cfg!(windows) { "cmd.exe" } else { "sh" };

    assert_eq!(output, expected);
}

#[test]
fn get_extension_for_runner_unsupported() {
    let output = get_extension_for_runner("whatever");

    let expected = if cfg!(windows) { "cmd.exe" } else { "sh" };

    assert_eq!(output, expected);
}

#[test]
fn get_extension_for_runner_supported_with_path_and_extension() {
    let output = get_extension_for_runner("/dir1/dir2/python.exe");
    assert_eq!(output, "py");
}

#[test]
fn get_extension_for_runner_python() {
    let output = get_extension_for_runner("python");
    assert_eq!(output, "py");
}

#[test]
fn get_extension_for_runner_perl() {
    let output = get_extension_for_runner("perl");
    assert_eq!(output, "pl");
}

#[test]
fn get_extension_for_runner_node() {
    let output = get_extension_for_runner("node");
    assert_eq!(output, "js");
}

#[test]
fn get_extension_for_runner_powershell1() {
    let output = get_extension_for_runner("powershell");
    assert_eq!(output, "ps1");
}

#[test]
fn get_extension_for_runner_powershell2() {
    let output = get_extension_for_runner("pwsh");
    assert_eq!(output, "ps1");
}