Some checks failed
repo hygiene / hygiene (push) Has been cancelled
PDF engine / engine (push) Has been cancelled
PDF engine / makepad-integration (push) Has been cancelled
PDF engine / fuzz (push) Has been cancelled
nigig-build (CAD) / supply-chain (push) Has been cancelled
nigig-build (CAD) / cad-module (push) Has been cancelled
nigig-build (CAD) / full-crate-check (push) Has been cancelled
nigig-build (CAD) / cad-engine-coverage (push) Has been cancelled
nigig-build (CAD) / doc-workspace-coverage (push) Has been cancelled
nigig-build (CAD) / cad-widget-coverage (push) Has been cancelled
traffic / gates (push) Has been cancelled
traffic / nigig-traffic (push) Has been cancelled
traffic / supply-chain (push) Has been cancelled
doc-engine / engine (push) Has been cancelled
doc-engine / coverage (push) Has been cancelled
doc-engine / consumer (push) Has been cancelled
email / gates (push) Has been cancelled
email / email-domain (push) Has been cancelled
email / nigig-email (push) Has been cancelled
email / supply-chain (push) Has been cancelled
nigig-map / test (push) Has been cancelled
sms / gates (push) Has been cancelled
sms / robius-sms (push) Has been cancelled
sms / android (push) Has been cancelled
sms / nigig-sms (push) Has been cancelled
sms / supply-chain (push) Has been cancelled
spreadsheet / engine-coverage (push) Has been cancelled
spreadsheet / ui-controller-coverage (push) Has been cancelled
p2p-intel / engine (push) Has been cancelled
p2p-intel / notifications (push) Has been cancelled
p2p-intel / coverage (push) Has been cancelled
p2p-intel / makepad-app (push) Has been cancelled
p2p-intel / exchange-tab (push) Has been cancelled
Payment domain, storage, platform and UI / isolated-payment-tests (push) Has been cancelled
Payment domain, storage, platform and UI / payment-ui-tests (push) Has been cancelled
Whole-tree sync: cad-core/cad-ui split sources, nigig-build construction_frame migration, pdf port progress, mpesa/pay/uikit/doc updates, workspace members/profiles/lock, CI workflows and reviews. See individual file history for details.
62 lines
2.3 KiB
Rust
62 lines
2.3 KiB
Rust
//! 1:1 port of `dart-pdf/packages/pdf_graphics/test/streaming_interpreter_test.dart`.
|
|
//!
|
|
//! Streaming (op-by-op) and materialized (parse-all-then-run)
|
|
//! interpretation must produce identical command lists.
|
|
|
|
use nigig_pdf_document::PdfDocument;
|
|
use nigig_pdf_graphics::content::{interpret_streaming, parse_content_stream};
|
|
use nigig_pdf_graphics::recording::{format_commands, RecordingDevice};
|
|
|
|
const PDFJS: &str = "/Users/aok/Projects/rustdev/CratesCode/dart-pdf/test_corpora/pdfjs";
|
|
|
|
#[test]
|
|
fn streaming_and_materialized_interpretation_agree() {
|
|
let fixtures = [
|
|
"operator-in-TJ-array.pdf",
|
|
"rotation.pdf",
|
|
"xobject-image.pdf",
|
|
"gradientfill.pdf",
|
|
"tiling-pattern-box.pdf",
|
|
"pattern_text_embedded_font.pdf",
|
|
"blendmode.pdf",
|
|
"knockout_smask.pdf",
|
|
];
|
|
let mut ran = 0;
|
|
for name in fixtures {
|
|
let path = format!("{PDFJS}/{name}");
|
|
let Ok(bytes) = std::fs::read(&path) else {
|
|
eprintln!("SKIP (missing corpus file): {path}");
|
|
continue;
|
|
};
|
|
let Ok(mut doc) = PdfDocument::parse(&bytes) else {
|
|
eprintln!("SKIP (unparseable — likely compressed xref): {path}");
|
|
continue;
|
|
};
|
|
let pages = doc.page_count().min(2);
|
|
for page_index in 0..pages {
|
|
let Ok(page) = doc.page(page_index) else { continue };
|
|
let content = page.content_data.clone();
|
|
|
|
let ops = parse_content_stream(&content).expect("content parses");
|
|
let materialized = RecordingDevice::from_ops(&ops);
|
|
|
|
let mut streamed = RecordingDevice::new();
|
|
// A malformed tail ends the stream; from_ops shares the same
|
|
// prefix behaviour, so both sides stay comparable.
|
|
let _ = interpret_streaming(&content, &mut streamed);
|
|
|
|
assert!(
|
|
!materialized.is_empty(),
|
|
"{name} page {page_index} recorded nothing"
|
|
);
|
|
assert_eq!(
|
|
format_commands(&streamed.commands),
|
|
format_commands(&materialized),
|
|
"{name} page {page_index} diverged"
|
|
);
|
|
ran += 1;
|
|
}
|
|
}
|
|
eprintln!("streaming/materialized compared {ran} pages");
|
|
assert!(ran > 0, "no corpus pages ran — checkout missing?");
|
|
}
|