Files
md_to_gost/tests/test_empty_heading.py
T
Igor20264 f7136bd8bd
Example document / build (push) Has been cancelled
Python application / build (push) Has been cancelled
v0.5.3
- Мелкие исправления увеличивающие работу конвертера
2026-09-10 10:50:15 +03:00

83 lines
2.9 KiB
Python

"""Пустой заголовок: конвертер не падает, но и не молчит.
Методичка МИРЭА (`_method_extract.txt`, строка 156): «…разделы, пункты …
имеют заголовки, четко и кратко отражающие их содержание». Заголовок без
текста — нарушение, а не валидный ввод: он даст в документе пронумерованный,
но безымянный раздел, который попадёт в автособираемое содержание. Значит,
парсер обязан такую строку пережить, а checker — сообщить о ней.
"""
import unittest
from md2gost.checker import check_markdown
from md2gost.extended_markdown.heading import Heading
MD_EMPTY_HEADING = """# *СОДЕРЖАНИЕ
[TOC]
#
Текст раздела без заголовка.
"""
MD_OK_HEADINGS = """# *СОДЕРЖАНИЕ
[TOC]
# Анализ предметной области
Текст раздела.
"""
def _heading(source: str) -> Heading:
match = Heading.pattern.match(source)
assert match is not None, f"pattern did not match {source!r}"
return Heading(match)
class TestEmptyHeadingParsing(unittest.TestCase):
def test_bare_hash_does_not_raise(self):
heading = _heading("#\n")
self.assertEqual("", heading.inline_body)
self.assertTrue(heading.numbered)
self.assertEqual(1, heading.level)
def test_bare_hashes_of_deeper_level(self):
heading = _heading("###\n")
self.assertEqual("", heading.inline_body)
self.assertTrue(heading.numbered)
self.assertEqual(3, heading.level)
def test_asterisk_without_text_is_unnumbered(self):
heading = _heading("# *\n")
self.assertEqual("", heading.inline_body)
self.assertFalse(heading.numbered)
def test_normal_headings_are_unaffected(self):
numbered = _heading("# Анализ предметной области\n")
self.assertEqual("Анализ предметной области", numbered.inline_body)
self.assertTrue(numbered.numbered)
unnumbered = _heading("## *ВВЕДЕНИЕ\n")
self.assertEqual("ВВЕДЕНИЕ", unnumbered.inline_body)
self.assertFalse(unnumbered.numbered)
class TestEmptyHeadingChecker(unittest.TestCase):
def test_empty_heading_is_reported(self):
issues = check_markdown(MD_EMPTY_HEADING, "coursework")
found = [i for i in issues if i.id == "heading.empty"]
self.assertEqual(1, len(found))
self.assertEqual("warning", found[0].severity)
self.assertEqual(4, found[0].line)
def test_normal_headings_produce_no_issue(self):
issues = check_markdown(MD_OK_HEADINGS, "coursework")
self.assertEqual([], [i for i in issues if i.id == "heading.empty"])