fix writing raw headers, quality_item

This commit is contained in:
Sean McArthur
2015-01-05 19:16:34 -08:00
parent 4756544a18
commit 23aeb4993a
2 changed files with 17 additions and 4 deletions

View File

@@ -10,7 +10,7 @@ use std::borrow::Cow::{Borrowed, Owned};
use std::fmt::{self, Show}; use std::fmt::{self, Show};
use std::intrinsics::TypeId; use std::intrinsics::TypeId;
use std::raw::TraitObject; use std::raw::TraitObject;
use std::str::FromStr; use std::str::{FromStr, from_utf8};
use std::string::CowString; use std::string::CowString;
use std::collections::HashMap; use std::collections::HashMap;
use std::collections::hash_map::{Iter, Entry}; use std::collections::hash_map::{Iter, Entry};
@@ -439,7 +439,13 @@ impl fmt::Show for Item {
None => match self.raw { None => match self.raw {
Some(ref raw) => { Some(ref raw) => {
for part in raw.iter() { for part in raw.iter() {
try!(write!(fmt, "{}", part.as_slice())); match from_utf8(part[]) {
Ok(s) => try!(fmt.write_str(s)),
Err(e) => {
error!("raw header value is not utf8. header={}, error={}", part[], e);
return Err(fmt::Error);
}
}
} }
Ok(()) Ok(())
}, },
@@ -646,6 +652,13 @@ mod tests {
assert_eq!(s[], "Host: foo.bar\r\nContent-Length: 15\r\n"); assert_eq!(s[], "Host: foo.bar\r\nContent-Length: 15\r\n");
} }
#[test]
fn test_headers_show_raw() {
let headers = Headers::from_raw(&mut mem("Content-Length: 10\r\n\r\n")).unwrap();
let s = headers.to_string();
assert_eq!(s, "Content-Length: 10\r\n");
}
#[test] #[test]
fn test_set_raw() { fn test_set_raw() {
let mut headers = Headers::new(); let mut headers = Headers::new();

View File

@@ -79,7 +79,7 @@ pub fn qitem<T>(item: T) -> QualityItem<T> {
#[test] #[test]
fn test_quality_item_show1() { fn test_quality_item_show1() {
let x = qitem(Chunked); let x = qitem(Chunked);
assert_eq!(format!("{}", x), "chunked; q=1.000"); assert_eq!(format!("{}", x), "chunked; q=1");
} }
#[test] #[test]
fn test_quality_item_show2() { fn test_quality_item_show2() {
@@ -93,7 +93,7 @@ fn test_quality_item_show3() {
item: EncodingExt("identity".to_string()), item: EncodingExt("identity".to_string()),
quality: 0.5f32, quality: 0.5f32,
}; };
assert_eq!(format!("{}", x), "identity; q=0.500"); assert_eq!(format!("{}", x), "identity; q=0.5");
} }
#[test] #[test]