use sevenz_rust::*;
use tempfile::*;
#[cfg(feature = "compress")]
#[test]
fn compress_multi_files_solid() {
let temp_dir = tempdir().unwrap();
let folder = temp_dir.path().join("folder");
std::fs::create_dir(&folder).unwrap();
let mut files = Vec::with_capacity(100);
let mut contents = Vec::with_capacity(100);
for i in 1..=10000 {
let name = format!("file{}.txt", i);
let content = format!("file{} with content", i);
std::fs::write(folder.join(&name), &content).unwrap();
files.push(name);
contents.push(content);
}
let dest = temp_dir.path().join("folder.7z");
let mut sz = SevenZWriter::create(&dest).unwrap();
sz.push_source_path(&folder, |_| true).unwrap();
sz.finish().expect("compress ok");
let decompress_dest = temp_dir.path().join("decompress");
decompress_file(dest, &decompress_dest).expect("decompress ok");
assert!(decompress_dest.exists());
for i in 0..files.len() {
let name = &files[i];
let content = &contents[i];
let decompress_file = decompress_dest.join(name);
assert!(decompress_file.exists());
assert_eq!(&std::fs::read_to_string(&decompress_file).unwrap(), content);
}
}
#[cfg(feature = "compress")]
#[test]
fn compress_multi_files_mix_solid_and_non_solid() {
use std::fs::File;
let temp_dir = tempdir().unwrap();
let folder = temp_dir.path().join("folder");
std::fs::create_dir(&folder).unwrap();
let mut files = Vec::with_capacity(100);
let mut contents = Vec::with_capacity(100);
for i in 1..=100 {
let name = format!("file{}.txt", i);
let content = format!("file{} with content", i);
std::fs::write(folder.join(&name), &content).unwrap();
files.push(name);
contents.push(content);
}
let dest = temp_dir.path().join("folder.7z");
let mut sz = SevenZWriter::create(&dest).unwrap();
sz.push_source_path(&folder, |_| true).unwrap();
for i in 101..=200 {
let name = format!("file{}.txt", i);
let content = format!("file{} with content", i);
std::fs::write(folder.join(&name), &content).unwrap();
files.push(name.clone());
contents.push(content);
let src = folder.join(&name);
sz.push_archive_entry(
SevenZArchiveEntry::from_path(&src, name),
Some(File::open(src).unwrap()),
)
.expect("ok");
}
sz.finish().expect("compress ok");
let decompress_dest = temp_dir.path().join("decompress");
decompress_file(dest, &decompress_dest).expect("decompress ok");
assert!(decompress_dest.exists());
for i in 0..files.len() {
let name = &files[i];
let content = &contents[i];
let decompress_file = decompress_dest.join(name);
assert!(decompress_file.exists());
assert_eq!(&std::fs::read_to_string(&decompress_file).unwrap(), content);
}
}