Счётчик абзацев, вернувшихся на языке оригинала: упражнения вида [2] модель не переводит

This commit is contained in:
chesirecatt
2026-08-21 17:47:48 +03:00
parent 7ed6e500ca
commit 14c7fad763
3 changed files with 43 additions and 2 deletions
+27
View File
@@ -132,6 +132,32 @@ def test_junk_translation_falls_back_to_original(tmp: Path):
assert "Второй абзац" in result, "нормальный перевод должен остаться"
def test_untouched_paragraphs_are_counted(tmp: Path):
"""Абзац, вернувшийся по-английски, доля кириллицы по документу не ловит:
у Страуструпа так осталось 182 упражнения из 10151 блока."""
src = tmp / "book.html"
en = ("Expanding on what you have learned, write a program that lists the "
"instructions for a computer to find the upstairs bedroom. ") * 2
ru_src = ("Этот абзац достаточно длинный, чтобы попасть под проверку языка "
"и быть переведённым как положено. ") * 2
src.write_text("\n".join(["<h1>Chapter</h1>", "<p>%s</p>" % en, "<p>%s</p>" % en]),
encoding="utf-8")
chapters = t.split_chapters(t.parse_blocks(src))
trans = tmp / "translations"
trans.mkdir()
(trans / "chapter_000_translated.json").write_text(json.dumps(
{"number": 0, "paragraphs": ["Глава", en, ru_src]}, ensure_ascii=False),
encoding="utf-8")
out = tmp / "out.html"
import io, contextlib
buf = io.StringIO()
with contextlib.redirect_stdout(buf):
t.rebuild(src, chapters, tmp, out)
report = buf.getvalue()
assert "осталось на языке оригинала: 1" in report, report
def test_workdir_belongs_to_one_book(tmp: Path):
"""Имена chapter_NNN.json у всех книг одинаковы: чужой workdir склеит
перевод одной книги с текстом другой."""
@@ -183,6 +209,7 @@ if __name__ == "__main__":
test_language_detection()
for case in (test_split_and_rebuild, test_code_listings_are_left_alone,
test_junk_translation_falls_back_to_original,
test_untouched_paragraphs_are_counted,
test_workdir_belongs_to_one_book, test_stale_chapters_removed,
test_verify_output_catches_untranslated):
with tempfile.TemporaryDirectory() as d: