use super::*;
use crate::{error::CanIdBuildError, protocol::transport::fast_packet::MAX_FAST_PACKET_PAYLOAD};
#[test]
fn test_builder_single_frame() {
let payload = [1, 2, 3, 4, 5];
let builder = FastPacketBuilder::new(129025, 42, None, &payload);
let mut iter = builder.build();
let frame = iter.next().unwrap().unwrap();
assert_eq!(frame.len, 5);
assert_eq!(&frame.data[..5], &payload);
assert!(iter.next().is_none());
}
#[test]
fn test_builder_two_frames() {
let payload = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let builder = FastPacketBuilder::new(129040, 50, None, &payload).with_sequence_id(0);
let mut iter = builder.build();
let frame0 = iter.next().unwrap().unwrap();
assert_eq!(frame0.data[0], 0); assert_eq!(frame0.data[1], 10); assert_eq!(&frame0.data[2..8], &[1, 2, 3, 4, 5, 6]);
assert_eq!(frame0.len, 8);
let frame1 = iter.next().unwrap().unwrap();
assert_eq!(frame1.data[0], 1); assert_eq!(&frame1.data[1..5], &[7, 8, 9, 10]);
assert_eq!(frame1.len, 5);
assert!(iter.next().is_none());
}
#[test]
fn test_builder_max_payload() {
let payload = [0xAA; 223]; let builder = FastPacketBuilder::new(129540, 25, None, &payload);
let mut iter = builder.build();
let frame0 = iter.next().unwrap().unwrap();
assert_eq!(frame0.data[1], 223);
let mut count = 1;
while iter.next().is_some() {
count += 1;
}
assert_eq!(count, 32);
}
#[test]
fn test_builder_with_destination() {
let payload = [1, 2, 3];
let builder = FastPacketBuilder::new(59904, 42, Some(50), &payload);
let mut iter = builder.build();
let frame = iter.next().unwrap().unwrap();
assert_eq!(frame.id.destination(), Some(50));
}
#[test]
fn test_builder_payload_too_large() {
let payload = [0x11; MAX_FAST_PACKET_PAYLOAD + 1];
let builder = FastPacketBuilder::new(129540, 42, None, &payload);
let mut iter = builder.build();
let err = iter.next().unwrap().unwrap_err();
assert!(matches!(err, CanIdBuildError::InvalidData));
assert!(iter.next().is_none());
}
#[test]
fn test_builder_sequence_id_progresses_between_messages() {
let payload = [0x55; 10];
let mut first_iter = FastPacketBuilder::new(129040, 50, None, &payload).build();
let first_header = first_iter.next().unwrap().unwrap().data[0];
let mut second_iter = FastPacketBuilder::new(129040, 50, None, &payload).build();
let second_header = second_iter.next().unwrap().unwrap().data[0];
assert_eq!(first_header & 0x1F, 0);
assert_eq!(second_header & 0x1F, 0);
assert_ne!(first_header & 0xE0, second_header & 0xE0);
}