v0.5.3
- Мелкие исправления увеличивающие работу конвертера
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
"""Пустой заголовок: конвертер не падает, но и не молчит.
|
||||
|
||||
Методичка МИРЭА (`_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"])
|
||||
Reference in New Issue
Block a user