use http1::*;
use http1::test::*;
use test::*;
macro_rules! setup {
() => ({
let (mut p, mut h) = http1_setup!();
p.init_chunked();
assert_eos(
&mut p,
&mut h,
b"F;",
ParserState::StripChunkExtensionName,
b"F;".len()
);
(p, h)
});
}
#[test]
fn allowed() {
for b in token_vec().iter() {
let (mut p, mut h) = setup!();
assert_eos(
&mut p,
&mut h,
&[*b],
ParserState::LowerChunkExtensionName,
[b].len()
);
}
}
#[test]
fn entire_iter() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'E', ParserState::LowerChunkExtensionName),
(b'x', ParserState::LowerChunkExtensionName),
(b't', ParserState::LowerChunkExtensionName),
(b'1', ParserState::LowerChunkExtensionName),
(b';', ParserState::LowerChunkExtensionName),
(b'E', ParserState::LowerChunkExtensionName),
(b'x', ParserState::LowerChunkExtensionName),
(b't', ParserState::LowerChunkExtensionName),
(b'2', ParserState::LowerChunkExtensionName),
(b'\r', ParserState::ChunkLengthLf)]
);
assert_eq!(
&h.chunk_extension_name,
b"ext1ext2"
);
}
#[test]
fn not_allowed() {
for b in non_token_vec().iter()
.filter(|&x| *x != b'\r')
.filter(|&x| *x != b'\t')
.filter(|&x| *x != b' ')
.filter(|&x| *x != b'=')
.filter(|&x| *x != b';') {
let (mut p, mut h) = setup!();
assert_error(
&mut p,
&mut h,
&[*b],
ParserError::ChunkExtensionName(*b)
);
}
}
#[test]
fn state_chunk_extensions_finished() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'E', ParserState::LowerChunkExtensionName),
(b'\r', ParserState::ChunkExtensionsFinished)]
);
}
#[test]
fn state_strip_chunk_extension_name1() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'E', ParserState::LowerChunkExtensionName),
(b';', ParserState::StripChunkExtensionName)]
);
}
#[test]
fn state_strip_chunk_extension_name2() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b' ', ParserState::StripChunkExtensionName),
(b'\t', ParserState::StripChunkExtensionName)]
);
}
#[test]
fn state_strip_chunk_extension_value() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'E', ParserState::LowerChunkExtensionName),
(b'=', ParserState::StripChunkExtensionValue)]
);
}