Recorrection GUI step ; LaTeX issues debugging

This commit is contained in:
sebastien committed 2026-10-10 20:40:48 +02:00
1 parent 2d0f7a219f
commit 48602c24f1
12 files changed
+306 -8

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
import tempfile
import unittest
from pathlib import Path
from subprocess import CompletedProcess
from unittest.mock import Mock, patch
from PIL import Image
from copienator.commands import annotating
class AnnotationLatexErrorTests(unittest.TestCase):
def test_failure_preserves_source_and_log_and_explains_recovery(self):
with tempfile.TemporaryDirectory() as directory:
diagnostics = Path(directory) / "diagnostics"
diagnostics.mkdir()
def compile_latex(command, **kwargs):
Path(kwargs["cwd"], "text.log").write_bytes(
b"preamble\n! Missing \\endcsname inserted.\nl.12 \\end{document}\n\xff"
)
return CompletedProcess(command, 1, stdout=b"compiler output\xff")
# Patch only the retained diagnostics directory, not TemporaryDirectory.
original_mkdtemp = tempfile.mkdtemp
def make_directory(*args, **kwargs):
if kwargs.get("prefix") == "copienator-latex-error-":
return str(diagnostics)
return original_mkdtemp(*args, **kwargs)
with patch.object(annotating.subprocess, "run", side_effect=compile_latex), patch.object(
annotating.tempfile, "mkdtemp", side_effect=make_directory
):
with self.assertRaises(annotating.AnnotationLatexError) as caught:
annotating.render_real_latex_text(r"Antislash \.", 400)
message = str(caught.exception)
for expected in ("code 1", r"Antislash \.", "Missing", "correction.json", "relancez cette étape", str(diagnostics)):
self.assertIn(expected, message)
self.assertIn(r"Antislash \.", (diagnostics / "text.tex").read_text())
self.assertTrue((diagnostics / "text.log").exists())
self.assertTrue((diagnostics / "compiler-output.txt").exists())
def test_comment_error_identifies_copy_label_and_correction_file(self):
for box in (None, [0, 0, 20, 20]):
with self.subTest(box=box), patch.object(
annotating, "render_score_text", return_value=Image.new("RGBA", (200, 40))
):
with self.assertRaises(annotating.AnnotationLatexError) as caught:
annotating.compose_label_image(
Image.new("RGB", (800, 200)), "I)7)",
{"feedback": [{"text": "Bad comment", "box_2d": box}]}, 0,
render_fn=Mock(side_effect=annotating.AnnotationLatexError("Bad comment")),
source_pdf=Path("/exam/Copies/Copie39/I)7).pdf"),
)
message = str(caught.exception)
for expected in ("Copie39", "I)7)", "/exam/correction.json", "Bad comment"):
self.assertIn(expected, message)