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