aboutsummaryrefslogtreecommitdiff
path: root/tests/zip.rs
diff options
context:
space:
mode:
authorIgor Tolmachev <me@igorek.dev>2024-07-16 20:08:01 +0900
committerIgor Tolmachev <me@igorek.dev>2024-07-16 20:08:01 +0900
commit9c0e544e79a4f7874dab449674a11d899bf61963 (patch)
tree89ce5177ede27b3966f9589e012887e8614a7b38 /tests/zip.rs
parentcc18a545a87ca616f05114d174690e5cc9614669 (diff)
downloadarchivator-9c0e544e79a4f7874dab449674a11d899bf61963.tar.gz
archivator-9c0e544e79a4f7874dab449674a11d899bf61963.zip
Add tests and fix bugs
Diffstat (limited to 'tests/zip.rs')
-rw-r--r--tests/zip.rs31
1 files changed, 25 insertions, 6 deletions
diff --git a/tests/zip.rs b/tests/zip.rs
index d02e96e..2c8fc56 100644
--- a/tests/zip.rs
+++ b/tests/zip.rs
@@ -1,3 +1,4 @@
1use archivator::zip::ZipError;
1use archivator::{Archive, Zip}; 2use archivator::{Archive, Zip};
2use std::io::{Read, Seek, SeekFrom}; 3use std::io::{Read, Seek, SeekFrom};
3 4
@@ -15,10 +16,12 @@ fn test_zip_passwd() {
15 vec!["store", "deflate", "bzip"] 16 vec!["store", "deflate", "bzip"]
16 ); 17 );
17 18
18 assert!(archive.get_file_reader_by_name("store").is_err()); 19 assert!(archive
20 .get_file_reader_by_name("store")
21 .is_err_and(|e| e == ZipError::PasswordIsNotSpecified));
19 assert!(archive 22 assert!(archive
20 .get_file_reader_by_name_with_password("store", b"wrong_passwd") 23 .get_file_reader_by_name_with_password("store", b"wrong_passwd")
21 .is_err()); 24 .is_err_and(|e| e == ZipError::IncorrectPassword));
22 25
23 for (name, check_data) in [ 26 for (name, check_data) in [
24 ("store", "1e643774f40510e37c6f3c451d9d"), 27 ("store", "1e643774f40510e37c6f3c451d9d"),
@@ -62,22 +65,25 @@ fn test_zip() {
62 65
63 assert_eq!(f.seek(SeekFrom::Start(0)).unwrap(), 0); 66 assert_eq!(f.seek(SeekFrom::Start(0)).unwrap(), 0);
64 let mut data = vec![0; 4]; 67 let mut data = vec![0; 4];
65 f.read(&mut data).unwrap(); 68 f.read_exact(&mut data).unwrap();
66 assert_eq!(String::from_utf8(data).unwrap(), "test"); 69 assert_eq!(String::from_utf8(data).unwrap(), "test");
67 70
68 assert_eq!(f.seek(SeekFrom::Current(1)).unwrap(), 5); 71 assert_eq!(f.seek(SeekFrom::Current(1)).unwrap(), 5);
69 let mut data = vec![0; 4]; 72 let mut data = vec![0; 4];
70 f.read(&mut data).unwrap(); 73 f.read_exact(&mut data).unwrap();
71 assert_eq!(String::from_utf8(data).unwrap(), "file"); 74 assert_eq!(String::from_utf8(data).unwrap(), "file");
72 75
73 assert_eq!(f.seek(SeekFrom::End(-4)).unwrap(), 10); 76 assert_eq!(f.seek(SeekFrom::End(-4)).unwrap(), 10);
74 let mut data = vec![0; 4]; 77 let mut data = vec![0; 4];
75 f.read(&mut data).unwrap(); 78 f.read_exact(&mut data).unwrap();
76 assert_eq!(String::from_utf8(data).unwrap(), "data"); 79 assert_eq!(String::from_utf8(data).unwrap(), "data");
77 80
78 f.seek(SeekFrom::Start(7)).unwrap(); 81 f.seek(SeekFrom::Start(7)).unwrap();
79 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); 82 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7);
80 assert!(f.seek(SeekFrom::End(-100)).is_err()); 83 assert!(f
84 .seek(SeekFrom::End(-100))
85 .is_err_and(|e| e.get_ref().unwrap().to_string()
86 == "Invalid seek to a negative or overflowing position"));
81 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); 87 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7);
82 88
83 assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14); 89 assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14);
@@ -90,3 +96,16 @@ fn test_zip() {
90 assert!(!f.is_seekable() || f.info().name == "store") 96 assert!(!f.is_seekable() || f.info().name == "store")
91 } 97 }
92} 98}
99
100#[test]
101fn test_bad_zip() {
102 assert!(Archive::<Zip>::read_from_file("tests/files/blank")
103 .is_err_and(|e| e == ZipError::EocdrNotFound));
104
105 assert_eq!(
106 Archive::<Zip>::read_from_file("tests/files/empty.zip")
107 .unwrap()
108 .len(),
109 0
110 );
111}