Files
IPSExtractor/tests/test_pdf_utils_tiff_range.py
T

68 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from PIL import Image
from core.pdf_utils import tiff_to_images_bs64, document_to_images_bs64
def _create_multipage_tiff(path: str, pages: int = 4) -> None:
"""Crea un TIFF multipágina de prueba."""
frames = []
for i in range(pages):
# Colores distintos por página para facilitar depuración si es necesario
color = (50 * (i + 1) % 255, 0, 0)
frames.append(Image.new("RGB", (16, 16), color))
frames[0].save(path, save_all=True, append_images=frames[1:], format="TIFF")
def test_tiff_to_images_bs64_respects_full_and_sub_ranges(tmp_path) -> None:
tiff_path = tmp_path / "sample.tif"
_create_multipage_tiff(str(tiff_path), pages=4)
# Sin rango -> todas las páginas
imgs_all = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=None)
assert len(imgs_all) == 4
# Rango 2–3 (1-based, inclusivo)
imgs_2_3 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(2, 3))
assert len(imgs_2_3) == 2
def test_tiff_to_images_bs64_allows_partial_ranges(tmp_path) -> None:
tiff_path = tmp_path / "sample_partial.tif"
_create_multipage_tiff(str(tiff_path), pages=4)
# Desde la 3 hasta el final
imgs_from_3 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(3, None)) # type: ignore[arg-type]
assert len(imgs_from_3) == 2
# Desde el inicio hasta la 2
imgs_to_2 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(None, 2)) # type: ignore[arg-type]
assert len(imgs_to_2) == 2
# Rango completamente fuera de límites -> lista vacía
imgs_out = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(10, 20))
assert imgs_out == []
def test_document_to_images_bs64_uses_explicit_tiff_page_range_over_default(tmp_path) -> None:
tiff_path = tmp_path / "doc.tif"
_create_multipage_tiff(str(tiff_path), pages=4)
# Por defecto usa `tiff_pages=(2,3)` del helper
imgs_default = document_to_images_bs64(str(tiff_path), validate=True)
assert len(imgs_default) == 2
# tiff_page_range tiene prioridad sobre tiff_pages
imgs_range = document_to_images_bs64(
str(tiff_path),
validate=True,
tiff_pages=(1, 4),
tiff_page_range=(2, 3),
)
assert len(imgs_range) == 2
# Sin rango ni valor por defecto -> todas las páginas
imgs_all = document_to_images_bs64(str(tiff_path), validate=True, tiff_pages=None)
assert len(imgs_all) == 4