fix writing raw headers, quality_item
This commit is contained in:
		| @@ -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(); | ||||||
|   | |||||||
| @@ -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] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user