Skip to content

Commit e419939

Browse files
committed
tests showing similar problem with remove_entry on extra values
1 parent 2c247d0 commit e419939

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

tests/header_map.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,3 +575,62 @@ fn remove_all_values<K>(headers: &mut HeaderMap, key: K) -> Vec<HeaderValue>
575575
Entry::Vacant(_) => vec![],
576576
}
577577
}
578+
579+
#[test]
580+
fn remove_entry_3_others_a() {
581+
let mut headers = HeaderMap::new();
582+
headers.insert(VIA, "1.1 example.com".parse().unwrap());
583+
headers.insert(SET_COOKIE, "cookie_1=value 1".parse().unwrap());
584+
headers.append(SET_COOKIE, "cookie_2=value 2".parse().unwrap());
585+
headers.append(VIA, "1.1 other.com".parse().unwrap());
586+
headers.append(SET_COOKIE, "cookie_3=value 3".parse().unwrap());
587+
headers.insert(VARY, "*".parse().unwrap());
588+
589+
assert_eq!(headers.len(), 6);
590+
591+
let cookie = remove_values(&mut headers, SET_COOKIE);
592+
assert_eq!(cookie, Some("cookie_1=value 1".parse().unwrap()));
593+
assert_eq!(headers.len(), 3);
594+
595+
let via = remove_values(&mut headers, VIA);
596+
assert_eq!(via, Some("1.1 example.com".parse().unwrap()));
597+
assert_eq!(headers.len(), 1);
598+
599+
let vary = remove_values(&mut headers, VARY);
600+
assert_eq!(vary, Some("*".parse().unwrap()));
601+
assert_eq!(headers.len(), 0);
602+
}
603+
604+
#[test]
605+
fn remove_entry_3_others_b() {
606+
let mut headers = HeaderMap::new();
607+
headers.insert(VIA, "1.1 example.com".parse().unwrap());
608+
headers.insert(SET_COOKIE, "cookie_1=value 1".parse().unwrap());
609+
headers.append(SET_COOKIE, "cookie_2=value 2".parse().unwrap());
610+
headers.append(VIA, "1.1 other.com".parse().unwrap());
611+
headers.append(SET_COOKIE, "cookie_3=value 3".parse().unwrap());
612+
headers.insert(VARY, "*".parse().unwrap());
613+
614+
assert_eq!(headers.len(), 6);
615+
616+
let vary = remove_values(&mut headers, VARY);
617+
assert_eq!(vary, Some("*".parse().unwrap()));
618+
assert_eq!(headers.len(), 5);
619+
620+
let via = remove_values(&mut headers, VIA);
621+
assert_eq!(via, Some("1.1 example.com".parse().unwrap()));
622+
assert_eq!(headers.len(), 3);
623+
624+
let cookie = remove_values(&mut headers, SET_COOKIE);
625+
assert_eq!(cookie, Some("cookie_1=value 1".parse().unwrap()));
626+
assert_eq!(headers.len(), 0);
627+
}
628+
629+
fn remove_values<K>(headers: &mut HeaderMap, key: K) -> Option<HeaderValue>
630+
where K: IntoHeaderName
631+
{
632+
match headers.entry(key) {
633+
Entry::Occupied(e) => Some(e.remove_entry().1),
634+
Entry::Vacant(_) => None,
635+
}
636+
}

0 commit comments

Comments
 (0)