Files
vibe-coding-cn/.github/test-markdown-details.py
T
tradecatlabsandGitHub 0920cd4c59 refactor: maintenance - 平铺共享模块并移除lib目录 (#159)
* refactor: toolbox - 收口Context Skills Extensions三域资源

* fix: toolbox - 重定向文集中的嵌套标签链接

* fix: toolbox - 保全被ignore遮蔽的原跟踪事实文件

* refactor: toolbox - 退役workflows残留并平铺原定义

* docs: gongfa - 整理Lambda演算正文并冻结首发来源

* docs: gongfa - 登记Lambda演算天级上品并紧随拼好码

* docs: gongfa - 同步Lambda演算AI引用覆盖

* docs: readme - 移除工具箱怎么用整块

* refactor: skills - 删除16个官方引用仅保留自有入口

* refactor: extensions - 退役33个Skill脚本并清理调用

* refactor: maintenance - 迁移校验测试至.github维护层

* chore: extensions - 移除用户点名的八项程序与资料

* refactor: maintenance - 平铺共享模块并移除lib目录
2026-10-18 13:51:45 +08:00

79 lines
4.1 KiB
Python

#!/usr/bin/env python3
"""验证代码围栏不会泄漏示例标签,且正文真实错误仍被 CLI 拒绝;保留隔离工件。"""
import argparse
import hashlib
import json
from pathlib import Path
import subprocess
import sys
import tempfile
import unittest
# 期望来自 CommonMark 0.31.2 §4.5 和字面 HTML 配对,不调用被测提取器计算。
CASES = [
("nested_backticks", "# 示例\n\n````markdown\n```html\n<details>\n```\n````\n", 0),
("nested_tildes", "# 示例\n\n~~~~markdown\n~~~html\n<details>\n~~~\n~~~~\n", 0),
("closer_with_info", "```markdown\n``` not-a-closer\n<details>\n```\n", 0),
("outer_details", "<details>\n<summary>有效</summary>\n\n````markdown\n```html\n<details>\n```\n````\n</details>\n", 0),
("longer_closer", "~~~text\n<details>\n~~~~~ \t\n", 0),
("mismatched_closer", "````markdown\n~~~\n<details>\n````\n", 0),
("plain_fence", "```html\n<details>\n```\n<details>\n<summary>正文</summary>\n</details>\n", 0),
("real_error", "````markdown\n<details>\n````\n<details>\n<summary>缺少结束</summary>\n", 1),
]
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--checker", type=Path, default=Path(__file__).with_name("check-markdown-details.py"))
parser.add_argument("--artifacts", type=Path)
args = parser.parse_args()
source = args.checker.resolve(strict=True).read_bytes()
# 隔离CLI保留其真实公共布局依赖,不复制或改写被测围栏逻辑。
layout = Path(__file__).with_name('source_boundaries.py').read_bytes()
if args.artifacts:
artifacts = args.artifacts.resolve()
artifacts.mkdir(parents=True, exist_ok=False)
else:
artifacts = Path(tempfile.mkdtemp(prefix="markdown-details-test-"))
records = []
class DetailsFenceTest(unittest.TestCase):
def test_fences_and_real_html_errors(self):
for name, markdown, expected in CASES:
with self.subTest(case=name):
case = artifacts / name
script = case / '.github/check-markdown-details.py'
script.parent.mkdir(parents=True)
script.write_bytes(source)
script.with_name('source_boundaries.py').write_bytes(layout)
(case / "README.md").write_text(markdown, encoding="utf-8")
command = [sys.executable, str(script)]
completed = subprocess.run(command, capture_output=True, text=True, timeout=10)
(case / "stdout.log").write_text(completed.stdout, encoding="utf-8")
(case / "stderr.log").write_text(completed.stderr, encoding="utf-8")
records.append({"case": name, "command": command, "expected_exit_code": expected,
"actual_exit_code": completed.returncode})
self.assertEqual(completed.returncode, expected, completed.stdout + completed.stderr)
if expected:
self.assertIn("README.md:4:", completed.stdout)
self.assertIn("MARKDOWN_DETAILS_ERRORS", completed.stdout)
else:
self.assertIn("OK markdown details checked", completed.stdout)
suite = unittest.defaultTestLoader.loadTestsFromTestCase(DetailsFenceTest)
result = unittest.TextTestRunner(verbosity=2).run(suite)
report = {"success": result.wasSuccessful(), "cases": records,
"checker_sha256": hashlib.sha256(source).hexdigest(),
"layout_sha256": hashlib.sha256(layout).hexdigest(),
"test_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
"specification": "https://spec.commonmark.org/0.31.2/#fenced-code-blocks"}
(artifacts / "result.json").write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
print(json.dumps({"success": report["success"], "cases": len(records), "artifacts": str(artifacts)}, ensure_ascii=False))
return 0 if result.wasSuccessful() else 1
if __name__ == "__main__":
raise SystemExit(main())