#![cfg(test)]
use crate::{load, parse, Op, Opts};
use std::path::{Path, PathBuf};
#[test]
fn unit_tests() {
std::env::set_current_dir(Path::new("/")).ok();
struct Test<'a> {
received: &'a [&'a str],
expected: &'a [&'a str],
cwd: &'a str,
op: Op,
}
fn check(t: Test) {
let rc = [&["gitnu"], t.received].concat();
let rc = parse(rc.iter().map(|v| v.to_string()).collect());
let rc = (load(rc.0, &rc.1), rc.1);
let ex = Opts { op: t.op, cwd: t.cwd.into(), gcs: true };
let ex_args: Vec<PathBuf> =
t.expected.iter().map(PathBuf::from).collect();
let ex = (ex_args, ex);
assert_eq!(rc.0, ex.0);
assert_eq!(rc.1.op, ex.1.op);
if !t.cwd.eq("") {
assert_eq!(rc.1.cwd, ex.1.cwd);
}
}
check(Test {
received: &["-C", "/dev/null"],
expected: &[],
cwd: "/dev/null",
op: Op::Number("git".into()),
});
check(Test {
received: &["-x", "nvim"],
expected: &[],
cwd: "",
op: Op::Number("nvim".into()),
});
check(Test {
received: &["-C", "/etc", "-x", "nvim"],
expected: &[],
cwd: "/etc",
op: Op::Number("nvim".into()),
});
check(Test {
received: &["-x", "nvim", "-C", "/etc"],
expected: &["-C", "/etc"],
cwd: "",
op: Op::Number("nvim".into()),
});
check(Test {
received: &["-C", "/etc", "-x", "nvim", "status", "--porcelain"],
expected: &["status", "--porcelain"],
cwd: "/etc",
op: Op::Number("nvim".into()),
});
check(Test {
received: &["status"],
expected: &["status"],
cwd: "",
op: Op::Status(true),
});
check(Test {
received: &["status", "--short"],
expected: &["status", "--short"],
cwd: "",
op: Op::Status(false),
});
check(Test {
received: &["status", "-s"],
expected: &["status", "-s"],
cwd: "",
op: Op::Status(false),
});
check(Test {
received: &["status", "--porcelain"],
expected: &["status", "--porcelain"],
cwd: "",
op: Op::Status(false),
});
check(Test {
received: &["ls-files", "2-4"],
expected: &["ls-files", "2", "3", "4"],
cwd: "",
op: Op::Number("git".into()),
});
check(Test {
received: &["-C", "/tmp", "ls-files", "2-4"],
expected: &["ls-files", "2", "3", "4"],
cwd: "/tmp",
op: Op::Number("git".into()),
});
check(Test {
received: &["-C"],
expected: &["-C"],
cwd: "",
op: Op::Number("git".into()),
});
check(Test {
received: &["-x"],
expected: &["-x"],
cwd: "",
op: Op::Number("git".into()),
});
check(Test {
received: &["log", "-n", "4", "--oneline", "2-4"],
expected: &["log", "-n", "4", "--oneline", "2", "3", "4"],
cwd: "",
op: Op::Number("git".into()),
});
check(Test {
received: &["-x", "nvim", "2-4"],
expected: &["2", "3", "4"],
cwd: "",
op: Op::Number("nvim".into()),
});
}