45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
"""目录号格式化与大纲带号写回。"""
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
if _ROOT not in sys.path:
|
|
sys.path.insert(0, _ROOT)
|
|
|
|
from modules.generator import _parse_outline, _sections_to_outline_text # noqa: E402
|
|
from utils.outline_numbering import format_heading_display, int_to_chinese_numeral # noqa: E402
|
|
|
|
|
|
class TestOutlineNumbering(unittest.TestCase):
|
|
def test_int_to_chinese(self):
|
|
self.assertEqual(int_to_chinese_numeral(1), "一")
|
|
self.assertEqual(int_to_chinese_numeral(10), "十")
|
|
self.assertEqual(int_to_chinese_numeral(11), "十一")
|
|
self.assertEqual(int_to_chinese_numeral(23), "二十三")
|
|
|
|
def test_format_heading(self):
|
|
self.assertEqual(format_heading_display(1, "3", "总体"), "三、总体")
|
|
self.assertEqual(format_heading_display(2, "1.2", "子节"), "1.2 子节")
|
|
|
|
def test_sections_to_outline_text_has_numbers(self):
|
|
sections = [
|
|
{"level": 1, "title": "第一章", "number": "1"},
|
|
{"level": 2, "title": "小节", "number": "1.1"},
|
|
]
|
|
text = _sections_to_outline_text("某项目技术标书", sections)
|
|
self.assertIn("某项目技术标书", text)
|
|
self.assertIn("一、第一章", text)
|
|
self.assertIn("1.1 小节", text)
|
|
|
|
def test_parse_roundtrip_numbered_outline(self):
|
|
raw = "标书标题\n一、第一章\n1.1 节A\n"
|
|
_, sections, normalized = _parse_outline(raw)
|
|
self.assertGreaterEqual(len(sections), 2)
|
|
self.assertIn("一、第一章", normalized)
|
|
self.assertIn("1.1 节A", normalized)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|