test(headers): Add tests for single value headers.
This commit is contained in:
@@ -21,17 +21,3 @@ header! {
|
||||
test_header!(test1, vec![b"iso-8859-5, unicode-1-1;q=0.8"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_parse_header() {
|
||||
use header::{self, q};
|
||||
let a: AcceptCharset = header::Header::parse_header(
|
||||
[b"iso-8859-5, iso-8859-6;q=0.8".to_vec()].as_ref()).unwrap();
|
||||
let b = AcceptCharset(vec![
|
||||
QualityItem { item: Charset::Iso_8859_5, quality: q(1.0) },
|
||||
QualityItem { item: Charset::Iso_8859_6, quality: q(0.8) },
|
||||
]);
|
||||
assert_eq!(format!("{}", a), format!("{}", b));
|
||||
assert_eq!(a, b);
|
||||
}
|
||||
|
||||
@@ -5,4 +5,6 @@ header! {
|
||||
#[doc="The `Access-Control-Max-Age` header indicates how long the results of a"]
|
||||
#[doc="preflight request can be cached in a preflight result cache."]
|
||||
(AccessControlMaxAge, "Access-Control-Max-Age") => [u32]
|
||||
}
|
||||
|
||||
test_access_control_max_age {}
|
||||
}
|
||||
|
||||
@@ -7,4 +7,6 @@ header! {
|
||||
#[doc="The `Access-Control-Request-Method` header indicates which method will be"]
|
||||
#[doc="used in the actual request as part of the preflight request."]
|
||||
(AccessControlRequestMethod, "Access-Control-Request-Method") => [Method]
|
||||
|
||||
test_access_control_request_method {}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,11 @@ header! {
|
||||
#[doc="Content-Length = 1*DIGIT"]
|
||||
#[doc="```"]
|
||||
(ContentLength, "Content-Length") => [u64]
|
||||
|
||||
test_content_length {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"3495"], Some(HeaderField(3495)));
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(bench, ContentLength, { vec![b"42349984".to_vec()] });
|
||||
|
||||
@@ -17,6 +17,15 @@ header! {
|
||||
#[doc="Content-Type = media-type"]
|
||||
#[doc="```"]
|
||||
(ContentType, "Content-Type") => [Mime]
|
||||
|
||||
test_content_type {
|
||||
test_header!(
|
||||
test1,
|
||||
// FIXME: Should be b"text/html; charset=ISO-8859-4" but mime crate lowercases
|
||||
// the whole value so parsing and formatting the value gives a different result
|
||||
vec![b"text/html; charset=iso-8859-4"],
|
||||
Some(HeaderField(Mime(TopLevel::Text, SubLevel::Html, vec![(Attr::Charset, Value::Ext("iso-8859-4".to_string()))]))));
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(bench, ContentType, { vec![b"application/json; charset=utf-8".to_vec()] });
|
||||
|
||||
@@ -11,6 +11,10 @@ header! {
|
||||
#[doc="Date = HTTP-date"]
|
||||
#[doc="```"]
|
||||
(Date, "Date") => [HttpDate]
|
||||
|
||||
test_date {
|
||||
test_header!(test1, vec![b"Tue, 15 Nov 1994 08:12:31 GMT"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(imf_fixdate, Date, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] });
|
||||
|
||||
@@ -18,6 +18,12 @@ header! {
|
||||
#[doc="ETag = entity-tag"]
|
||||
#[doc="```"]
|
||||
(ETag, "ETag") => [EntityTag]
|
||||
|
||||
test_etag {
|
||||
test_header!(test1, vec![b"\"xyzzy\""], Some(HeaderField(EntityTag::new(false, "xyzzy".to_string()))));
|
||||
test_header!(test2, vec![b"W/\"xyzzy\""], Some(HeaderField(EntityTag::new(true, "xyzzy".to_string()))));
|
||||
test_header!(test3, vec![b"\"\""], Some(HeaderField(EntityTag::new(false, "".to_string()))));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -15,6 +15,11 @@ header! {
|
||||
#[doc="Expires = HTTP-date"]
|
||||
#[doc="```"]
|
||||
(Expires, "Expires") => [HttpDate]
|
||||
|
||||
test_expires {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"Thu, 01 Dec 1994 16:00:00 GMT"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(imf_fixdate, Expires, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] });
|
||||
|
||||
@@ -15,6 +15,11 @@ header! {
|
||||
#[doc="If-Unmodified-Since = HTTP-date"]
|
||||
#[doc="```"]
|
||||
(IfModifiedSince, "If-Modified-Since") => [HttpDate]
|
||||
|
||||
test_if_modified_since {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(imf_fixdate, IfModifiedSince, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] });
|
||||
|
||||
@@ -15,6 +15,11 @@ header! {
|
||||
#[doc="If-Unmodified-Since = HTTP-date"]
|
||||
#[doc="```"]
|
||||
(IfUnmodifiedSince, "If-Unmodified-Since") => [HttpDate]
|
||||
|
||||
test_if_unmodified_since {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(imf_fixdate, IfUnmodifiedSince, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] });
|
||||
|
||||
@@ -13,6 +13,10 @@ header! {
|
||||
#[doc="Expires = HTTP-date"]
|
||||
#[doc="```"]
|
||||
(LastModified, "Last-Modified") => [HttpDate]
|
||||
|
||||
test_last_modified {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"Sat, 29 Oct 1994 19:43:31 GMT"]);}
|
||||
}
|
||||
|
||||
bench_header!(imf_fixdate, LastModified, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] });
|
||||
|
||||
@@ -14,6 +14,12 @@ header! {
|
||||
// TODO: Use URL
|
||||
(Location, "Location") => [String]
|
||||
|
||||
test_location {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"/People.html#tim"]);
|
||||
test_header!(test2, vec![b"http://www.example.net/index.html"]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bench_header!(bench, Location, { vec![b"http://foo.com/hello:3000".to_vec()] });
|
||||
|
||||
@@ -202,7 +202,7 @@ macro_rules! header {
|
||||
}
|
||||
};
|
||||
// Single value header
|
||||
($(#[$a:meta])*($id:ident, $n:expr) => [$value:ty]) => {
|
||||
($(#[$a:meta])*($id:ident, $n:expr) => [$value:ty] $tm:ident{$($tf:item)*}) => {
|
||||
$(#[$a])*
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct $id(pub $value);
|
||||
@@ -225,6 +225,15 @@ macro_rules! header {
|
||||
::std::fmt::Display::fmt(&**self, f)
|
||||
}
|
||||
}
|
||||
#[allow(unused_imports)]
|
||||
mod $tm{
|
||||
use std::str;
|
||||
use $crate::header::*;
|
||||
use $crate::mime::*;
|
||||
use $crate::method::Method;
|
||||
use super::$id as HeaderField;
|
||||
$($tf)*
|
||||
}
|
||||
};
|
||||
// List header, one or more items with "*" option
|
||||
($(#[$a:meta])*($id:ident, $n:expr) => {Any / ($item:ty)+} $tm:ident{$($tf:item)*}) => {
|
||||
|
||||
@@ -14,6 +14,11 @@ header! {
|
||||
#[doc="```"]
|
||||
// TODO: Use URL
|
||||
(Referer, "Referer") => [String]
|
||||
|
||||
test_referer {
|
||||
// Testcase from the RFC
|
||||
test_header!(test1, vec![b"http://www.example.org/hypertext/Overview.html"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(bench, Referer, { vec![b"http://foo.com/hello:3000".to_vec()] });
|
||||
|
||||
@@ -15,6 +15,11 @@ header! {
|
||||
#[doc="```"]
|
||||
// TODO: Maybe parse as defined in the spec?
|
||||
(Server, "Server") => [String]
|
||||
|
||||
test_server {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"CERN/3.0 libwww/2.17"]);
|
||||
}
|
||||
}
|
||||
|
||||
bench_header!(bench, Server, { vec![b"Some String".to_vec()] });
|
||||
|
||||
@@ -18,6 +18,11 @@ header! {
|
||||
#[doc="```"]
|
||||
// TODO: Maybe write parsing according to the spec? (Split the String)
|
||||
(UserAgent, "User-Agent") => [String]
|
||||
|
||||
test_user_agent {
|
||||
// Testcase from RFC
|
||||
test_header!(test1, vec![b"CERN-LineMode/2.15 libwww/2.17b3"]);
|
||||
}
|
||||
}
|
||||
|
||||
#[test] fn test_format() {
|
||||
|
||||
Reference in New Issue
Block a user