use spdr::{DecodeError, SerialNumber, decode_manufacturing};
const FIXTURE: &[u8] = include_bytes!("fixtures/teamgroup-ud5-6000_0104eef6.spd");
#[test]
fn decodes_manufacturing_snapshot() {
let decoded = decode_manufacturing(FIXTURE).expect("the fixture has a manufacturing block");
insta::assert_debug_snapshot!(decoded);
}
#[test]
fn published_reference_fields_match() {
let m = decode_manufacturing(FIXTURE).expect("the fixture has a manufacturing block");
assert_eq!([FIXTURE[512], FIXTURE[513]], [0x04, 0xEF]);
assert_eq!(m.module_manufacturer.bank, 5);
assert_eq!(m.module_manufacturer.code, 0x6F);
assert_eq!(m.module_manufacturer.name, Some("Team Group Inc."));
assert_eq!(m.manufacturing_date.year, 2023);
assert_eq!(m.manufacturing_date.week, 37);
assert_eq!(m.serial_number, SerialNumber(0x0104_EEF6));
assert_eq!(m.part_number, "UD5-6000");
}
#[test]
fn truncated_input_errors_without_panic() {
let truncated = &FIXTURE[..520];
let err = decode_manufacturing(truncated).expect_err("truncated input must error");
assert!(
matches!(err, DecodeError::Truncated { .. }),
"expected a truncation error, got {err:?}"
);
}
#[test]
fn non_ascii_part_number_errors_without_panic() {
let mut img = [0u8; 1024];
img.copy_from_slice(FIXTURE);
img[521] = 0xFF;
let err = decode_manufacturing(&img).expect_err("non-ASCII part number must error");
assert!(
matches!(err, DecodeError::NonAscii { .. }),
"expected a non-ASCII error, got {err:?}"
);
}