use clap::Parser;
use thag_rs::{get_proc_flags, Cli, ProcFlags};
fn set_up() {
std::env::set_var("TEST_ENV", "1");
std::env::set_var("VISUAL", "cat");
std::env::set_var("EDITOR", "cat");
}
#[test]
fn test_cmd_args_get_args_script() {
set_up();
let args = vec!["thag", "demo_script", "--", "arg1", "arg2"];
let cli = Cli::parse_from(args);
assert!(Some("demo_script") == cli.script.as_deref());
assert!(vec!["arg1", "arg2"] == cli.args);
}
#[test]
fn test_cmd_args_get_args_expr() {
set_up();
let args = vec!["thag", "--expr", "'2 + 5'"];
let cli = Cli::parse_from(args);
assert!(cli.script.as_deref().is_none());
assert!(Some("'2 + 5'") == cli.expression.as_deref());
}
#[test]
fn test_cmd_args_get_args_stdin() {
set_up();
let args = vec!["thag", "-s"];
let cli = Cli::parse_from(args);
assert!(cli.script.as_deref().is_none());
assert!(cli.expression.as_deref().is_none());
}
#[test]
fn test_cmd_args_get_proc_flags() {
set_up();
let args = vec!["thag", "--expr", "'2 + 5'"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
assert!(proc_flags
.contains(ProcFlags::EXPR & ProcFlags::GENERATE & ProcFlags::BUILD & ProcFlags::RUN));
assert!(!proc_flags.contains(
ProcFlags::FORCE
| ProcFlags::DEBUG
| ProcFlags::VERBOSE
| ProcFlags::TIMINGS
| ProcFlags::REPL
| ProcFlags::EDIT
| ProcFlags::STDIN
));
}
#[test]
fn test_cmd_args_conflicts_with_all() {
set_up();
let args = vec!["thag", "--expr", "--edit"];
let result = Cli::try_parse_from(args);
assert!(result.is_err()); }
#[test]
fn test_cmd_args_proc_flags_generate_build_force_run() {
set_up();
let args = vec!["thag", "/demo/hello.rs", "-f"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::FORCE | ProcFlags::RUN));
}
#[test]
fn test_cmd_args_proc_flags_generate_norun() {
set_up();
let args = vec!["thag", "/demo/hello.rs", "-g"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
assert!(proc_flags.contains(ProcFlags::GENERATE | ProcFlags::NORUN));
}
#[test]
fn test_cmd_args_proc_flags_build_run() {
set_up();
let args = vec!["thag", "/demo/hello.rs", "-b"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
assert!(proc_flags.contains(ProcFlags::BUILD | ProcFlags::NORUN));
}
#[test]
fn test_cmd_args_proc_flags_expr() {
set_up();
let args = vec!["thag", "-e", "Hi"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("test_cmd_args_proc_flags_expr proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::RUN | ProcFlags::EXPR));
}
#[test]
fn test_cmd_args_proc_flags_edit() {
set_up();
let args = vec!["thag", "-d"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("test_cmd_args_proc_flags_edit proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::RUN | ProcFlags::EDIT));
}
#[test]
fn test_cmd_args_proc_flags_stdin() {
set_up();
let args = vec!["thag", "-s"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("test_cmd_args_proc_flags_stdin proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::RUN | ProcFlags::STDIN));
}
#[test]
fn test_cmd_args_proc_flags_loop() {
set_up();
let args = vec!["thag", "-l", "&line"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("test_cmd_args_proc_flags_loop proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::RUN | ProcFlags::LOOP));
}
#[test]
fn test_cmd_args_proc_flags_repl() {
set_up();
let args = vec!["thag", "-r"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
eprintln!("test_cmd_args_proc_flags_repl proc_flags={proc_flags:#?}");
assert!(proc_flags.contains(ProcFlags::RUN | ProcFlags::REPL));
}
#[test]
fn test_cmd_args_proc_flags_executable() {
set_up();
let args = vec!["thag", "/demo/hello.rs", "-x"];
let cli = Cli::parse_from(args);
let result = get_proc_flags(&cli);
let proc_flags = result.expect("Couldn't access ProcFlags");
assert!(proc_flags.contains(ProcFlags::NORUN | ProcFlags::EXECUTABLE));
}