arc/tests/cli.rs
hanna 2e0952f9fb
feat: add colored output with distinct symbols using the colored crate
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.
2026-02-09 03:51:59 +00:00

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}'"
);
}
}