use std::process::Command; #[test] fn test_c_api() { let project_tests_dir = concat!(env!("CARGO_MANIFEST_DIR"), "/tests"); run_command("cmake", project_tests_dir, Some(".")); run_command("make", project_tests_dir, Some("-Wdev -Werror=dev")); run_command("make", project_tests_dir, Some("test")); } fn run_command(command_str: &str, dir: &str, arg: Option<&str>) { println!("Running command: `{}` arg: {:?}", command_str, arg); let mut command = Command::new(command_str); if let Some(a) = arg { command.arg(a); } command.current_dir(dir); let result = command.output(); match result { Ok(r) => { println!("output:"); if let Some(code) = r.status.code() { println!("status: {}", code); } else { println!("status: None"); } println!("stdout:"); println!("{}", String::from_utf8_lossy(&r.stdout[..])); println!("stderr:"); println!("{}", String::from_utf8_lossy(&r.stderr[..])); if r.status.success() { assert!(true) } else { panic!("Command failed with exit status: {:?}", r.status); } } Err(e) => panic!("Command failed: {}", e), } }