feat(headers): add PartialEq impl for Headers struct

compare the raw representations of the headers for the lack of a better alternative
helpful when asserting HttpRequest/ HttpResponse in tests elsewhere
This commit is contained in:
Prabhjyot Singh Sodhi
2015-09-16 11:45:42 +05:30
parent 3d05a90eef
commit 76cbf38423

View File

@@ -309,6 +309,22 @@ impl Headers {
} }
} }
impl PartialEq for Headers {
fn eq(&self, other: &Headers) -> bool {
if self.len() != other.len() {
return false;
}
for header in self.iter() {
match other.get_raw(header.name()) {
Some(val) if val == self.get_raw(header.name()).unwrap() => {},
_ => { return false; }
}
}
return true;
}
}
impl fmt::Display for Headers { impl fmt::Display for Headers {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for header in self.iter() { for header in self.iter() {
@@ -695,6 +711,36 @@ mod tests {
} }
} }
#[test]
fn test_eq() {
let mut headers1 = Headers::new();
let mut headers2 = Headers::new();
assert_eq!(headers1, headers2);
headers1.set(ContentLength(11));
headers2.set(Host {hostname: "foo.bar".to_owned(), port: None});
assert!(headers1 != headers2);
headers1 = Headers::new();
headers2 = Headers::new();
headers1.set(ContentLength(11));
headers2.set(ContentLength(11));
assert_eq!(headers1, headers2);
headers1.set(ContentLength(10));
assert!(headers1 != headers2);
headers1 = Headers::new();
headers2 = Headers::new();
headers1.set(Host { hostname: "foo.bar".to_owned(), port: None });
headers1.set(ContentLength(11));
headers2.set(ContentLength(11));
assert!(headers1 != headers2);
}
#[cfg(feature = "nightly")] #[cfg(feature = "nightly")]
#[bench] #[bench]
fn bench_headers_new(b: &mut Bencher) { fn bench_headers_new(b: &mut Bencher) {