use base64::{Engine, engine::general_purpose::STANDARD};
use broadcast_common::{Parse, Serialize};
use scte35_splice::SpliceInfoSection;
const SAMPLES: &[(&str, &str)] = &[
(
"§14.1 time_signal – Placement Opportunity Start",
"/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==",
),
(
"§14.2 splice_insert",
"/DAvAAAAAAAA///wFAVIAACPf+/+c2nALv4AUsz1AAAAAAAKAAhDVUVJAAABNWLbowo=",
),
(
"§14.3 time_signal – Placement Opportunity End",
"/DAvAAAAAAAA///wBQb+dGKQoAAZAhdDVUVJSAAAjn+fCAgAAAAALKChijUCAKnMZ1g=",
),
(
"§14.4 time_signal – Program Start/End",
"/DBIAAAAAAAA///wBQb+ek2ItgAyAhdDVUVJSAAAGH+fCAgAAAAALMvDRBEAAAIXQ1VFSUgAABl/nwgIAAAAACyk26AQAACZcuND",
),
(
"§14.5 time_signal – Program Overlap Start",
"/DAvAAAAAAAA///wBQb+rr//ZAAZAhdDVUVJSAAACH+fCAgAAAAALKVs9RcAAJUdsKg=",
),
(
"§14.6 time_signal – Program Blackout Override / Program End",
"/DBIAAAAAAAA///wBQb+ky44CwAyAhdDVUVJSAAACn+fCAgAAAAALKCh4xgAAAIXQ1VFSUgAAAl/nwgIAAAAACygoYoRAAC0IX6w",
),
(
"§14.7 time_signal – Program End",
"/DAvAAAAAAAA///wBQb+rvF8TAAZAhdDVUVJSAAAB3+fCAgAAAAALKVslxEAAMSHai4=",
),
(
"§14.8 time_signal – Program Start/End - Placement Opportunity End",
"/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUgAACZ/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw==",
),
];
#[test]
fn all_section14_samples_parse_and_round_trip() {
for (label, b64) in SAMPLES {
let bytes = STANDARD
.decode(b64)
.unwrap_or_else(|e| panic!("{label}: base64 decode: {e}"));
let section = SpliceInfoSection::parse(&bytes)
.unwrap_or_else(|e| panic!("{label}: parse/CRC failed: {e:?}"));
assert_eq!(bytes[0], 0xFC, "{label}: table_id");
assert_eq!(
section.to_bytes(),
bytes,
"{label}: round-trip is not byte-identical"
);
}
}
#[test]
fn all_section14_samples_reparse_equal() {
for (label, b64) in SAMPLES {
let bytes = STANDARD.decode(b64).unwrap();
let a = SpliceInfoSection::parse(&bytes).unwrap_or_else(|e| panic!("{label}: {e:?}"));
let reser = a.to_bytes();
let b =
SpliceInfoSection::parse(&reser).unwrap_or_else(|e| panic!("{label}: reparse {e:?}"));
assert_eq!(a, b, "{label}: serialize → parse not equal");
}
}