Add a centralized ui module with Arc's visual identity: colored commit IDs (magenta), bookmarks (cyan), tags (yellow), status symbols, and diff highlighting. Update all command output and tests accordingly.
142 lines
3.6 KiB
Rust
142 lines
3.6 KiB
Rust
use std::process::Command;
|
|
use tempfile::TempDir;
|
|
|
|
fn arc_cmd() -> Command {
|
|
let mut cmd = Command::new(env!("CARGO_BIN_EXE_arc"));
|
|
cmd.env("NO_COLOR", "1");
|
|
cmd
|
|
}
|
|
|
|
#[test]
|
|
fn help_flag_succeeds() {
|
|
let output = arc_cmd().arg("--help").output().expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
assert!(stdout.contains("A delta-based version control system"));
|
|
}
|
|
|
|
#[test]
|
|
fn version_flag_succeeds() {
|
|
let output = arc_cmd()
|
|
.arg("--version")
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
assert!(stdout.contains("arc"));
|
|
}
|
|
|
|
#[test]
|
|
fn no_args_shows_error() {
|
|
let output = arc_cmd().output().expect("failed to run arc");
|
|
assert!(!output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn init_subcommand_succeeds() {
|
|
let dir = TempDir::new().unwrap();
|
|
let output = arc_cmd()
|
|
.arg("init")
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn mark_list_subcommand_succeeds() {
|
|
let dir = TempDir::new().unwrap();
|
|
arc_cmd()
|
|
.arg("init")
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to init");
|
|
let output = arc_cmd()
|
|
.args(["mark", "list"])
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn tag_list_subcommand_succeeds() {
|
|
let dir = TempDir::new().unwrap();
|
|
arc_cmd()
|
|
.arg("init")
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to init");
|
|
let output = arc_cmd()
|
|
.args(["tag", "list"])
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn stash_list_subcommand_succeeds() {
|
|
let dir = TempDir::new().unwrap();
|
|
arc_cmd()
|
|
.arg("init")
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to init");
|
|
let output = arc_cmd()
|
|
.args(["stash", "list"])
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn config_show_subcommand_succeeds() {
|
|
let output = arc_cmd()
|
|
.args(["config", "show"])
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn remote_list_subcommand_succeeds() {
|
|
let dir = TempDir::new().unwrap();
|
|
arc_cmd()
|
|
.arg("init")
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to init");
|
|
let output = arc_cmd()
|
|
.args(["remote", "list"])
|
|
.current_dir(dir.path())
|
|
.output()
|
|
.expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn help_subcommand_succeeds() {
|
|
let output = arc_cmd().arg("help").output().expect("failed to run arc");
|
|
assert!(output.status.success());
|
|
}
|
|
|
|
#[test]
|
|
fn help_shows_all_commands() {
|
|
let output = arc_cmd().arg("--help").output().expect("failed to run arc");
|
|
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
|
|
let expected_commands = [
|
|
"init", "commit", "log", "status", "diff", "switch", "merge", "show", "history", "revert",
|
|
"reset", "push", "pull", "clone", "migrate", "mark", "tag", "stash", "graft", "config",
|
|
"sync", "remote",
|
|
];
|
|
|
|
for cmd in expected_commands {
|
|
assert!(
|
|
stdout.contains(cmd),
|
|
"help output should contain command '{cmd}'"
|
|
);
|
|
}
|
|
}
|