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