xf 0.7.0

File-aware dynamic command runner
Documentation
use assert_cmd::Command;

#[cfg(unix)]
mod unix_tests;

#[cfg(windows)]
mod windows_tests;

#[macro_export]
macro_rules! assert_output {
    ($assert:expr, $expect:literal) => {
        let output = $assert.get_output();
        let content = String::from_utf8_lossy(&output.stdout);
        assert_eq!(&content, $expect);
    };
    ($assert:expr, $expect:literal, $from:expr, $to:expr) => {
        let output = $assert.get_output();
        let content = String::from_utf8_lossy(&output.stdout);
        let content = content.replace($from, $to);
        assert_eq!(&content, $expect);
    };
}

fn env_config_path() -> String {
    format!("{}_CONFIG_PATH", assert_cmd::crate_name!().to_uppercase())
}

fn xf() -> Command {
    let mut cmd = Command::cargo_bin(assert_cmd::crate_name!()).unwrap();
    cmd.env_remove(&env_config_path());
    cmd.env_remove("HOME");
    cmd.env_remove("USERPROFILE");
    cmd
}

fn xf_with_config(paths: &[&str]) -> Command {
    let mut cmd = xf();
    cmd.env(env_config_path(), &fixtures_dir(paths));
    cmd
}

fn fixtures_dir(paths: &[&str]) -> String {
    let mut dir = std::env::current_dir().unwrap();
    dir.push("tests");
    dir.push("fixtures");
    for p in paths {
        dir.push(p)
    }
    dir.to_string_lossy().escape_debug().to_string()
}