use http1::*;
use test::*;
use test::http1::*;
macro_rules! setup {
() => ({
let mut handler = DebugHandler::new();
let mut parser = Parser::new();
parser.init_chunked();
assert_eos!(
parser,
handler,
b"F;extension=",
StripChunkExtensionValue
);
(parser, handler)
});
}
#[test]
fn byte_check_unquoted() {
loop_non_tokens(
b" \t\r;=\"",
|byte| {
let (mut p, mut h) = setup!();
assert_error_byte!(
p,
h,
&[byte],
ChunkExtensionValue,
byte
);
}
);
loop_tokens(
b" \t",
|byte| {
let (mut p, mut h) = setup!();
assert_eos!(
p,
h,
&[byte],
ChunkExtensionValue
);
}
);
}
#[test]
fn basic() {
let (mut p, mut h) = setup!();
assert_eos!(
p,
h,
b"valid-value;",
StripChunkExtensionName
);
assert_eq!(
h.chunk_extension_value,
b"valid-value"
);
}
#[test]
fn callback_exit() {
struct CallbackHandler;
impl HttpHandler for CallbackHandler {
fn on_chunk_extension_value(&mut self, _value: &[u8]) -> bool {
false
}
}
let mut h = CallbackHandler;
let mut p = Parser::new();
p.init_chunked();
assert_eos!(
p,
h,
b"F;extension=",
StripChunkExtensionValue
);
assert_callback!(
p,
h,
b"ExtensionValue",
ChunkExtensionValue
);
}
#[test]
fn linear_space() {
let (mut p, mut h) = setup!();
assert_eos!(
p,
h,
b" \t\t\tvalid-value\r",
ChunkLengthLf
);
assert_eq!(
h.chunk_extension_value,
b"valid-value"
);
}
#[test]
fn repeat() {
let (mut p, mut h) = setup!();
assert_eos!(
p,
h,
b"valid-value\r",
ChunkLengthLf
);
assert_eq!(
h.chunk_extension_value,
b"valid-value"
);
}