use serde::{Serialize, de::DeserializeOwned};
const ARGS: &str = "AVEN_TEST_WORKER_ARGS";
pub const EXIT: i32 = 23;
pub fn run(name: &str, args: &impl Serialize) {
let output = std::process::Command::new(std::env::current_exe().unwrap())
.args(["--exact", name, "--ignored"])
.env(ARGS, serde_json::to_string(args).unwrap())
.output()
.unwrap();
assert_eq!(
output.status.code(),
Some(EXIT),
"{}",
String::from_utf8_lossy(&output.stderr)
);
}
pub fn args<T: DeserializeOwned>() -> Option<T> {
let json = std::env::var(ARGS).ok()?;
Some(serde_json::from_str(&json).unwrap())
}
pub fn exit() -> ! {
std::process::exit(EXIT)
}