@@ -175,8 +175,9 @@ fn drain_entry() {
175175 "more" . parse :: < HeaderName > ( ) . unwrap ( ) ,
176176 "insertions" . parse ( ) . unwrap ( ) ,
177177 ) ;
178+ assert_eq ! ( 5 , headers. len( ) ) ;
178179
179- // Using insert
180+ // Using insert_mult
180181 {
181182 let mut e = match headers. entry ( "hello" ) {
182183 Entry :: Occupied ( e) => e,
@@ -188,6 +189,8 @@ fn drain_entry() {
188189 assert_eq ! ( vals[ 0 ] , "world" ) ;
189190 assert_eq ! ( vals[ 1 ] , "world2" ) ;
190191 }
192+
193+ assert_eq ! ( 5 -2 +1 , headers. len( ) ) ;
191194}
192195
193196#[ test]
@@ -422,23 +425,88 @@ fn value_htab() {
422425 HeaderValue :: from_str ( "hello\t world" ) . unwrap ( ) ;
423426}
424427
428+ #[ test]
429+ fn remove_entry_multi_0 ( ) {
430+ let mut headers = HeaderMap :: new ( ) ;
431+ let cookies = remove_all_set_cookies ( & mut headers) ;
432+ assert_eq ! ( cookies. len( ) , 0 ) ;
433+ assert_eq ! ( headers. len( ) , 0 ) ;
434+ }
435+
436+ #[ test]
437+ fn remove_entry_multi_0_others ( ) {
438+ let mut headers = HeaderMap :: new ( ) ;
439+ headers. insert ( VIA , "1.1 example.com" . parse ( ) . unwrap ( ) ) ;
440+ headers. append ( VIA , "1.1 other.com" . parse ( ) . unwrap ( ) ) ;
441+
442+ let cookies = remove_all_set_cookies ( & mut headers) ;
443+ assert_eq ! ( cookies. len( ) , 0 ) ;
444+ assert_eq ! ( headers. len( ) , 2 ) ;
445+ }
446+
447+ #[ test]
448+ fn remove_entry_multi_1 ( ) {
449+ let mut headers = HeaderMap :: new ( ) ;
450+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
451+
452+ let cookies = remove_all_set_cookies ( & mut headers) ;
453+ assert_eq ! ( cookies. len( ) , 1 ) ;
454+ assert_eq ! ( headers. len( ) , 0 ) ;
455+ }
456+
457+ #[ test]
458+ fn remove_entry_multi_1_other ( ) {
459+ let mut headers = HeaderMap :: new ( ) ;
460+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
461+ headers. insert ( VIA , "1.1 example.com" . parse ( ) . unwrap ( ) ) ;
462+
463+ let cookies = remove_all_set_cookies ( & mut headers) ;
464+ assert_eq ! ( cookies. len( ) , 1 ) ;
465+ assert_eq ! ( headers. len( ) , 1 ) ;
466+ }
467+
425468// For issue hyperimum/http#446
426469#[ test]
427- fn remove_entry_multi ( ) {
428- let mut headers = http:: HeaderMap :: new ( ) ;
429- for h in & [
430- "cookie_1=value 1; path=/path; Domain=example.com; \
431- Expires=Wed, 30 Nov 2020 13:28:00 GMT",
432- "cookie_2=valu%C3%A9 2; path=/; Domain=par.example.com; \
433- Expires=Wed, 29 Nov 2020 18:00:00 GMT" ]
434- {
435- headers. append ( SET_COOKIE , h. parse ( ) . unwrap ( ) ) ;
436- }
470+ fn remove_entry_multi_2 ( ) {
471+ let mut headers = HeaderMap :: new ( ) ;
472+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
473+ headers. append ( SET_COOKIE , "cookie_2=value 2" . parse ( ) . unwrap ( ) ) ;
474+
475+ let cookies = remove_all_set_cookies ( & mut headers) ;
476+ assert_eq ! ( cookies. len( ) , 2 ) ;
477+ assert_eq ! ( headers. len( ) , 0 ) ;
478+ }
479+
480+ #[ test]
481+ fn remove_entry_multi_3 ( ) {
482+ let mut headers = HeaderMap :: new ( ) ;
483+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
484+ headers. append ( SET_COOKIE , "cookie_2=value 2" . parse ( ) . unwrap ( ) ) ;
485+ headers. append ( SET_COOKIE , "cookie_3=value 3" . parse ( ) . unwrap ( ) ) ;
437486
438- let cookies: Vec < HeaderValue > = match headers. entry ( SET_COOKIE ) {
487+ let cookies = remove_all_set_cookies ( & mut headers) ;
488+ assert_eq ! ( cookies. len( ) , 3 ) ;
489+ assert_eq ! ( headers. len( ) , 0 ) ;
490+ }
491+
492+ #[ test]
493+ fn remove_entry_multi_3_others ( ) {
494+ let mut headers = HeaderMap :: new ( ) ;
495+ headers. insert ( VIA , "1.1 example.com" . parse ( ) . unwrap ( ) ) ;
496+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
497+ headers. append ( SET_COOKIE , "cookie_2=value 2" . parse ( ) . unwrap ( ) ) ;
498+ headers. append ( VIA , "1.1 other.com" . parse ( ) . unwrap ( ) ) ;
499+ headers. append ( SET_COOKIE , "cookie_3=value 3" . parse ( ) . unwrap ( ) ) ;
500+ headers. insert ( VARY , "*" . parse ( ) . unwrap ( ) ) ;
501+
502+ let cookies = remove_all_set_cookies ( & mut headers) ;
503+ assert_eq ! ( cookies. len( ) , 3 ) ;
504+ assert_eq ! ( headers. len( ) , 3 ) ;
505+ }
506+
507+ fn remove_all_set_cookies ( headers : & mut HeaderMap ) -> Vec < HeaderValue > {
508+ match headers. entry ( SET_COOKIE ) {
439509 Entry :: Occupied ( e) => e. remove_entry_mult ( ) . 1 . collect ( ) ,
440510 Entry :: Vacant ( _) => vec ! [ ] ,
441- } ;
442-
443- assert_eq ! ( cookies. len( ) , 2 ) ;
511+ }
444512}
0 commit comments