import sys from types import SimpleNamespace import pytest from botty_next.vision.fixtures import load_screenshot from botty_next.vision.ocr import preprocess_for_ocr, run_tesseract_ocr, save_ocr_preprocess_debug def test_preprocess_for_ocr_returns_thresholded_image() -> None: image = load_screenshot("sample_scene.ppm") processed = preprocess_for_ocr(image) assert processed.ndim == 2 assert processed.shape == (16, 16) def test_save_ocr_preprocess_debug(tmp_path) -> None: image = load_screenshot("sample_scene.ppm") output = save_ocr_preprocess_debug(image, tmp_path / "ocr.png") assert output.exists() def test_run_tesseract_ocr_uses_pytesseract_adapter(monkeypatch) -> None: fake = SimpleNamespace( Output=SimpleNamespace(DICT="dict"), pytesseract=SimpleNamespace(tesseract_cmd=None), image_to_string=lambda *_args, **_kwargs: "Short Sword\n", image_to_data=lambda *_args, **_kwargs: {"conf": ["95", "-1", "85"]}, ) monkeypatch.setitem(sys.modules, "pytesseract", fake) image = load_screenshot("sample_scene.ppm") result = run_tesseract_ocr(image, tesseract_cmd="C:/Tesseract/tesseract.exe") assert result.text == "Short Sword" assert result.confidence == pytest.approx(0.9) assert result.debug["backend"] == "pytesseract" assert fake.pytesseract.tesseract_cmd == "C:/Tesseract/tesseract.exe"