use std::fs; use std::path::Path; use std::process::{Command, Output}; use eyre::{Result, WrapErr}; use std::thread::sleep; use std::time::Duration; type R = Result<()>; fn make(dir: impl AsRef) -> Result { Command::new(env!("CARGO_BIN_EXE_makers")) .current_dir(dir) .output() .wrap_err("") } #[test] fn basic_test() -> R { let dir = tempfile::tempdir()?; let file = " based-on-what: based-on-this \techo hi "; fs::write(dir.path().join("Makefile"), file)?; let result = make(&dir)?; assert!(!result.status.success()); assert!(String::from_utf8(result.stderr)?.contains("based-on-this")); fs::write(dir.path().join("based-on-this"), "")?; let result = make(&dir)?; assert!(result.status.success()); assert!(String::from_utf8(result.stdout)?.contains("echo hi")); let result = make(&dir)?; assert!(result.status.success()); assert!(String::from_utf8(result.stdout)?.contains("echo hi")); fs::write(dir.path().join("based-on-what"), "")?; let result = make(&dir)?; assert!(result.status.success()); assert!(!String::from_utf8(result.stdout)?.contains("echo hi")); sleep(Duration::from_millis(1000)); fs::write(dir.path().join("based-on-this"), "")?; let result = make(&dir)?; assert!(result.status.success()); assert!(String::from_utf8(result.stdout)?.contains("echo hi")); Ok(()) }