.
This commit is contained in:
22
tests/fixtures/nespertcam_launcher_preamble.html
vendored
Normal file
22
tests/fixtures/nespertcam_launcher_preamble.html
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta charset="utf-8"></head>
|
||||
<body>
|
||||
<p class="Title"><b>NESPERTCAM Launcher - Пълно ръководство на потребителя</b></p>
|
||||
<p><b>Съдържание</b></p>
|
||||
<ol>
|
||||
<li><a href="#1">1. Преглед на приложението</a></li>
|
||||
<li><a href="#2">2. Инсталация и настройка</a></li>
|
||||
<li><a href="#3">3. Конфигурация и настройки</a></li>
|
||||
<li><a href="#4">4. Използване и функции</a></li>
|
||||
<li><a href="#5">5. Описание на интерфейса</a></li>
|
||||
<li><a href="#6">6. Решаване на проблеми</a></li>
|
||||
<li><a href="#7">7. Разширени функции</a></li>
|
||||
<li><a href="#8">8. Технически детайли</a></li>
|
||||
<li><a href="#9">9. Поддръжка и контакти</a></li>
|
||||
</ol>
|
||||
<h1>1. Преглед на приложението</h1>
|
||||
<p><b>Какво е NESPERTCAM Launcher?</b></p>
|
||||
<p>NESPERTCAM Launcher е специализирано Windows приложение, предназначено за лесно и удобно стартиране на NESPERTCAM64.exe и свързаните с него модули от едно място.</p>
|
||||
</body>
|
||||
</html>
|
||||
80
tests/test_section_split_preamble.py
Normal file
80
tests/test_section_split_preamble.py
Normal file
@@ -0,0 +1,80 @@
|
||||
"""Корица + Съдържание + глава 1 → 2 секции (не 4)."""
|
||||
from pathlib import Path
|
||||
|
||||
from help_processor import (
|
||||
merge_preamble_sections,
|
||||
merge_short_sections,
|
||||
parse_html,
|
||||
Section,
|
||||
)
|
||||
|
||||
FIXTURE = Path(__file__).parent / "fixtures" / "nespertcam_launcher_preamble.html"
|
||||
|
||||
|
||||
def _titles(sections):
|
||||
return [s.title for s in sections]
|
||||
|
||||
|
||||
def test_nespertcam_preamble_yields_two_sections():
|
||||
sections = merge_preamble_sections(merge_short_sections(parse_html(FIXTURE)))
|
||||
assert len(sections) == 2
|
||||
assert sections[0].title == "NESPERTCAM Launcher - Пълно ръководство на потребителя"
|
||||
assert sections[1].title == "1. Преглед на приложението"
|
||||
assert "Съдържание" in sections[0].text
|
||||
assert "1. Преглед на приложението" in sections[0].text
|
||||
assert "Какво е NESPERTCAM Launcher?" in sections[1].text
|
||||
assert "NESPERTCAM64.exe" in sections[1].text
|
||||
|
||||
|
||||
def test_h2_and_bold_do_not_split_inside_chapter():
|
||||
html = Path(__file__).parent / "fixtures" / "_tmp_h2.html"
|
||||
html.write_text(
|
||||
"""<!DOCTYPE html><html><body>
|
||||
<h1>Глава А</h1>
|
||||
<h2>Подточка</h2>
|
||||
<p>Текст под подточката с достатъчно думи за тяло.</p>
|
||||
<p><b>Още едно bold подзаглавие</b></p>
|
||||
<p>Още текст в същата секция.</p>
|
||||
<h1>Глава Б</h1>
|
||||
<p>Тяло на втората глава.</p>
|
||||
</body></html>""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
try:
|
||||
sections = merge_preamble_sections(merge_short_sections(parse_html(html)))
|
||||
assert _titles(sections) == ["Глава А", "Глава Б"]
|
||||
assert "Подточка" in sections[0].text
|
||||
assert "Още едно bold подзаглавие" in sections[0].text
|
||||
finally:
|
||||
html.unlink(missing_ok=True)
|
||||
|
||||
|
||||
def test_toc_heading_as_h1_merges_into_cover():
|
||||
"""Ако „Съдържание“ е H1, merge_preamble го залепва към корицата."""
|
||||
secs = [
|
||||
Section("Ръководство X", "", 1),
|
||||
Section("Съдържание", "1. Увод\n2. Край", 1),
|
||||
Section("1. Увод", "Текст на увода.", 1),
|
||||
]
|
||||
merged = merge_preamble_sections(secs)
|
||||
assert len(merged) == 2
|
||||
assert merged[0].title == "Ръководство X"
|
||||
assert "Съдържание" in merged[0].text
|
||||
assert merged[1].title == "1. Увод"
|
||||
|
||||
|
||||
def test_heading1_chapters_still_split():
|
||||
html = Path(__file__).parent / "fixtures" / "_tmp_chapters.html"
|
||||
html.write_text(
|
||||
"""<!DOCTYPE html><html><body>
|
||||
<h1>1. Първа</h1><p>Аа аа аа.</p>
|
||||
<h1>2. Втора</h1><p>Бб бб бб.</p>
|
||||
<h1>3. Трета</h1><p>Вв вв вв.</p>
|
||||
</body></html>""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
try:
|
||||
sections = merge_preamble_sections(merge_short_sections(parse_html(html)))
|
||||
assert _titles(sections) == ["1. Първа", "2. Втора", "3. Трета"]
|
||||
finally:
|
||||
html.unlink(missing_ok=True)
|
||||
Reference in New Issue
Block a user