use ehttpd::bytes::{Data, Parse};
#[test]
fn data_is_split_on_first_delimiter() {
let mut data = Data::new_static(b"first::second::third");
let prefix = data.split_off(b"::").expect("delimiter is missing");
assert_eq!(prefix, b"first");
assert_eq!(data, b"second::third");
}
#[test]
fn slice_is_split_on_first_delimiter() {
let mut data: &[u8] = b"first::second::third";
let prefix = Parse::split_off(&mut data, b"::").expect("delimiter is missing");
assert_eq!(prefix, b"first");
assert_eq!(data, b"second::third");
}
#[test]
fn missing_delimiter_leaves_data_unchanged() {
let mut data = Data::new_static(b"unchanged");
let prefix = data.split_off(b"::");
assert!(prefix.is_none());
assert_eq!(data, b"unchanged");
}
#[test]
fn ascii_whitespace_is_trimmed() {
let data = concat! {
" \t\r\n",
"value \t\r\n",
};
let slice = concat! {
" \t\r\n",
"value \t\r\n",
};
let data = Data::new_static(data.as_bytes());
let slice = slice.as_bytes();
let trimmed_data = data.trim();
let trimmed_slice = slice.trim();
assert_eq!(trimmed_data, b"value");
assert_eq!(trimmed_slice, b"value");
}
#[test]
fn data_and_slice_are_parsed() {
let data = Data::new_static(b"1234");
let slice: &[u8] = b"5678";
let parsed_data: u16 = data.parse().expect("failed to parse data");
let parsed_slice: u16 = slice.parse().expect("failed to parse slice");
assert_eq!(parsed_data, 1234);
assert_eq!(parsed_slice, 5678);
}
#[test]
fn invalid_number_is_rejected() {
let data = Data::new_static(b"invalid");
let parsed: Result<u16, _> = data.parse();
let error = parsed.expect_err("invalid number was accepted");
assert_eq!(error.error, "failed to parse data");
}
#[test]
fn invalid_utf8_is_rejected() {
let data = Data::new_static(b"\xFF");
let parsed: Result<u16, _> = data.parse();
let error = parsed.expect_err("invalid UTF-8 was accepted");
assert_eq!(error.error, "Value is not valid UTF-8");
}