ZainabEman's picture
Upload 152 files
546c207 verified
Raw History Blame Contribute Delete
2.45 kB
"""Catalogue page detection and the Phase 1 decoy-image guard."""
from spareparts import config, pdf_loader
def test_detects_exactly_the_thirty_catalogue_pages(doc):
pages = pdf_loader.find_catalogue_pages(doc)
first, last = config.EXPECTED_CATALOGUE_PAGES
assert pages == list(range(first, last + 1))
assert len(pages) == config.EXPECTED_PAGE_COUNT
def test_front_matter_is_not_a_catalogue_page(doc):
# Page 24 is the needle table (a real table, wrong header) and page 25 is
# the catalogue cover. Neither may be indexed.
for pdf_page in (1, 5, 24, 25):
assert not pdf_loader.is_catalogue_page(doc[pdf_page - 1])
def test_every_catalogue_page_yields_a_native_resolution_diagram(doc):
for pdf_page in pdf_loader.find_catalogue_pages(doc):
diagram = pdf_loader.select_diagram_image(doc[pdf_page - 1])
assert diagram is not None, f"page {pdf_page}"
assert diagram.width == 1689, f"page {pdf_page}"
assert 2200 < diagram.height < 2400, f"page {pdf_page}"
def test_decoy_guard_rejects_off_page_images(doc):
# Page 26 carries a second image placed at y 802-1576 on an 842 pt page;
# pages 29 and 54 carry one at negative y. The visible diagram must win.
for pdf_page in (26, 29, 54):
page = doc[pdf_page - 1]
diagram = pdf_loader.select_diagram_image(page)
rect = diagram.rect
assert rect[1] >= 0, f"page {pdf_page} picked an image above the page"
assert rect[3] <= page.rect.height + 1, (
f"page {pdf_page} picked an image below the page"
)
# Page 26 specifically: xref 116 is on-page, 117 is the decoy below it.
assert pdf_loader.select_diagram_image(doc[25]).xref == 116
def test_reused_xref_resolves_per_page(doc):
# xref 152 is page 36's off-page second image and page 37's visible diagram,
# so the diagram must be resolved per page rather than cached by xref.
page36 = pdf_loader.select_diagram_image(doc[35])
page37 = pdf_loader.select_diagram_image(doc[36])
assert page36.xref != page37.xref
assert page37.xref == 152
assert page36.pdf_page == 36 and page37.pdf_page == 37
def test_cached_png_matches_the_native_image(doc, tmp_path):
from spareparts.index_db import png_size
diagram = pdf_loader.load_diagram(doc, 34, tmp_path)
assert diagram.png_path.name == "p34.png"
assert png_size(diagram.png_path) == (diagram.width, diagram.height)