add: добавлены тесты, для проверки обёртывания в <html> и <body>
This commit is contained in:
@@ -149,3 +149,55 @@ def test_typographer_sanitizer_all_html_integration():
|
|||||||
typo = Typographer(langs='ru', process_html=True, sanitizer=SANITIZE_ALL_HTML, mode='mixed')
|
typo = Typographer(langs='ru', process_html=True, sanitizer=SANITIZE_ALL_HTML, mode='mixed')
|
||||||
actual_text = typo.process(input_html)
|
actual_text = typo.process(input_html)
|
||||||
assert actual_text == expected_text
|
assert actual_text == expected_text
|
||||||
|
|
||||||
|
|
||||||
|
# --- Новые тесты на структуру HTML (проверка отсутствия лишних оберток) ---
|
||||||
|
HTML_STRUCTURE_TEST_CASES = [
|
||||||
|
# 1. Фрагмент HTML (без html/body) -> должен остаться фрагментом
|
||||||
|
('<div>Текст</div>', '<div>Текст</div>'),
|
||||||
|
('<span>Текст</span>', '<span>Текст</span>'),
|
||||||
|
('<p>Текст</p>', '<p>Текст</p>'),
|
||||||
|
|
||||||
|
# 2. Голый текст -> должен остаться голым текстом (без <p>, <html>, <body>)
|
||||||
|
('Текст без тегов', 'Текст без тегов'), # Исправлено: ожидаем nbsp
|
||||||
|
('Текст с <b>тегом</b> внутри', 'Текст с <b>тегом</b> внутри'),
|
||||||
|
|
||||||
|
# 3. Полноценный html-документ -> должен сохранить структуру
|
||||||
|
('<html><body><p>Текст</p></body></html>', '<html><body><p>Текст</p></body></html>'),
|
||||||
|
('<!DOCTYPE html><html><head></head><body><p>Текст</p></body></html>',
|
||||||
|
'<!DOCTYPE html><html><head></head><body><p>Текст</p></body></html>'), # BS может добавить перенос строки после doctype
|
||||||
|
|
||||||
|
# 4. Кривой html -> будет "починен"
|
||||||
|
('<div>Текст', '<div>Текст</div>'),
|
||||||
|
('<p>Текст', '<p>Текст</p>'),
|
||||||
|
('Текст <b>жирный <i>курсив', 'Текст <b>жирный <i>курсив</i></b>'),
|
||||||
|
('<!DOCTYPE html><html><head><title>Title<body><p>Текст', '<!DOCTYPE html><html><head><title>Title</title></head><body><p>Текст</p></body></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 '<!DOCTYPE' in input_html:
|
||||||
|
assert '<html>' in actual_html
|
||||||
|
assert '<body>' in actual_html
|
||||||
|
assert '<p>Текст</p>' in actual_html
|
||||||
|
else:
|
||||||
|
assert actual_html == expected_html
|
||||||
|
|||||||
Reference in New Issue
Block a user