lllin000_PaperForge/tests/test_ocr_objects.py
Research Assistant d52ea37e92 feat(ocr): tail regime remediation + style-aware heading profiles + boundary detection
- Task: Bidirectional body/backmatter boundary detection (forward/backward spine + tail spread reconciliation)
- Task: Style-aware heading profiles from PDF span_metadata (extract, cluster, disambiguate)
- Task: Lock tests for tail-candidate overreach, cross-page continuation, style-aware heading detection
- 296/296 tests pass, real-paper 7C8829BD verified
2026-06-05 22:47:13 +08:00

120 lines
3.3 KiB
Python

from __future__ import annotations
from pathlib import Path
def test_figure_object_markdown_links_image_and_legend() -> None:
from paperforge.worker.ocr_objects import render_figure_object_markdown
md = render_figure_object_markdown({
"figure_id": "figure_001",
"page": 4,
"caption": "Figure 1. Example.",
"image_relpath": "assets/figures/figure_001.jpg",
"confidence": 0.91,
})
assert "# Figure 1" in md
assert "![](../../assets/figures/figure_001.jpg)" in md
assert "## Legend" in md
assert "Figure 1. Example." in md
def test_table_object_markdown_includes_image_and_caption() -> None:
from paperforge.worker.ocr_objects import render_table_object_markdown
md = render_table_object_markdown({
"table_id": "table_001",
"page": 5,
"caption": "Table 1. Results.",
"image_relpath": "assets/tables/table_001.jpg",
"confidence": 0.88,
})
assert "# Table 1" in md
assert "![](../../assets/tables/table_001.jpg)" in md
assert "## Caption" in md
assert "Table 1. Results." in md
def test_orphan_object_markdown() -> None:
from paperforge.worker.ocr_objects import render_figure_object_markdown
md = render_figure_object_markdown({
"figure_id": "orphan_001",
"page": 6,
"caption": "",
"image_relpath": "assets/orphans/orphan_001.jpg",
"confidence": 0.3,
})
assert "# Orphan Media" in md
assert "![](../../assets/orphans/orphan_001.jpg)" in md
def test_stabilize_object_wikilink_uses_correct_relative_path() -> None:
from paperforge.worker.ocr_objects import render_figure_object_markdown
md = render_figure_object_markdown({
"figure_id": "figure_001",
"page": 5,
"caption": "Figure 1. Results.",
"image_relpath": "assets/figures/figure_001.jpg",
"confidence": 0.9,
})
assert "![](../../assets/figures/figure_001.jpg)" in md
def test_crop_asset_uses_ocr_page_coordinates_when_dimensions_provided(tmp_path: Path) -> None:
import fitz
from PIL import Image
from paperforge.worker.ocr_objects import _crop_asset_from_pdf
pdf_path = tmp_path / "sample.pdf"
doc = fitz.open()
page = doc.new_page(width=300, height=400)
page.draw_rect(fitz.Rect(25, 25, 50, 50), color=(1, 0, 0), fill=(1, 0, 0))
doc.save(pdf_path)
doc.close()
dst = tmp_path / "crop.jpg"
ok = _crop_asset_from_pdf(
pdf_path,
1,
[50, 50, 100, 100],
dst,
page_width=600,
page_height=800,
page_cache_dir=tmp_path / "pages",
)
assert ok is True
with Image.open(dst) as img:
assert img.size == (50, 50)
def test_crop_asset_prefers_cached_page_image_when_available(tmp_path: Path) -> None:
from PIL import Image
from paperforge.worker.ocr_objects import _crop_asset_from_pdf
page_cache_dir = tmp_path / "pages"
page_cache_dir.mkdir()
page_image = page_cache_dir / "page_001.jpg"
Image.new("RGB", (600, 800), "white").save(page_image)
dst = tmp_path / "crop.jpg"
ok = _crop_asset_from_pdf(
tmp_path / "missing.pdf",
1,
[50, 50, 100, 100],
dst,
page_cache_dir=page_cache_dir,
)
assert ok is True
with Image.open(dst) as img:
assert img.size == (50, 50)