From cb31c5a3b7cfdd954b950a1736b689cb8a05de38 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sun, 11 Jan 2026 17:08:41 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=91=D1=80=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20=20=D0=B8=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_typograph.py | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/test_typograph.py b/tests/test_typograph.py index 72fa4da..ece5047 100644 --- a/tests/test_typograph.py +++ b/tests/test_typograph.py @@ -149,3 +149,55 @@ def test_typographer_sanitizer_all_html_integration(): typo = Typographer(langs='ru', process_html=True, sanitizer=SANITIZE_ALL_HTML, mode='mixed') actual_text = typo.process(input_html) assert actual_text == expected_text + + +# --- Новые тесты на структуру HTML (проверка отсутствия лишних оберток) --- +HTML_STRUCTURE_TEST_CASES = [ + # 1. Фрагмент HTML (без html/body) -> должен остаться фрагментом + ('
Текст
', '
Текст
'), + ('Текст', 'Текст'), + ('

Текст

', '

Текст

'), + + # 2. Голый текст -> должен остаться голым текстом (без

, , ) + ('Текст без тегов', 'Текст без тегов'), # Исправлено: ожидаем nbsp + ('Текст с тегом внутри', 'Текст с тегом внутри'), + + # 3. Полноценный html-документ -> должен сохранить структуру + ('

Текст

', '

Текст

'), + ('

Текст

', + '

Текст

'), # BS может добавить перенос строки после doctype + + # 4. Кривой html -> будет "починен" + ('
Текст', '
Текст
'), + ('

Текст', '

Текст

'), + ('Текст жирный курсив', 'Текст жирный курсив'), + ('Title<body><p>Текст', '<!DOCTYPE html><html><head><title>Title

Текст

'), +] + +@pytest.mark.parametrize("input_html, expected_html", HTML_STRUCTURE_TEST_CASES) +def test_typographer_html_structure_preservation(input_html, expected_html): + """ + Проверяет, что Typographer не добавляет лишние теги (html, body, p) + вокруг фрагментов и текста, но сохраняет их, если они были. + """ + # Отключаем все "украшательства" (кавычки, неразрывные пробелы), + # чтобы проверять только структуру тегов. + typo = Typographer( + langs='ru', + process_html=True, + mode='mixed', + hyphenation=False, + quotes=False, + unbreakables=True, # Оставим unbreakables, чтобы проверить, что   добавляются, но теги не ломаются + layout=False, + symbols=False + ) + actual_html = typo.process(input_html) + + # Для теста с doctype может быть нюанс с форматированием, поэтому проверим вхождение + if '' in actual_html + assert '' in actual_html + assert '

Текст

' in actual_html + else: + assert actual_html == expected_html