use tinyklv::dec::ber as decber;
use tinyklv::dec::binary as decb;
use tinyklv::dec::string as decs;
use tinyklv::enc::binary as encb;
use tinyklv::prelude::*;
#[test]
fn u8_empty() {
let mut input: &[u8] = &[];
assert!(decb::u8(&mut input).is_err());
}
#[test]
fn be_u16_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_u16(&mut input).is_err());
}
#[test]
fn be_u32_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_u32(&mut input).is_err());
}
#[test]
fn be_u64_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_u64(&mut input).is_err());
}
#[test]
fn be_u128_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_u128(&mut input).is_err());
}
#[test]
fn i8_empty() {
let mut input: &[u8] = &[];
assert!(decb::i8(&mut input).is_err());
}
#[test]
fn be_i16_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_i16(&mut input).is_err());
}
#[test]
fn be_i32_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_i32(&mut input).is_err());
}
#[test]
fn be_i64_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_i64(&mut input).is_err());
}
#[test]
fn be_f32_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_f32(&mut input).is_err());
}
#[test]
fn be_f64_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_f64(&mut input).is_err());
}
#[test]
fn le_u16_empty() {
let mut input: &[u8] = &[];
assert!(decb::le_u16(&mut input).is_err());
}
#[test]
fn le_u32_empty() {
let mut input: &[u8] = &[];
assert!(decb::le_u32(&mut input).is_err());
}
#[test]
fn le_u64_empty() {
let mut input: &[u8] = &[];
assert!(decb::le_u64(&mut input).is_err());
}
#[test]
fn be_u16_lengthed_empty_fails_on_positive_len() {
let mut input: &[u8] = &[];
assert!(decb::be_u16_lengthed(2)(&mut input).is_err());
}
#[test]
fn be_u32_lengthed_empty_fails() {
let mut input: &[u8] = &[];
assert!(decb::be_u32_lengthed(4)(&mut input).is_err());
}
#[test]
fn ber_length_empty() {
let mut input: &[u8] = &[];
assert!(decber::ber_length(&mut input).is_err());
}
#[test]
fn ber_oid_empty() {
let mut input: &[u8] = &[];
assert!(decber::ber_oid::<u64>(&mut input).is_err());
}
#[test]
fn to_string_utf8_empty_zero_len_ok() {
let mut input: &[u8] = &[];
let result = decs::to_string_utf8(0)(&mut input);
assert!(result.is_ok());
assert_eq!(result.unwrap(), "");
}
#[test]
fn to_string_utf8_nonzero_len_on_empty_fails() {
let mut input: &[u8] = &[];
let result = decs::to_string_utf8(1)(&mut input);
assert!(result.is_err());
}
#[test]
fn to_string_utf16_le_zero_len_on_empty_ok() {
let mut input: &[u8] = &[];
let result = decs::to_string_utf16_le(0)(&mut input);
assert!(result.is_ok());
assert_eq!(result.unwrap(), "");
}
#[test]
fn to_string_utf16_le_nonzero_len_on_empty_fails() {
let mut input: &[u8] = &[];
let result = decs::to_string_utf16_le(2)(&mut input);
assert!(result.is_err());
}
#[test]
fn u8_as_usize_empty() {
let mut input: &[u8] = &[];
assert!(decb::u8_as_usize(&mut input).is_err());
}
#[test]
fn be_u16_as_usize_empty() {
let mut input: &[u8] = &[];
assert!(decb::be_u16_as_usize(&mut input).is_err());
}
#[test]
fn le_u16_as_usize_empty() {
let mut input: &[u8] = &[];
assert!(decb::le_u16_as_usize(&mut input).is_err());
}
#[derive(Klv, Debug, PartialEq)]
#[klv(
stream = &[u8],
key(dec = decb::u8, enc = encb::u8),
len(dec = decb::u8_as_usize, enc = encb::u8_from_usize),
)]
struct AllRequired {
#[klv(
key = 0x01,
dec = decb::be_u16,
enc = *encb::be_u16,
)]
val: u16,
}
#[test]
fn derive_all_required_empty_input_fails() {
let result = AllRequired::decode_value(&mut &[][..]);
assert!(
result.is_err(),
"struct with required field must fail on empty input"
);
}
#[derive(Klv, Debug, PartialEq)]
#[klv(
stream = &[u8],
key(dec = decb::u8, enc = encb::u8),
len(dec = decb::u8_as_usize, enc = encb::u8_from_usize),
)]
struct AllOptional {
#[klv(
key = 0x01,
dec = decb::be_u16,
enc = *encb::be_u16,
)]
val: Option<u16>,
#[klv(
key = 0x02,
dec = decb::be_u32,
enc = *encb::be_u32,
)]
other: Option<u32>,
}
#[test]
fn derive_all_optional_empty_input_ok_all_none() {
let result = AllOptional::decode_value(&mut &[][..]);
assert!(
result.is_ok(),
"struct with only optional fields must succeed on empty input"
);
let s = result.unwrap();
assert_eq!(s.val, None);
assert_eq!(s.other, None);
}