use clap::Parser;
use std::path::PathBuf;
use std::{
env,
fs::{self, File},
io::Write,
sync::Once,
};
use thag_proc_macros::safe_println;
use thag_rs::{execute, Cli, DYNAMIC_SUBDIR, TMPDIR};
fn set_up() {
static INIT: Once = Once::new();
INIT.call_once(|| unsafe {
std::env::set_var("TEST_ENV", "1");
std::env::set_var("VISUAL", "cat");
std::env::set_var("EDITOR", "cat");
});
}
#[test]
fn test_script_runner_with_dependencies() -> Result<(), Box<dyn std::error::Error>> {
set_up();
let temp_dir: PathBuf = TMPDIR.join(DYNAMIC_SUBDIR);
fs::create_dir_all(&temp_dir).expect("Failed to create temp_dir directory");
let source_path = temp_dir.join("script.rs");
let mut script_file = File::create(&source_path)?;
let thag_rs_path = env::current_dir()?;
write!(
script_file,
r#"/*[toml]
[dependencies]
thag_rs = {{ path = {thag_rs_path:#?} }}
*/
use thag_rs::{{vprtln, Color}};
use thag_rs::Verbosity;
fn main() {{
vprtln!(Verbosity::Normal, "Color::light_cyan().bold()={{:#?}}", Color::light_cyan().bold());
}}"#
)?;
let args = vec![
"thag_rs", source_path.to_str().unwrap(),
"--",
"2>&1",
];
let real_args: Vec<String> = env::args().collect();
unsafe {
env::set_var("RUST_TEST_ARGS", real_args.join(" "));
}
let mut cli = Cli::parse_from(&args);
safe_println!("cli={:#?}", cli);
execute(&mut cli)?;
unsafe {
env::set_var("RUST_TEST_ARGS", real_args.join(" "));
}
Ok(())
}
include!(concat!(env!("OUT_DIR"), "/generated_tests.rs"));