move rendering of headers to the Headers object

This commit is contained in:
Sean McArthur
2014-10-08 10:23:34 -07:00
parent f2d2ed93d3
commit 2f755a5694
5 changed files with 44 additions and 17 deletions

View File

@@ -17,7 +17,7 @@ use std::sync::RWLock;
use uany::{UncheckedAnyDowncast, UncheckedAnyMutDowncast};
use typeable::Typeable;
use http::read_header;
use http::{read_header, LineEnding};
use {HttpResult};
/// Common Headers
@@ -244,11 +244,10 @@ impl Headers {
impl fmt::Show for Headers {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
try!("Headers {\n".fmt(fmt));
for (k, v) in self.iter() {
try!(write!(fmt, "\t{}: {}\n", k, v));
try!(write!(fmt, "{}: {}{}", k, v, LineEnding));
}
"}".fmt(fmt)
Ok(())
}
}
@@ -349,7 +348,7 @@ mod tests {
use mime::{Mime, Text, Plain};
use super::CaseInsensitive;
use super::{Headers, Header};
use super::common::{ContentLength, ContentType, Accept};
use super::common::{ContentLength, ContentType, Accept, Host};
fn mem(s: &str) -> MemReader {
MemReader::new(s.as_bytes().to_vec())
@@ -443,5 +442,20 @@ mod tests {
*headers.get_mut::<ContentLength>().unwrap() = ContentLength(20);
assert_eq!(*headers.get::<ContentLength>().unwrap(), ContentLength(20));
}
#[test]
fn test_headers_show() {
let mut headers = Headers::new();
headers.set(ContentLength(15));
headers.set(Host("foo.bar".into_string()));
let s = headers.to_string();
// hashmap's iterators have arbitrary order, so we must sort first
let mut pieces = s[].split_str("\r\n").collect::<Vec<&str>>();
pieces.sort();
let s = pieces.into_iter().rev().collect::<Vec<&str>>().connect("\r\n");
assert_eq!(s[], "Host: foo.bar\r\nContent-Length: 15\r\n");
}
}