50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from pdftomd.options import ConversionOptions, FormulaParser, RuntimeMode
|
|
|
|
|
|
def test_conversion_options_defaults_match_project_policy() -> None:
|
|
options = ConversionOptions()
|
|
|
|
assert options.runtime is RuntimeMode.CUDA
|
|
assert options.formula_parser is FormulaParser.NOUGAT
|
|
assert options.chunk_target_pages == 20
|
|
assert options.output_dir == Path("output")
|
|
assert options.resume is False
|
|
assert options.write_logs is True
|
|
|
|
|
|
def test_runtime_modes_express_cuda_fail_fast_and_auto_fallback() -> None:
|
|
assert RuntimeMode.CUDA.requires_cuda
|
|
assert not RuntimeMode.CUDA.allows_cpu_fallback
|
|
assert RuntimeMode.AUTO.allows_cpu_fallback
|
|
assert not RuntimeMode.CPU.requires_cuda
|
|
|
|
|
|
def test_conversion_options_validate_chunk_size_and_formula_boundary() -> None:
|
|
with pytest.raises(ValueError, match="chunk_target_pages"):
|
|
ConversionOptions(chunk_target_pages=0)
|
|
|
|
options = ConversionOptions(formula_parser=FormulaParser.MARKER)
|
|
assert options.formula_parser is FormulaParser.MARKER
|
|
assert not hasattr(options, "pyqt")
|
|
assert not hasattr(options, "api_url")
|
|
|
|
|
|
def test_conversion_options_normalize_optional_paths(tmp_path: Path) -> None:
|
|
options = ConversionOptions(
|
|
output_dir=tmp_path / "out",
|
|
nougat_command=tmp_path / "venv" / "Scripts" / "nougat.exe",
|
|
model_cache_dir=tmp_path / ".models",
|
|
log_dir=tmp_path / "logs",
|
|
)
|
|
|
|
assert options.output_dir == tmp_path / "out"
|
|
assert options.nougat_command is not None
|
|
assert options.model_cache_dir == tmp_path / ".models"
|
|
assert options.log_dir == tmp_path / "logs"
|