""" test_pre_trim_multica_comment.py — pre_trim_multica_comment 单元测试 覆盖 4 类样本(COO 要求): 1. 长 markdown 2. 嵌套表 3. 多代码块 4. 中英混排 版本:v1.0 作者:严维序(opengineer) """ import os import sys import unittest _SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, _SCRIPT_DIR) from pre_trim_multica_comment import ( pre_trim_for_multica_comment, DEFAULT_MAX_BYTES, __version__, ) class TestPreTrimLongMarkdown(unittest.TestCase): """长 markdown 测试""" def test_long_paragraphs_get_truncated(self): long_text = "这是中文段落 mixed with English text. " * 100 result = pre_trim_for_multica_comment(long_text) self.assertLessEqual(result["trimmed_bytes"], DEFAULT_MAX_BYTES) self.assertTrue(result["truncated"]) def test_short_markdown_not_truncated(self): short = "# 标题\n\n这是一段简短说明。\n\n## 子标题\n\n- 列表项 1\n- 列表项 2\n" result = pre_trim_for_multica_comment(short) self.assertFalse(result["truncated"]) self.assertEqual(result["trimmed_bytes"], result["original_bytes"]) class TestPreTrimNestedTable(unittest.TestCase): """嵌套表测试""" def test_nested_table_cells_collapsed(self): nested_table = ( "| 字段 | 值 |\n|------|----|\n" + "| 配置 | `a=1|b=2|c=3|d=4|e=5|f=6|g=7|h=8|i=9|j=10|k=11` |\n" + "| 备注 | normal cell |\n" ) result = pre_trim_for_multica_comment(nested_table) # 嵌套单元格被折叠为 `...` self.assertIn("`...`", result["trimmed"]) self.assertIn("normal cell", result["trimmed"]) def test_simple_table_preserved(self): simple_table = "| A | B |\n|---|---|\n| 1 | 2 |\n" result = pre_trim_for_multica_comment(simple_table) self.assertIn("| A | B |", result["trimmed"]) self.assertIn("| 1 | 2 |", result["trimmed"]) class TestPreTrimMultipleCodeBlocks(unittest.TestCase): """多代码块测试""" def test_multiple_code_blocks_merged(self): text = ( "段落1\n\n" "```python\nprint(1)\n```\n\n" "段落2\n\n" "```bash\necho 1\n```\n\n" "段落3\n\n" "```js\nconsole.log(1)\n```\n\n" "段落4\n\n" "```yaml\nfoo: bar\n```\n\n" "结尾" ) result = pre_trim_for_multica_comment(text) # 应保留首尾两个代码块,中间合并 self.assertIn("print(1)", result["trimmed"]) self.assertIn("foo: bar", result["trimmed"]) # 中间代码块应被省略(echo 1 和 console.log 不应出现) # 注意:合并后保留 first + last,所以 echo/console 可能保留 self.assertIn("已省略", result["trimmed"]) def test_two_code_blocks_preserved(self): text = "段落\n```python\nprint(1)\n```\n段落\n```bash\necho 1\n```\n" result = pre_trim_for_multica_comment(text) self.assertIn("print(1)", result["trimmed"]) self.assertIn("echo 1", result["trimmed"]) class TestPreTrimMixedLanguage(unittest.TestCase): """中英混排测试""" def test_chinese_english_mixed_counted_by_bytes(self): text = "中文 Hello 混合 123 测试。\n" * 20 result = pre_trim_for_multica_comment(text) # 中文 3 字节/字符,UTF-8 字节数正确 self.assertGreater(result["original_bytes"], len(text)) self.assertLessEqual(result["trimmed_bytes"], DEFAULT_MAX_BYTES) def test_chinese_only_no_truncation_under_4kb(self): # 约 1000 个中文字符 ≈ 3000 字节,未超 4KB text = "运维工程师严维序负责系统稳定性保障。" * 30 result = pre_trim_for_multica_comment(text) self.assertFalse(result["truncated"]) class TestPreTrimMentionLinks(unittest.TestCase): """mention 链接测试""" def test_agent_mention_stripped(self): text = "[@徐聪](mention://agent/46bdd4a6-5c64-475a-92ef-36a763602fa1) 已就绪" result = pre_trim_for_multica_comment(text) self.assertIn("@徐聪", result["trimmed"]) self.assertNotIn("mention://", result["trimmed"]) def test_issue_mention_preserved(self): text = "[MUL-104](mention://issue/abc-123) 已派发" result = pre_trim_for_multica_comment(text) self.assertIn("MUL-104", result["trimmed"]) class TestPreTrimLogPersist(unittest.TestCase): """.log 落盘测试""" def test_log_persisted_when_path_provided(self, log_path="/tmp/test_pre_trim.log"): if os.path.exists(log_path): os.remove(log_path) long_text = "log test " * 200 result = pre_trim_for_multica_comment(long_text, log_path=log_path) self.assertIsNotNone(result["log_path"]) self.assertTrue(os.path.exists(log_path)) with open(log_path, "r", encoding="utf-8") as f: content = f.read() self.assertIn("log test", content) # 清理 os.remove(log_path) class TestPreTrimVersion(unittest.TestCase): """版本戳测试(BIZ-38 合规)""" def test_version_stamp_present(self): self.assertIsNotNone(__version__) self.assertRegex(__version__, r"^\d+\.\d+\.\d+$") if __name__ == "__main__": unittest.main(verbosity=2)