use assert_cmd::prelude::*;
use std::path::Path;
use std::process::Command;
type Error = Box<dyn std::error::Error>;
#[test]
fn help_shows() -> Result<(), Error> {
Command::cargo_bin("nadi")?.arg("-h").assert().success();
Command::cargo_bin("nadi")?.arg("--help").assert().success();
Ok(())
}
#[test]
fn run_tasks() -> Result<(), Error> {
Command::cargo_bin("nadi")?
.arg("-t")
.arg("env.echo(\"hi\")")
.assert()
.stdout("hi\n");
Command::cargo_bin("nadi")?
.arg("-t")
.arg("env {1 + 2 + 3}")
.assert()
.stdout("6\n");
Ok(())
}
#[test]
fn run_task_files() -> Result<(), Error> {
let par = Path::new("tests");
let tasks = std::fs::read_dir(par.join("tasks")).unwrap();
for task in tasks {
let task = task.unwrap().path();
if task.extension() != Some(&std::ffi::OsString::from("tasks")) {
continue;
}
print!("Testing: {task:?}");
let path = task.to_string_lossy();
let out = task.with_extension("stdout");
let stdout = std::fs::read_to_string(out).unwrap();
Command::cargo_bin("nadi")?
.arg(path.as_ref())
.assert()
.stdout(stdout);
println!(" ✅");
}
Ok(())
}