use archivator::{Archive, Zip}; use std::io::{Read, Seek, SeekFrom}; #[test] fn test_zip() { let mut archive = Archive::>::read_from_file("tests/files/zip.zip").unwrap(); assert_eq!(archive.comment(), "archive comment"); assert_eq!( archive .files() .iter() .map(|f| &f.name) .collect::>(), vec!["a", "b", "c"] ); let mut f = archive.get_file_reader("a").unwrap(); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "file data \"a\""); assert_eq!(f.seek(SeekFrom::Start(5)).unwrap(), 5); let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "data \"a\""); 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(), "file"); 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(), "data"); assert_eq!(f.seek(SeekFrom::End(-3)).unwrap(), 10); let mut data = vec![0; 3]; f.read(&mut data).unwrap(); assert_eq!(String::from_utf8(data).unwrap(), "\"a\""); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 13); f.seek(SeekFrom::End(-100)).unwrap_err(); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 13); }