tests/build_cli.rs 2.4 KiB 73 lines Raw
1 //! CLI-level test: `hu13 build` on a repo without `.forge/` exits 0.2 3 use std::sync::atomic::{AtomicU64, Ordering};4 5 static SEQ: AtomicU64 = AtomicU64::new(0);6 7 use std::path::{Path, PathBuf};8 use std::process::Command;9 10 fn git(repo: &Path, args: &[&str]) {11     let st = Command::new("git")12         .arg("-C")13         .arg(repo)14         .args(args)15         .status()16         .expect("spawn git");17     assert!(st.success(), "git {args:?} failed");18 }19 20 #[test]21 fn unknown_subcommand_exits_two() {22     let out = Command::new(env!("CARGO_BIN_EXE_hu13"))23         .arg("nope")24         .output()25         .expect("spawn hu13");26     assert_eq!(out.status.code(), Some(2), "unknown subcommand is an error");27     let stderr = String::from_utf8_lossy(&out.stderr);28     assert!(stderr.contains("unknown subcommand 'nope'"), "{stderr}");29 }30 31 #[test]32 fn build_no_forge_repo_exits_zero() {33     let dir = std::env::temp_dir().join(format!(34         "hu13-cli-noforge-{}-{}",35         std::process::id(),36         std::time::SystemTime::now()37             .duration_since(std::time::UNIX_EPOCH)38             .map(|d| d.as_nanos())39             .unwrap_or(0)40             .wrapping_add(u128::from(SEQ.fetch_add(1, Ordering::Relaxed)))41     ));42     std::fs::create_dir_all(&dir).unwrap();43     git(&dir, &["init", "-b", "main"]);44     git(&dir, &["config", "user.name", "hu13-test"]);45     git(&dir, &["config", "user.email", "[email protected]"]);46     git(&dir, &["config", "commit.gpgsign", "false"]);47     std::fs::write(dir.join("README.md"), "# cli fixture\n").unwrap();48     std::fs::write(dir.join("hello.txt"), "hello\n").unwrap();49     git(&dir, &["add", "-A"]);50     git(&dir, &["commit", "-m", "init"]);51     assert!(!dir.join(".forge").exists());52 53     let out: PathBuf = dir.join("..").join(format!(54         "hu13-cli-out-{}-{}",55         std::process::id(),56         std::time::SystemTime::now()57             .duration_since(std::time::UNIX_EPOCH)58             .map(|d| d.as_nanos())59             .unwrap_or(1)60             .wrapping_add(u128::from(SEQ.fetch_add(1, Ordering::Relaxed)))61     ));62     let bin = env!("CARGO_BIN_EXE_hu13");63     let st = Command::new(bin)64         .arg("build")65         .arg(&dir)66         .arg("-o")67         .arg(&out)68         .status()69         .expect("spawn hu13");70     assert!(st.success(), "no-forge build exits 0, got {st}");71     assert!(out.join("index.html").exists());72     assert!(out.join("raw").join("README.md").exists());73 }