1 #[allow(unused)]
2 use futures::{executor::block_on, io::AsyncReadExt, stream::StreamExt};
3 
4 #[macro_use]
5 mod utils;
6 
7 test_cases!(xz);
8 
9 #[allow(unused)]
10 use utils::{algos::xz::sync, InputStream};
11 
12 #[cfg(feature = "stream")]
13 use utils::algos::xz::stream;
14 
15 #[cfg(feature = "futures-io")]
16 use utils::algos::xz::futures::{bufread, read};
17 
18 #[test]
19 #[ntest::timeout(1000)]
20 #[cfg(feature = "stream")]
stream_multiple_members_with_padding()21 fn stream_multiple_members_with_padding() {
22     let compressed = [
23         sync::compress(&[1, 2, 3, 4, 5, 6]),
24         vec![0, 0, 0, 0],
25         sync::compress(&[6, 5, 4, 3, 2, 1]),
26         vec![0, 0, 0, 0],
27     ]
28     .join(&[][..]);
29 
30     let input = InputStream::from(vec![compressed]);
31 
32     #[allow(deprecated)]
33     let mut decoder = stream::Decoder::new(input.bytes_05_stream());
34     #[allow(deprecated)]
35     decoder.multiple_members(true);
36     let output = stream::to_vec(decoder);
37 
38     assert_eq!(output, &[1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1][..]);
39 }
40 
41 #[test]
42 #[ntest::timeout(1000)]
43 #[cfg(feature = "stream")]
stream_multiple_members_with_invalid_padding()44 fn stream_multiple_members_with_invalid_padding() {
45     let compressed = [
46         sync::compress(&[1, 2, 3, 4, 5, 6]),
47         vec![0, 0, 0],
48         sync::compress(&[6, 5, 4, 3, 2, 1]),
49         vec![0, 0, 0, 0],
50     ]
51     .join(&[][..]);
52 
53     let input = InputStream::from(vec![compressed]);
54 
55     #[allow(deprecated)]
56     let mut decoder = stream::Decoder::new(input.bytes_05_stream());
57     #[allow(deprecated)]
58     decoder.multiple_members(true);
59 
60     assert!(block_on(decoder.next()).unwrap().is_err());
61     assert!(block_on(decoder.next()).is_none());
62 }
63 
64 #[test]
65 #[ntest::timeout(1000)]
66 #[cfg(feature = "futures-io")]
bufread_multiple_members_with_padding()67 fn bufread_multiple_members_with_padding() {
68     let compressed = [
69         sync::compress(&[1, 2, 3, 4, 5, 6]),
70         vec![0, 0, 0, 0],
71         sync::compress(&[6, 5, 4, 3, 2, 1]),
72         vec![0, 0, 0, 0],
73     ]
74     .join(&[][..]);
75 
76     let input = InputStream::from(vec![compressed]);
77 
78     let mut decoder = bufread::Decoder::new(bufread::from(&input));
79     decoder.multiple_members(true);
80     let output = read::to_vec(decoder);
81 
82     assert_eq!(output, &[1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1][..]);
83 }
84 
85 #[test]
86 #[ntest::timeout(1000)]
87 #[cfg(feature = "futures-io")]
bufread_multiple_members_with_invalid_padding()88 fn bufread_multiple_members_with_invalid_padding() {
89     let compressed = [
90         sync::compress(&[1, 2, 3, 4, 5, 6]),
91         vec![0, 0, 0],
92         sync::compress(&[6, 5, 4, 3, 2, 1]),
93         vec![0, 0, 0, 0],
94     ]
95     .join(&[][..]);
96 
97     let input = InputStream::from(vec![compressed]);
98 
99     let mut decoder = bufread::Decoder::new(bufread::from(&input));
100     decoder.multiple_members(true);
101 
102     let mut output = Vec::new();
103     assert!(block_on(decoder.read_to_end(&mut output)).is_err());
104 }
105