use lz4::cli::constants::{set_display_level, set_lz4c_legacy_commands};
use lz4::cli::init::detect_alias;
use lz4::cli::op_mode::{OpMode, LZ4_CLEVEL_DEFAULT, LZ4_NBWORKERS_DEFAULT};
use lz4::io::file_io::STDOUT_MARK;
fn reset_globals() {
set_display_level(2);
set_lz4c_legacy_commands(false);
}
#[test]
fn lz4cat_sets_decompress_mode() {
reset_globals();
let init = detect_alias("lz4cat");
assert_eq!(init.op_mode, OpMode::Decompress);
}
#[test]
fn lz4cat_sets_multiple_inputs() {
reset_globals();
let init = detect_alias("lz4cat");
assert!(init.multiple_inputs);
}
#[test]
fn lz4cat_sets_force_stdout() {
reset_globals();
let init = detect_alias("lz4cat");
assert!(init.force_stdout);
}
#[test]
fn lz4cat_sets_output_filename_to_stdout_mark() {
reset_globals();
let init = detect_alias("lz4cat");
assert_eq!(init.output_filename.as_deref(), Some(STDOUT_MARK));
}
#[test]
fn lz4cat_sets_display_level_override_to_1() {
reset_globals();
let init = detect_alias("lz4cat");
assert_eq!(init.display_level_override, Some(1));
}
#[test]
fn lz4cat_sets_overwrite_and_pass_through() {
reset_globals();
let init = detect_alias("lz4cat");
assert!(init.prefs.overwrite);
assert!(init.prefs.pass_through);
assert!(!init.prefs.remove_src_file);
}
#[test]
fn lz4cat_does_not_set_lz4c_legacy() {
reset_globals();
let init = detect_alias("lz4cat");
assert!(!init.lz4c_legacy);
}
#[test]
fn lz4cat_with_path_prefix() {
reset_globals();
let init = detect_alias("/usr/bin/lz4cat");
assert_eq!(init.op_mode, OpMode::Decompress);
assert!(init.multiple_inputs);
}
#[test]
fn lz4cat_with_exe_extension() {
reset_globals();
let init = detect_alias("lz4cat.exe");
assert_eq!(init.op_mode, OpMode::Decompress);
assert!(init.multiple_inputs);
}
#[test]
fn unlz4_sets_decompress_mode() {
reset_globals();
let init = detect_alias("unlz4");
assert_eq!(init.op_mode, OpMode::Decompress);
}
#[test]
fn unlz4_does_not_set_multiple_inputs() {
reset_globals();
let init = detect_alias("unlz4");
assert!(!init.multiple_inputs);
}
#[test]
fn unlz4_does_not_set_force_stdout() {
reset_globals();
let init = detect_alias("unlz4");
assert!(!init.force_stdout);
}
#[test]
fn unlz4_output_filename_is_none() {
reset_globals();
let init = detect_alias("unlz4");
assert!(init.output_filename.is_none());
}
#[test]
fn unlz4_display_level_override_is_none() {
reset_globals();
let init = detect_alias("unlz4");
assert!(init.display_level_override.is_none());
}
#[test]
fn unlz4_does_not_set_lz4c_legacy() {
reset_globals();
let init = detect_alias("unlz4");
assert!(!init.lz4c_legacy);
}
#[test]
fn unlz4_with_exe_extension() {
reset_globals();
let init = detect_alias("unlz4.exe");
assert_eq!(init.op_mode, OpMode::Decompress);
}
#[test]
fn lz4c_sets_lz4c_legacy_field() {
reset_globals();
let init = detect_alias("lz4c");
assert!(init.lz4c_legacy);
}
#[test]
fn lz4c_op_mode_is_auto() {
reset_globals();
let init = detect_alias("lz4c");
assert_eq!(init.op_mode, OpMode::Auto);
}
#[test]
fn lz4c_does_not_set_multiple_inputs() {
reset_globals();
let init = detect_alias("lz4c");
assert!(!init.multiple_inputs);
}
#[test]
fn lz4c_does_not_set_force_stdout() {
reset_globals();
let init = detect_alias("lz4c");
assert!(!init.force_stdout);
}
#[test]
fn lz4_returns_auto_mode() {
reset_globals();
let init = detect_alias("lz4");
assert_eq!(init.op_mode, OpMode::Auto);
}
#[test]
fn lz4_returns_no_legacy_flag() {
reset_globals();
let init = detect_alias("lz4");
assert!(!init.lz4c_legacy);
}
#[test]
fn lz4_returns_no_multiple_inputs() {
reset_globals();
let init = detect_alias("lz4");
assert!(!init.multiple_inputs);
}
#[test]
fn lz4_returns_no_force_stdout() {
reset_globals();
let init = detect_alias("lz4");
assert!(!init.force_stdout);
}
#[test]
fn lz4_output_filename_is_none() {
reset_globals();
let init = detect_alias("lz4");
assert!(init.output_filename.is_none());
}
#[test]
fn lz4_display_level_override_is_none() {
reset_globals();
let init = detect_alias("lz4");
assert!(init.display_level_override.is_none());
}
#[test]
fn lz4_overwrite_is_false() {
reset_globals();
let init = detect_alias("lz4");
assert!(!init.prefs.overwrite);
}
#[test]
fn unknown_binary_returns_auto_mode() {
reset_globals();
let init = detect_alias("my-lz4-wrapper");
assert_eq!(init.op_mode, OpMode::Auto);
}
#[test]
fn unknown_binary_no_flags_set() {
reset_globals();
let init = detect_alias("my-lz4-wrapper");
assert!(!init.lz4c_legacy);
assert!(!init.multiple_inputs);
assert!(!init.force_stdout);
assert!(init.output_filename.is_none());
assert!(init.display_level_override.is_none());
}
#[test]
fn subprocess_helper_clevel_wiring() {
if let Ok(expected) = std::env::var("LZ4_TEST_CLEVEL_WIRING") {
let expected: i32 = expected
.parse()
.expect("LZ4_TEST_CLEVEL_WIRING must be numeric");
reset_globals();
let init = detect_alias("lz4");
assert_eq!(
init.c_level, expected,
"detect_alias must propagate LZ4_CLEVEL into c_level"
);
}
}
#[test]
fn detect_alias_c_level_defaults_to_lz4_clevel_default() {
reset_globals();
let init = detect_alias("lz4");
assert_eq!(init.c_level, LZ4_CLEVEL_DEFAULT);
}
#[test]
fn detect_alias_c_level_reads_env_var() {
let exe = std::env::current_exe().expect("could not find test executable");
let output = std::process::Command::new(&exe)
.args([
"init::subprocess_helper_clevel_wiring",
"--exact",
"--nocapture",
])
.env("LZ4_CLEVEL", "9")
.env("LZ4_TEST_CLEVEL_WIRING", "9")
.output()
.expect("failed to spawn subprocess");
assert_eq!(
output.status.code(),
Some(0),
"detect_alias must read LZ4_CLEVEL=9 into c_level"
);
}
#[test]
fn detect_alias_nb_workers_defaults_to_lz4_nbworkers_default() {
reset_globals();
let init = detect_alias("lz4");
assert_eq!(init.nb_workers, LZ4_NBWORKERS_DEFAULT);
}
#[test]
fn cli_init_clone() {
reset_globals();
let init = detect_alias("lz4");
let cloned = init.clone();
assert_eq!(init.op_mode, cloned.op_mode);
assert_eq!(init.lz4c_legacy, cloned.lz4c_legacy);
assert_eq!(init.multiple_inputs, cloned.multiple_inputs);
assert_eq!(init.force_stdout, cloned.force_stdout);
assert_eq!(init.output_filename, cloned.output_filename);
assert_eq!(init.display_level_override, cloned.display_level_override);
assert_eq!(init.c_level, cloned.c_level);
assert_eq!(init.nb_workers, cloned.nb_workers);
}