use http1::*;
use http1::test::*;
use test::*;
macro_rules! setup {
() => (
http1_setup!()
);
}
#[test]
fn allowed() {
for b in alpha_upper_vec().iter().filter(|&x| *x != b'H') {
let (mut p, mut h) = setup!();
assert_eos(
&mut p,
&mut h,
&[*b],
ParserState::RequestMethod,
[*b].len()
);
assert_eos(
&mut p,
&mut h,
b" ",
ParserState::RequestUrl1,
b" ".len()
);
assert_eq!(
h.method,
&[*b]
);
}
}
#[test]
fn callback_exit() {
struct H;
impl HttpHandler for H {
fn on_method(&mut self, _: &[u8]) -> bool {
false
}
}
let mut h = H;
let mut p = Parser::new();
assert_callback(
&mut p,
&mut h,
b"X",
ParserState::RequestMethod,
b"X".len()
);
}
#[test]
fn entire_iter() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'M', ParserState::RequestMethod),
(b'E', ParserState::RequestMethod),
(b'T', ParserState::RequestMethod),
(b'H', ParserState::RequestMethod),
(b'O', ParserState::RequestMethod),
(b'D', ParserState::RequestMethod),
(b' ', ParserState::RequestUrl1)]
);
assert_eq!(
h.method,
b"METHOD"
);
}
#[test]
fn not_allowed_error() {
for b in (0..0x41).chain(0x5B..0xFF) {
let (mut p, mut h) = setup!();
assert_error(
&mut p,
&mut h,
&[b],
ParserError::Method(b)
);
}
}
#[test]
fn state_request_url() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'M', ParserState::RequestMethod),
(b' ', ParserState::RequestUrl1)]
);
}