girt-core 2.3.0

Core modules for git-interactive-rebase-tool
Documentation
use std::{ffi::OsString, path::Path};

use super::*;
use crate::{module::ExitStatus, testutil::set_git_directory};

fn args(args: &[&str]) -> Vec<OsString> {
	args.iter().map(OsString::from).collect::<Vec<OsString>>()
}

#[test]
#[serial_test::serial]
fn successful_run_help() {
	let exit = run(args(&["--help"]));
	assert!(exit.get_message().as_ref().unwrap().contains("USAGE:"));
	assert_eq!(exit.get_status(), &ExitStatus::Good);
}

#[test]
#[serial_test::serial]
fn successful_run_version() {
	let exit = run(args(&["--version"]));
	assert!(
		exit.get_message()
			.as_ref()
			.unwrap()
			.starts_with("interactive-rebase-tool")
	);
	assert_eq!(exit.get_status(), &ExitStatus::Good);
}

#[test]
#[serial_test::serial]
fn successful_run_license() {
	let exit = run(args(&["--license"]));
	assert!(
		exit.get_message()
			.as_ref()
			.unwrap()
			.contains("Sequence Editor for Git Interactive Rebase")
	);
	assert_eq!(exit.get_status(), &ExitStatus::Good);
}

#[test]
#[serial_test::serial]
fn successful_run_editor() {
	let path = set_git_directory("fixtures/simple");
	let todo_file = Path::new(path.as_str()).join("rebase-todo-empty");
	assert_eq!(
		run(args(&[todo_file.to_str().unwrap()])).get_status(),
		&ExitStatus::Good
	);
}

#[cfg(unix)]
#[test]
#[serial_test::serial]
#[allow(unsafe_code)]
fn error() {
	let args = unsafe { vec![OsString::from(String::from_utf8_unchecked(vec![0xC3, 0x28]))] };
	assert_eq!(run(args).get_status(), &ExitStatus::StateError);
}