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 -> будет "починен" + ('Текст', '
Текст
'), + ('Текст жирный курсив', 'Текст жирный курсив'), + ('Текст', '
Текст
'), +] + +@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