#[cfg(test)]
mod tests {
use assert_cmd::prelude::*;
use std::process::Command;
fn run_dtt_with_test_mode(
test_mode: bool,
) -> Result<std::process::Output, Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("dtt").map_err(|err| {
format!("Failed to find binary 'dtt': {:?}", err)
})?;
if test_mode {
let _ = cmd.env("DTT_TEST_MODE", "1");
}
let output = cmd.output().map_err(|err| {
format!("Failed to execute command: {:?}", err)
})?;
Ok(output)
}
fn run_and_verify_test_mode(
is_test_mode: bool,
should_fail: bool,
) -> Result<(), Box<dyn std::error::Error>> {
let output = run_dtt_with_test_mode(is_test_mode)?;
assert_eq!(output.status.success(), !should_fail);
if should_fail {
let stderr =
String::from_utf8(output.stderr).map_err(|err| {
eprintln!(
"Failed to parse stderr as UTF-8: {:?}",
err
);
err
})?;
assert!(
stderr.contains("Error running dtt: Simulated error")
);
}
Ok(())
}
#[test]
fn test_run_with_dtt_test_mode(
) -> Result<(), Box<dyn std::error::Error>> {
run_and_verify_test_mode(true, true)?;
Ok(())
}
#[test]
fn test_run_without_dtt_test_mode(
) -> Result<(), Box<dyn std::error::Error>> {
run_and_verify_test_mode(false, false)?;
Ok(())
}
#[test]
fn test_main() -> Result<(), Box<dyn std::error::Error>> {
run_and_verify_test_mode(true, true)?;
Ok(())
}
}