diff options
Diffstat (limited to 'tests/zip.rs')
| -rw-r--r-- | tests/zip.rs | 31 |
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 @@ | |||
| 1 | use archivator::zip::ZipError; | ||
| 1 | use archivator::{Archive, Zip}; | 2 | use archivator::{Archive, Zip}; |
| 2 | use std::io::{Read, Seek, SeekFrom}; | 3 | use 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] | ||
| 101 | fn 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 | } | ||
