use archivator::{Archive, Zip}; use std::io::{Read, Seek, SeekFrom}; #[test] fn test_zip_passwd() { let mut archive = Archive::::read_from_file("tests/files/archive_passwd.zip").unwrap(); let mut f = archive .get_file_reader_by_index_with_password(0, "passwd") .unwrap(); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "test file data"); } // #[test] fn test_zip() { let mut archive = Archive::::read_from_file("tests/files/archive.zip").unwrap(); assert_eq!(archive.comment(), "archive comment"); assert_eq!( archive .files() .iter() .map(|f| &f.name) .collect::>(), vec!["store", "deflate", "bzip", "lzma", "zstd", "xz"] ); let mut f = archive.get_file_reader_by_name("store").unwrap(); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "test file data"); assert_eq!(f.seek(SeekFrom::Start(5)).unwrap(), 5); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "file data"); assert_eq!(f.seek(SeekFrom::Start(0)).unwrap(), 0); let mut data = vec![0; 4]; f.read(&mut data).unwrap(); assert_eq!(String::from_utf8(data).unwrap(), "test"); assert_eq!(f.seek(SeekFrom::Current(1)).unwrap(), 5); let mut data = vec![0; 4]; f.read(&mut data).unwrap(); assert_eq!(String::from_utf8(data).unwrap(), "file"); assert_eq!(f.seek(SeekFrom::End(-4)).unwrap(), 10); let mut data = vec![0; 4]; f.read(&mut data).unwrap(); assert_eq!(String::from_utf8(data).unwrap(), "data"); f.seek(SeekFrom::Start(7)).unwrap(); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); f.seek(SeekFrom::End(-100)).unwrap_err(); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14); for index in 0..archive.len() { let mut f = archive.get_file_reader_by_index(index).unwrap(); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "test file data"); } }