test: cover the 1.6.1 provenance work where it was assumed, not asserted
Four parsers (dvdsub, flac, lpcm, mpegaudio) stamp a source offset on every frame but had no test that read one back, so a regression to `source: None` would have been caught only by the brace-balanced audit in codec/mod.rs — a lint, not a behavioural check. Each now asserts the emitted frame carries the offset of the packet that supplied its first byte. The Blu-ray feed spans had no direct test at all. Add one that walks a multi-item playlist and requires the spans to tile the feed with no gap or overlap; it catches a one-sector-per-clip drift, which is exactly the error class that would misattribute frames near a seam. `no_provenance_still_places_by_marks` asserted only that placement returned something, which passes for a frame placed in the wrong clip. Its probe timestamp lands in an overlap between two clips in the real mark table, so pinning one clip would assert a coin-flip; instead require the offset to be one that a clip actually containing that timestamp would produce.
This commit is contained in:
@@ -319,4 +319,19 @@ mod tests {
|
||||
// a manufactured tail frame would break this even if it were non-empty.
|
||||
assert_eq!(emitted.len() + tail.len(), 2);
|
||||
}
|
||||
|
||||
/// The text guard in `codec/mod.rs` scans for a literal `source: None` and
|
||||
/// cannot see a parser that writes `source: facts.source` where the facts
|
||||
/// carry no offset. Only a runtime check proves an emitted frame really
|
||||
/// carries the byte it was read from, and without it a multi-clip title
|
||||
/// places this track by timestamp inference instead of by byte.
|
||||
#[test]
|
||||
fn an_emitted_frame_carries_the_packets_source_offset() {
|
||||
let mut p = MpegAudioParser::new();
|
||||
let mut pes = make_pes(mp3_frame(400), Some(90_000));
|
||||
pes.source = Some(crate::pes::SourcePos::at_byte(7_777));
|
||||
let f = p.parse(&pes);
|
||||
assert!(!f.is_empty(), "the frame is emitted");
|
||||
assert_eq!(f[0].source.map(|s| s.byte), Some(7_777));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user