test(headers): Allow tests inside list header macros, add tests.
Adds test cases from the relevant RFCs for a few headers. See also: #468, do we want the test cases rendered as examples in the docs?
This commit is contained in:
@@ -27,32 +27,39 @@ header! {
|
||||
#[doc="* Using always Mime types to represent `media-range` differs from the ABNF."]
|
||||
#[doc="* **FIXME**: `accept-ext` is not supported."]
|
||||
(Accept, "Accept") => (QualityItem<Mime>)+
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use mime::*;
|
||||
|
||||
use header::{Header, Quality, QualityItem, qitem};
|
||||
|
||||
use super::Accept;
|
||||
|
||||
#[test]
|
||||
fn test_parse_header_no_quality() {
|
||||
let a: Accept = Header::parse_header([b"text/plain; charset=utf-8".to_vec()].as_ref()).unwrap();
|
||||
let b = Accept(vec![
|
||||
qitem(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)])),
|
||||
]);
|
||||
assert_eq!(a, b);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_header_with_quality() {
|
||||
let a: Accept = Header::parse_header([b"text/plain; charset=utf-8; q=0.5".to_vec()].as_ref()).unwrap();
|
||||
let b = Accept(vec![
|
||||
QualityItem::new(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)]), Quality(500)),
|
||||
]);
|
||||
assert_eq!(a, b);
|
||||
test_accept {
|
||||
// Tests from the RFC
|
||||
// FIXME: Test fails, first value containing a "*" fails to parse
|
||||
// test_header!(
|
||||
// test1,
|
||||
// vec![b"audio/*; q=0.2, audio/basic"],
|
||||
// Some(HeaderField(vec![
|
||||
// QualityItem::new(Mime(TopLevel::Audio, SubLevel::Star, vec![]), Quality(200)),
|
||||
// qitem(Mime(TopLevel::Audio, SubLevel::Ext("basic".to_string()), vec![])),
|
||||
// ])));
|
||||
test_header!(
|
||||
test2,
|
||||
vec![b"text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"],
|
||||
Some(HeaderField(vec![
|
||||
QualityItem::new(Mime(TopLevel::Text, SubLevel::Plain, vec![]), Quality(500)),
|
||||
qitem(Mime(TopLevel::Text, SubLevel::Html, vec![])),
|
||||
QualityItem::new(Mime(TopLevel::Text, SubLevel::Ext("x-dvi".to_string()), vec![]), Quality(800)),
|
||||
qitem(Mime(TopLevel::Text, SubLevel::Ext("x-c".to_string()), vec![])),
|
||||
])));
|
||||
// Custom tests
|
||||
test_header!(
|
||||
test3,
|
||||
vec![b"text/plain; charset=utf-8"],
|
||||
Some(Accept(vec![
|
||||
qitem(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)])),
|
||||
])));
|
||||
test_header!(
|
||||
test4,
|
||||
vec![b"text/plain; charset=utf-8; q=0.5"],
|
||||
Some(Accept(vec![
|
||||
QualityItem::new(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)]), Quality(500)),
|
||||
])));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user