Skip to content

Commit

Permalink
test(headers): Add tests for single value headers.
Browse files Browse the repository at this point in the history
  • Loading branch information
pyfisch committed Apr 26, 2015
1 parent 6d34448 commit a27e681
Show file tree
Hide file tree
Showing 16 changed files with 79 additions and 16 deletions.
14 changes: 0 additions & 14 deletions src/header/common/accept_charset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
4 changes: 3 additions & 1 deletion src/header/common/access_control_max_age.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
}
2 changes: 2 additions & 0 deletions src/header/common/access_control_request_method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
}
5 changes: 5 additions & 0 deletions src/header/common/content_length.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
9 changes: 9 additions & 0 deletions src/header/common/content_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
4 changes: 4 additions & 0 deletions src/header/common/date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
Expand Down
6 changes: 6 additions & 0 deletions src/header/common/etag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
5 changes: 5 additions & 0 deletions src/header/common/expires.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
Expand Down
5 changes: 5 additions & 0 deletions src/header/common/if_modified_since.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
Expand Down
5 changes: 5 additions & 0 deletions src/header/common/if_unmodified_since.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
Expand Down
4 changes: 4 additions & 0 deletions src/header/common/last_modified.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
Expand Down
6 changes: 6 additions & 0 deletions src/header/common/location.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
11 changes: 10 additions & 1 deletion src/header/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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)*}) => {
Expand Down
5 changes: 5 additions & 0 deletions src/header/common/referer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
5 changes: 5 additions & 0 deletions src/header/common/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()] });
5 changes: 5 additions & 0 deletions src/header/common/user_agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down

0 comments on commit a27e681

Please sign in to comment.