#![cfg(test)]
use super::*;
use flexi_logger::Logger;
enum LogError {
CouldNotStartLogger,
}
fn setup_logging_lite() -> Result<(), LogError> {
match Logger::try_with_env_or_str("")
.unwrap()
.format(flexi_logger::colored_default_format)
.format_for_files(flexi_logger::colored_detailed_format)
.duplicate_to_stderr(flexi_logger::Duplicate::All)
.start()
{
Err(_) => Err(LogError::CouldNotStartLogger),
Ok(_) => Ok(()),
}
}
fn loopback_serializer<const H: usize>(buffer: HidIoPacketBuffer<H>, data: &mut [u8]) {
let data = match buffer.serialize_buffer(data) {
Ok(data) => data,
Err(err) => {
panic!("Serialized Buffer failed: {:?}", err);
}
};
assert!(!data.is_empty(), "Serialization bytes:{}", data.len());
let mut deserialized = HidIoPacketBuffer::new();
let mut bytes_used = 0;
while bytes_used != data.len() {
let slice = &data[bytes_used..];
match deserialized.decode_packet(slice) {
Ok(result) => {
bytes_used += result as usize;
}
_ => {
panic!("Failured decoding packet");
}
};
}
deserialized.max_len = buffer.max_len;
assert!(
buffer == deserialized,
"\nInput:{}\nSerialized:{:#?}\nOutput:{}",
buffer,
data.len(),
deserialized
);
assert!(
data.len() == bytes_used,
"Serialized:{}, Deserialized Used:{}",
data.len(),
bytes_used
);
}
#[test]
fn sync_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<1> {
ptype: HidIoPacketType::Sync,
done: true,
..Default::default()
};
let mut data = [0u8; 1];
loopback_serializer(buffer, &mut data);
}
#[test]
fn no_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<0> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::new(),
done: true,
};
let mut data = [0u8; 4];
loopback_serializer(buffer, &mut data);
}
#[test]
fn single_byte_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<1> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::from_slice(&[0xAC]).unwrap(),
done: true,
};
let mut data = [0u8; 5];
loopback_serializer(buffer, &mut data);
}
#[test]
fn full_packet_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<60> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::from_slice(&[0xAC; 60]).unwrap(),
done: true,
};
let mut data = [0u8; 64];
loopback_serializer(buffer, &mut data);
}
#[test]
fn two_packet_continued_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<110> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::from_slice(&[0xAC; 110]).unwrap(),
done: true,
};
let mut data = [0u8; 118];
loopback_serializer(buffer, &mut data);
}
#[test]
fn three_packet_continued_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<170> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::from_slice(&[0xAC; 170]).unwrap(),
done: true,
};
let mut data = [0u8; 182];
loopback_serializer(buffer, &mut data);
}
#[test]
fn four_packet_continued_payload_test() {
setup_logging_lite().ok();
let buffer = HidIoPacketBuffer::<240> {
ptype: HidIoPacketType::Data,
id: HidIoCommandId::TestPacket,
max_len: 64,
data: Vec::from_slice(&[0xAC; 240]).unwrap(),
done: true,
};
let mut data = [0u8; 256];
loopback_serializer(buffer, &mut data);
}
#[test]
fn hid_vec2bitmask2vec_test() {
setup_logging_lite().ok();
let inputvec: Vec<u8, 7> = Vec::from_slice(&[1, 2, 3, 4, 5, 100, 255]).unwrap();
let bitmask = match hid_vec2bitmask(&inputvec) {
Ok(bitmask) => bitmask,
Err(e) => {
panic!("Failed to run hid_vec2bitmask: {:?}", e);
}
};
let new_vec = match hid_bitmask2vec(&bitmask) {
Ok(new_vec) => new_vec,
Err(e) => {
panic!("Failed to run hid_bitmask2vec: {:?}", e);
}
};
assert_eq!(
inputvec, new_vec,
"Bitmask test failed! Input: {:?}\nOutput: {:?}",
inputvec, new_vec,
);
}