@@ -75,8 +75,7 @@ impl<'a> DecompressionStruct<'a> {
7575 }
7676
7777 pub fn is_extra_compressed ( & self ) -> bool {
78- let last_encoding = self . last_encoding ( ) ;
79- is_compressed ( self . extra ( ) , last_encoding)
78+ is_compressed ( self . extra ( ) , self . last_encoding ( ) )
8079 }
8180
8281 pub fn try_decompress_extra (
@@ -137,3 +136,160 @@ impl<'a> DecompressionStruct<'a> {
137136 }
138137 }
139138}
139+
140+ #[ cfg( test) ]
141+ mod tests {
142+ use crate :: tests:: {
143+ all_encoding_info_multi_header, all_encoding_info_single_header,
144+ } ;
145+
146+ use super :: * ;
147+
148+ #[ test]
149+ fn test_decompression_struct_last_encoding_single_value ( ) {
150+ let mut encoding_info =
151+ vec ! [ EncodingInfo :: new( 0 , vec![ ContentEncoding :: Gzip ] ) ] ;
152+ let mut buf = BytesMut :: new ( ) ;
153+ let decompression_struct = DecompressionStruct :: new (
154+ & [ ] ,
155+ None ,
156+ & mut encoding_info,
157+ ( & mut buf) . writer ( ) ,
158+ ) ;
159+ assert_eq ! (
160+ decompression_struct. last_encoding( ) ,
161+ & ContentEncoding :: Gzip
162+ ) ;
163+ }
164+
165+ #[ test]
166+ fn test_decompression_struct_last_encoding_single_header ( ) {
167+ let mut encoding_info = all_encoding_info_single_header ( ) ;
168+ let mut buf = BytesMut :: new ( ) ;
169+ let decompression_struct = DecompressionStruct :: new (
170+ & [ ] ,
171+ None ,
172+ & mut encoding_info,
173+ ( & mut buf) . writer ( ) ,
174+ ) ;
175+ assert_eq ! (
176+ decompression_struct. last_encoding( ) ,
177+ & ContentEncoding :: Identity
178+ ) ;
179+ }
180+
181+ #[ test]
182+ fn test_decompression_struct_last_encoding_multi_header ( ) {
183+ let mut encoding_info = all_encoding_info_multi_header ( ) ;
184+ let mut buf = BytesMut :: new ( ) ;
185+ let decompression_struct = DecompressionStruct :: new (
186+ & [ ] ,
187+ None ,
188+ & mut encoding_info,
189+ ( & mut buf) . writer ( ) ,
190+ ) ;
191+ assert_eq ! (
192+ decompression_struct. last_encoding( ) ,
193+ & ContentEncoding :: Identity
194+ ) ;
195+ }
196+
197+ #[ test]
198+ fn test_push_last_encoding_single_value ( ) {
199+ let mut encoding_info =
200+ vec ! [ EncodingInfo :: new( 0 , vec![ ContentEncoding :: Gzip ] ) ] ;
201+
202+ let mut buf = BytesMut :: new ( ) ;
203+ let mut decompression_struct = DecompressionStruct :: new (
204+ & [ ] ,
205+ None ,
206+ & mut encoding_info,
207+ ( & mut buf) . writer ( ) ,
208+ ) ;
209+ decompression_struct. push_last_encoding ( ContentEncoding :: Brotli ) ;
210+ let to_verify = vec ! [ EncodingInfo :: new(
211+ 0 ,
212+ vec![ ContentEncoding :: Gzip , ContentEncoding :: Brotli ] ,
213+ ) ] ;
214+
215+ assert_eq ! ( decompression_struct. encoding_info, to_verify) ;
216+ }
217+
218+ #[ test]
219+ fn test_push_last_encoding_single_header ( ) {
220+ let mut encoding_info = all_encoding_info_single_header ( ) ;
221+ let mut buf = BytesMut :: new ( ) ;
222+ let mut decompression_struct = DecompressionStruct :: new (
223+ & [ ] ,
224+ None ,
225+ & mut encoding_info,
226+ ( & mut buf) . writer ( ) ,
227+ ) ;
228+ decompression_struct. push_last_encoding ( ContentEncoding :: Brotli ) ;
229+ let to_verify = vec ! [ EncodingInfo :: new(
230+ 0 ,
231+ vec![
232+ ContentEncoding :: Brotli ,
233+ ContentEncoding :: Deflate ,
234+ ContentEncoding :: Gzip ,
235+ ContentEncoding :: Zstd ,
236+ ContentEncoding :: Identity ,
237+ ContentEncoding :: Brotli ,
238+ ] ,
239+ ) ] ;
240+
241+ assert_eq ! ( decompression_struct. encoding_info, to_verify) ;
242+ }
243+
244+ #[ test]
245+ fn test_push_last_encoding_multi_header ( ) {
246+ let mut encoding_info = all_encoding_info_multi_header ( ) ;
247+ let mut buf = BytesMut :: new ( ) ;
248+ let mut decompression_struct = DecompressionStruct :: new (
249+ & [ ] ,
250+ None ,
251+ & mut encoding_info,
252+ ( & mut buf) . writer ( ) ,
253+ ) ;
254+ decompression_struct. push_last_encoding ( ContentEncoding :: Brotli ) ;
255+ let to_verify = vec ! [
256+ EncodingInfo :: new( 0 , vec![ ContentEncoding :: Brotli ] ) ,
257+ EncodingInfo :: new( 1 , vec![ ContentEncoding :: Deflate ] ) ,
258+ EncodingInfo :: new( 2 , vec![ ContentEncoding :: Gzip ] ) ,
259+ EncodingInfo :: new( 3 , vec![ ContentEncoding :: Zstd ] ) ,
260+ EncodingInfo :: new(
261+ 4 ,
262+ vec![ ContentEncoding :: Identity , ContentEncoding :: Brotli ] ,
263+ ) ,
264+ ] ;
265+
266+ assert_eq ! ( decompression_struct. encoding_info, to_verify) ;
267+ }
268+
269+ #[ test]
270+ fn test_dstruct_is_encodings_empty_true ( ) {
271+ let mut encoding_info = vec ! [ EncodingInfo :: new( 0 , vec![ ] ) ] ;
272+ let mut buf = BytesMut :: new ( ) ;
273+ let decompression_struct = DecompressionStruct :: new (
274+ & [ ] ,
275+ None ,
276+ & mut encoding_info,
277+ ( & mut buf) . writer ( ) ,
278+ ) ;
279+ assert ! ( decompression_struct. is_encodings_empty( ) ) ;
280+ }
281+
282+ #[ test]
283+ fn test_dstruct_is_encodings_empty_false ( ) {
284+ let mut encoding_info =
285+ vec ! [ EncodingInfo :: new( 0 , vec![ ContentEncoding :: Gzip ] ) ] ;
286+ let mut buf = BytesMut :: new ( ) ;
287+ let decompression_struct = DecompressionStruct :: new (
288+ & [ ] ,
289+ None ,
290+ & mut encoding_info,
291+ ( & mut buf) . writer ( ) ,
292+ ) ;
293+ assert ! ( !decompression_struct. is_encodings_empty( ) ) ;
294+ }
295+ }
0 commit comments