use std::path::PathBuf;
use std::process::Command;
use oxiarc_archive::ZipWriter;
fn cli_bin() -> PathBuf {
PathBuf::from(env!("CARGO_BIN_EXE_oxiarc"))
}
#[test]
fn test_cli_extract_lenient_flag_accepted() {
let fixture =
std::env::temp_dir().join(format!("oxiarc_lenient_fixture_{}.zip", std::process::id()));
let mut buf = Vec::new();
{
let mut w = ZipWriter::new(&mut buf);
w.add_file("hello.txt", b"Hello, lenient!")
.expect("add file to zip");
w.finish().expect("finish zip");
}
std::fs::write(&fixture, &buf).expect("write fixture zip");
let list_output = Command::new(cli_bin())
.args(["list", "--lenient"])
.arg(&fixture)
.output()
.expect("run list --lenient");
assert!(
list_output.status.success(),
"list --lenient failed: status={:?} stderr={}",
list_output.status,
String::from_utf8_lossy(&list_output.stderr)
);
let tmpdir =
std::env::temp_dir().join(format!("oxiarc_lenient_extract_{}", std::process::id()));
let _ = std::fs::remove_dir_all(&tmpdir);
std::fs::create_dir_all(&tmpdir).expect("create extract dir");
let extract_output = Command::new(cli_bin())
.args(["extract", "--lenient", "-o"])
.arg(&tmpdir)
.arg(&fixture)
.output()
.expect("run extract --lenient");
assert!(
extract_output.status.success(),
"extract --lenient failed: status={:?} stderr={}",
extract_output.status,
String::from_utf8_lossy(&extract_output.stderr)
);
let extracted = tmpdir.join("hello.txt");
assert!(
extracted.exists(),
"extracted hello.txt not found under {}",
tmpdir.display()
);
let contents = std::fs::read(&extracted).expect("read extracted file");
assert_eq!(contents, b"Hello, lenient!");
let _ = std::fs::remove_dir_all(&tmpdir);
let _ = std::fs::remove_file(&fixture);
}
#[test]
fn test_cli_list_lenient_flag_accepted() {
let fixture = std::env::temp_dir().join(format!(
"oxiarc_lenient_list_fixture_{}.zip",
std::process::id()
));
let mut buf = Vec::new();
{
let mut w = ZipWriter::new(&mut buf);
w.add_file("a.txt", b"aaa").expect("add a.txt");
w.add_file("b.txt", b"bbb").expect("add b.txt");
w.finish().expect("finish zip");
}
std::fs::write(&fixture, &buf).expect("write fixture zip");
let output = Command::new(cli_bin())
.args(["list", "--lenient"])
.arg(&fixture)
.output()
.expect("run list --lenient");
assert!(
output.status.success(),
"list --lenient failed: status={:?} stderr={}",
output.status,
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("a.txt"),
"expected 'a.txt' in list output, got:\n{}",
stdout
);
assert!(
stdout.contains("b.txt"),
"expected 'b.txt' in list output, got:\n{}",
stdout
);
let _ = std::fs::remove_file(&fixture);
}