gitnu 0.0.2

gitnu indexes your git status so you can use numbers instead of filenames.
Documentation
mod utils;
use utils::{multiline, Git};

#[test]
fn untracked_file() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g1");
    {
        git.init();
        git.touch("gold");
    }
    let received = gitnu.status();
    let expected = multiline(&[
        "On branch main\n",
        "No commits yet\n",
        "Untracked files:",
        "1\t\u{1b}[31mgold\u{1b}[m\n",
        "nothing added to commit but untracked files present\n",
    ]);
    assert_eq!(received, expected);
}

#[test]
fn staged_file_by_name() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g2");
    {
        git.init();
        git.touch("gold");
        gitnu.add("gold");
    }
    let expected = multiline(&[
        "On branch main\n",
        "No commits yet\n",
        "Changes to be committed:",
        "1\t\u{1b}[32mnew file:   gold\u{1b}[m\n\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}

#[test]
fn staged_file_by_number() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g3");
    {
        git.init();
        git.touch("gold");
        gitnu.status();
        gitnu.add("1");
    }
    let expected = multiline(&[
        "On branch main\n",
        "No commits yet\n",
        "Changes to be committed:",
        "1\t\u{1b}[32mnew file:   gold\u{1b}[m\n\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}

#[test]
fn modified_file_by_name() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g4");
    {
        git.init();
        git.touch("gold");
        gitnu.add("gold");
        gitnu.commit();
    }
    let expected = multiline(&[
        "On branch main",
        "nothing to commit, working tree clean\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}

#[test]
fn modified_file_by_number() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g5");
    {
        git.init();
        git.touch("gold");
        gitnu.status();
        gitnu.add("1");
        gitnu.commit();
    }
    let expected = multiline(&[
        "On branch main",
        "nothing to commit, working tree clean\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}

#[test]
fn untracked_file_by_range() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g6");
    {
        git.init();
        for i in 1..8 {
            git.touch(&format!("file_{}", i));
        }
        gitnu.status();
        gitnu.add("2-5");
    }
    let expected = multiline(&[
        "On branch main\n",
        "No commits yet\n",
        "Changes to be committed:",
        "1\t\u{1b}[32mnew file:   file_2\u{1b}[m",
        "2\t\u{1b}[32mnew file:   file_3\u{1b}[m",
        "3\t\u{1b}[32mnew file:   file_4\u{1b}[m",
        "4\t\u{1b}[32mnew file:   file_5\u{1b}[m\n",
        "Untracked files:",
        "5\t\u{1b}[31mfile_1\u{1b}[m",
        "6\t\u{1b}[31mfile_6\u{1b}[m",
        "7\t\u{1b}[31mfile_7\u{1b}[m\n\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}

#[test]
fn untracked_file_by_range_twice() {
    let (mut git, mut gitnu) = Git::gpair("tmp/g7");
    {
        git.init();
        for i in 1..8 {
            git.touch(&format!("file_{}", i));
        }
        gitnu.status();
        gitnu.add("2-5");
        gitnu.status();
        gitnu.reset("3-6");
    }
    let expected = multiline(&[
        "On branch main\n",
        "No commits yet\n",
        "Changes to be committed:",
        "1\t\u{1b}[32mnew file:   file_2\u{1b}[m",
        "2\t\u{1b}[32mnew file:   file_3\u{1b}[m\n",
        "Untracked files:",
        "3\t\u{1b}[31mfile_1\u{1b}[m",
        "4\t\u{1b}[31mfile_4\u{1b}[m",
        "5\t\u{1b}[31mfile_5\u{1b}[m",
        "6\t\u{1b}[31mfile_6\u{1b}[m",
        "7\t\u{1b}[31mfile_7\u{1b}[m\n\n",
    ]);
    assert_eq!(gitnu.status(), expected);
}