1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
use crate::zip::cp437::{from_char, is_cp437, to_char, FromCp437};
use crate::zip::datetime::DosDateTime;
use crate::zip::{bit::DeflateMode, BitFlag};
use chrono::{DateTime, Local, TimeZone};
#[test]
fn test_bit_flag() {
macro_rules! bit_flag {
($($get:ident $set:ident)+) => {
$(
let mut bit_flag = BitFlag::new(0);
assert_eq!(bit_flag.$get(), false);
bit_flag.$set(true);
assert_eq!(bit_flag.$get(), true);
bit_flag.$set(false);
assert_eq!(bit_flag.$get(), false);
)+
};
}
bit_flag!(
is_encrypted set_encrypted
is_imploding_8k set_imploding_8k
is_imploding_3sf_trees set_imploding_3sf_trees
is_lzma_has_eos_marker set_lzma_has_eos_marker
is_has_data_descriptor set_has_data_descriptor
is_patched_data set_patched_data
is_strong_encryption set_strong_encryption
is_utf8 set_utf8
is_cd_encryption set_cd_encryption
);
let mut bit_flag = BitFlag::new(0);
assert_eq!(bit_flag.deflate_mode(), DeflateMode::Normal);
bit_flag.set_deflate_mode(DeflateMode::Maximum);
assert_eq!(bit_flag.deflate_mode(), DeflateMode::Maximum);
bit_flag.set_deflate_mode(DeflateMode::Fast);
assert_eq!(bit_flag.deflate_mode(), DeflateMode::Fast);
bit_flag.set_deflate_mode(DeflateMode::SuperFast);
assert_eq!(bit_flag.deflate_mode(), DeflateMode::SuperFast);
bit_flag.set_deflate_mode(DeflateMode::Normal);
assert_eq!(bit_flag.deflate_mode(), DeflateMode::Normal);
}
#[test]
fn test_cp437() {
for b in 0..=255 {
assert_eq!(from_char(to_char(b)).unwrap(), b);
assert!(is_cp437(to_char(b)), "byte: {}", b);
}
assert_eq!(from_char('Σ'), Some(228));
assert_eq!(from_char('§'), None);
assert!(is_cp437('Σ'));
assert!(!is_cp437('§'));
assert_eq!(
Vec::from_cp437("hello world").unwrap(),
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
);
assert_eq!(
String::from_cp437([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]),
"hello world"
);
assert_eq!(
Vec::from_cp437("ABCDEFGHIJKLMNOPQRSTUVWXYZ").unwrap(),
(65..=90).collect::<Vec<u8>>()
);
assert_eq!(
String::from_cp437((97..=122).collect::<Vec<u8>>()),
"abcdefghijklmnopqrstuvwxyz"
);
}
#[test]
fn test_dos_datetime() {
let datetime = Local.with_ymd_and_hms(2001, 2, 3, 4, 5, 6).unwrap();
assert_eq!(
DateTime::from_dos_date_time(datetime.to_dos_date(), datetime.to_dos_time(), Local)
.unwrap(),
datetime
);
let datetime = Local.with_ymd_and_hms(1999, 9, 9, 9, 9, 9).unwrap();
assert_eq!(
DateTime::from_dos_date_time(datetime.to_dos_date(), datetime.to_dos_time(), Local)
.unwrap(),
Local.with_ymd_and_hms(1999, 9, 9, 9, 9, 8).unwrap()
); // Dos format stores seconds with an accuracy of 2s
}
|