Phase C4 executor 의 마지막 `fix(test): clippy + fmt fixes` commit 이 test file 부분만 fmt 적용. workspace 전체 fmt 누락 발견 → cargo fmt --all 적용. 모든 import alphabetical reorder + line wrapping 정합. 추가 untracked artifact 동시 commit: - docs/superpowers/specs/2026-05-28-v0.20-ingest-log-spec.md (491 line, ACCEPT) - docs/superpowers/plans/2026-05-28-v0.20-ingest-log-plan.md (616 line, ACCEPT) workspace test: 1370 passed / 0 failed / 50 ignored, ingest_log_smoke green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
32 lines
1.1 KiB
Rust
32 lines
1.1 KiB
Rust
// crates/kebab-parse-pdf/tests/page_image.rs (신규)
|
|
|
|
use kebab_parse_pdf::extract_dctdecode_page_image;
|
|
use lopdf::Document;
|
|
|
|
// happy path — F1 fixture (DCTDecode JPEG passthrough)
|
|
#[test]
|
|
fn f1_fixture_yields_dctdecode_jpeg_bytes() {
|
|
let bytes = include_bytes!("fixtures/scanned_page1.pdf");
|
|
let doc = Document::load_mem(bytes).unwrap();
|
|
let result = extract_dctdecode_page_image(&doc, 1).unwrap();
|
|
let jpeg = result.expect("F1 의 page 1 이 DCTDecode image 보유");
|
|
assert!(jpeg.starts_with(b"\xFF\xD8"), "JPEG magic missing");
|
|
assert!(
|
|
jpeg.len() > 1000,
|
|
"JPEG bytes too small (got {})",
|
|
jpeg.len()
|
|
);
|
|
}
|
|
|
|
// negative path — F6 fixture (FlateDecode raw pixel — Ok(None))
|
|
#[test]
|
|
fn flate_raw_fixture_yields_none() {
|
|
let bytes = include_bytes!("fixtures/flate_raw.pdf");
|
|
let doc = Document::load_mem(bytes).unwrap();
|
|
let result = extract_dctdecode_page_image(&doc, 1).unwrap();
|
|
assert!(
|
|
result.is_none(),
|
|
"FlateDecode page 가 Ok(None) 반환 — DCTDecode-only v1 invariant"
|
|
);
|
|
}
|