use http1::*;
use http1::test::*;
use test::*;
macro_rules! setup {
() => ({
let (mut p, mut h) = http1_setup!();
p.init_url_encoded();
p.set_length(1000);
assert_eos(
&mut p,
&mut h,
b"N=",
ParserState::UrlEncodedValue,
b"N=".len()
);
(p, h)
});
}
#[test]
fn allowed() {
for b in visible_7bit_vec().iter()
.filter(|&x| *x != b'%')
.filter(|&x| *x != b'+')
.filter(|&x| *x != b'&')
.filter(|&x| *x != b';') {
let (mut p, mut h) = setup!();
p.init_url_encoded();
p.set_length(1000);
assert_eos(
&mut p,
&mut h,
b"N=",
ParserState::UrlEncodedValue,
b"N=".len()
);
assert_eos(
&mut p,
&mut h,
&[*b],
ParserState::UrlEncodedValue,
[*b].len()
);
assert_eq!(
h.url_encoded_value,
&[*b]
);
}
}
#[test]
fn entire_iter() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'V', ParserState::UrlEncodedValue),
(b'a', ParserState::UrlEncodedValue),
(b'l', ParserState::UrlEncodedValue),
(b'u', ParserState::UrlEncodedValue),
(b'e', ParserState::UrlEncodedValue),
(b'+', ParserState::UrlEncodedValuePlus),
(b'1', ParserState::UrlEncodedValue),
(b'%', ParserState::UrlEncodedValueHex1),
(b'2', ParserState::UrlEncodedValueHex1),
(b'1', ParserState::UrlEncodedValue),
(b'V', ParserState::UrlEncodedValue),
(b'a', ParserState::UrlEncodedValue),
(b'l', ParserState::UrlEncodedValue),
(b'u', ParserState::UrlEncodedValue),
(b'e', ParserState::UrlEncodedValue),
(b'%', ParserState::UrlEncodedValueHex1),
(b'2', ParserState::UrlEncodedValueHex2),
(b'0', ParserState::UrlEncodedValue),
(b'2', ParserState::UrlEncodedValue),
(b'%', ParserState::UrlEncodedValueHex1),
(b'2', ParserState::UrlEncodedValueHex1),
(b'1', ParserState::UrlEncodedValue)]
);
assert_eq!(
h.url_encoded_value,
b"Value 1!Value 2!"
);
}
#[test]
fn not_allowed_error() {
for b in non_visible_7bit_vec().iter() {
let (mut p, mut h) = setup!();
assert_error(
&mut p,
&mut h,
&[*b],
ParserError::UrlEncodedValue(*b)
);
}
}
#[test]
fn state_url_encoded_value_hex() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'V', ParserState::UrlEncodedValue),
(b'%', ParserState::UrlEncodedValueHex1),
(b'2', ParserState::UrlEncodedValueHex2),
(b'0', ParserState::UrlEncodedValue)]
);
}
#[test]
fn state_first_url_encoded_name1() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'V', ParserState::UrlEncodedValue),
(b';', ParserState::FirstUrlEncodedName)]
);
}
#[test]
fn state_first_url_encoded_name2() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'V', ParserState::UrlEncodedValue),
(b'&', ParserState::FirstUrlEncodedName)]
);
}
#[test]
fn state_url_encoded_value_plus() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'V', ParserState::UrlEncodedValue),
(b'+', ParserState::UrlEncodedValuePlus)]
);
}