use grin_util as util;
use crate::util::zip;
use std::fs::{self, File};
use std::io::Write;
use std::path::{Path, PathBuf};
#[test]
fn zip_unzip() {
let root = Path::new("target/tmp");
let zip_path = root.join("zipped.zip");
let path = root.join("to_zip");
{
fs::create_dir_all(&path).unwrap();
let mut file = File::create(path.join("foo.txt")).unwrap();
file.write_all(b"Hello, world!").unwrap();
let mut file = File::create(path.join("bar.txt")).unwrap();
file.write_all(b"This, was unexpected!").unwrap();
let mut file = File::create(path.join("wat.txt")).unwrap();
file.write_all(b"Goodbye, world!").unwrap();
let sub_path = path.join("sub");
fs::create_dir_all(&sub_path).unwrap();
let mut file = File::create(sub_path.join("lorem.txt")).unwrap();
file.write_all(b"Lorem ipsum dolor sit amet, consectetur adipiscing elit")
.unwrap();
}
{
let files = vec![
PathBuf::from("foo.txt"),
PathBuf::from("bar.txt"),
PathBuf::from("sub/lorem.txt"),
];
let zip_file = File::create(&zip_path).unwrap();
zip::create_zip(&zip_file, &path, files).unwrap();
zip_file.sync_all().unwrap();
}
assert!(zip_path.exists());
assert!(zip_path.is_file());
assert!(zip_path.metadata().unwrap().len() > 300);
let zip_file = File::open(zip_path).unwrap();
{
let dest_dir = root.join("unzipped");
fs::create_dir_all(&dest_dir).unwrap();
let files = vec![PathBuf::from("foo.txt"), PathBuf::from("sub/lorem.txt")];
zip::extract_files(zip_file, &dest_dir, files).unwrap();
assert!(dest_dir.join("foo.txt").is_file());
assert!(!dest_dir.join("bar.txt").exists());
let sub_path = dest_dir.join("sub");
assert!(sub_path.is_dir());
let lorem = sub_path.join("lorem.txt");
assert!(lorem.is_file());
assert_eq!(
fs::read_to_string(lorem).unwrap(),
"Lorem ipsum dolor sit amet, consectetur adipiscing elit"
);
}
}