Files
2026-05-30 11:33:07 +02:00

57 lines
1.3 KiB
Python

import struct
import zlib
from pathlib import Path
import pytest
import imagepipeline.modules # noqa: F401
def make_png(
path: Path,
width: int = 2,
height: int = 2,
rgb: tuple[int, int, int] = (200, 100, 50),
) -> None:
"""Write a minimal valid PNG without external dependencies."""
r, g, b = rgb
def chunk(tag: bytes, data: bytes) -> bytes:
crc = zlib.crc32(tag + data) & 0xFFFFFFFF
return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", crc)
raw = b"".join(
b"\x00" + bytes([r, g, b] * width)
for _ in range(height)
)
compressed = zlib.compress(raw, 9)
ihdr = struct.pack(">IIBBBBB", width, height, 8, 2, 0, 0, 0)
png = (
b"\x89PNG\r\n\x1a\n"
+ chunk(b"IHDR", ihdr)
+ chunk(b"IDAT", compressed)
+ chunk(b"IEND", b"")
)
path.write_bytes(png)
@pytest.fixture(autouse=True)
def _ensure_builtin_modules() -> None:
import imagepipeline.modules # noqa: F401
@pytest.fixture
def input_dir(tmp_path: Path) -> Path:
directory = tmp_path / "input"
directory.mkdir()
make_png(directory / "photo_a.png")
make_png(directory / "photo_b.png", rgb=(10, 20, 30))
return directory
@pytest.fixture
def output_base(tmp_path: Path) -> Path:
base = tmp_path / "output"
base.mkdir()
return base