1
1
#[ test]
2
2
fn deflate_decoder_partial ( ) {
3
- // Decompresses to
4
- // "* QUOTAROOT INBOX \"User quota\"\r\n* QUOTA \"User quota\" (STORAGE 76 307200)\r\nA0001 OK Getquotaroot completed (0.001 + 0.000 secs).\r\n"
5
3
let input = vec ! [
6
4
210 , 82 , 8 , 12 , 245 , 15 , 113 , 12 , 242 , 247 , 15 , 81 , 240 , 244 , 115 , 242 , 143 , 80 , 80 , 10 ,
7
5
45 , 78 , 45 , 82 , 40 , 44 , 205 , 47 , 73 , 84 , 226 , 229 , 210 , 130 , 200 , 163 , 136 , 42 , 104 , 4 ,
@@ -10,19 +8,32 @@ fn deflate_decoder_partial() {
10
8
231 , 22 , 228 , 164 , 150 , 164 , 166 , 40 , 104 , 24 , 232 , 129 , 20 , 104 , 43 , 128 , 104 , 3 , 133 ,
11
9
226 , 212 , 228 , 98 , 77 , 61 , 94 , 46 , 0 , 0 , 0 , 0 , 255 , 255 ,
12
10
] ;
11
+ let expected_output = b"* QUOTAROOT INBOX \" User quota\" \r \n * QUOTA \" User quota\" (STORAGE 76 307200)\r \n A0001 OK Getquotaroot completed (0.001 + 0.000 secs).\r \n " ;
13
12
14
13
// Create very small output buffer.
15
- let mut output = vec ! [ 0 ; 8 ] ;
14
+ let mut output_buf = [ 0 ; 8 ] ;
15
+ let mut output: Vec < u8 > = Vec :: new ( ) ;
16
16
17
17
let zlib_header = false ;
18
18
let mut decompress = flate2:: Decompress :: new ( zlib_header) ;
19
19
20
20
let flush_decompress = flate2:: FlushDecompress :: None ;
21
- let status = decompress
22
- . decompress ( & input, & mut output, flush_decompress)
23
- . unwrap ( ) ;
24
- assert_eq ! ( status, flate2:: Status :: Ok ) ;
21
+ loop {
22
+ let prev_out = decompress. total_out ( ) ;
23
+ let status = decompress
24
+ . decompress ( & input[ decompress. total_in ( ) as usize ..] , & mut output_buf, flush_decompress)
25
+ . unwrap ( ) ;
26
+ let output_len = decompress. total_out ( ) - prev_out;
27
+ output. extend_from_slice ( & output_buf[ ..output_len as usize ] ) ;
28
+ eprintln ! ( "{}" , output. len( ) ) ;
25
29
26
- // Should not consume everything, there is not enough space in the buffer for the output.
27
- assert_ne ! ( decompress. total_in( ) , input. len( ) as u64 ) ;
30
+ // IMAP stream never ends.
31
+ assert_ne ! ( status, flate2:: Status :: StreamEnd ) ;
32
+
33
+ if status == flate2:: Status :: BufError && output_len == 0 {
34
+ break ;
35
+ }
36
+ }
37
+
38
+ assert_eq ! ( output. as_slice( ) , expected_output) ;
28
39
}
0 commit comments