File size: 2,454 Bytes
546c207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""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)