"""Shared vocabulary regressions; no generated engine facts in these unit inputs.""" from pathlib import Path import pytest from scripts.reader_appendix_language import clean_reader_appendix_markdown from scripts import skill_release_package ROOT = Path(__file__).resolve().parents[1] RULE_PATH = "scripts/reader_appendix_language.rules.json" @pytest.mark.parametrize("source,expected", [ ("PL9 第 42 页", "外部参照资料"), ("PL9第42页", "外部参照资料"), ("PL9.pdf 第 42 页", "外部参照资料"), ("PL9.pdf第42页后文", "外部参照资料后文"), ("参见PL9第43–44页中的字段", "参见外部参照资料中的字段"), ("PL9 第 40 / 48 页", "外部参照资料"), ("PL9 pages 99-100", "外部参照资料"), ]) def test_chinese_page_boundary(source, expected): assert clean_reader_appendix_markdown(source) == expected @pytest.mark.parametrize("edition", ["basic_git", "premium_cloud_drive"]) def test_shared_rules_are_included_by_skill_package_selection(monkeypatch, edition): # Simulate the tracked file inventory without mutating this worktree's index. # Exercise the real release selector: scripts assets must not become .py-only. inventory = ["scripts/reader_appendix_language.py", RULE_PATH] # Release manifest references are relative to the repository, not the caller. monkeypatch.chdir(ROOT) monkeypatch.setattr(skill_release_package, "_git_files", lambda: inventory) selected = skill_release_package._edition_files(edition) assert all(path in selected for path in inventory) assert (ROOT / RULE_PATH).is_file() @pytest.mark.parametrize("dockerfile", ["railway-api.Dockerfile", "railway-web.Dockerfile"]) def test_shared_rules_live_inside_existing_image_copy_boundary(dockerfile): source = (ROOT / "deploy" / dockerfile).read_text(encoding="utf-8") assert any(line.startswith("COPY scripts ") for line in source.splitlines()) def test_crlf_chart_fence_is_byte_preserved(): fence = ' ```jyotish-chart\r\n{"title":"PL9第42页 parameter_sensitive","id":"D1"}\r\n ```\r\n' source = "PL9第42页\r\n" + fence + "| parameter_sensitive |\r\n" assert clean_reader_appendix_markdown(source).encode("utf-8") == ( "外部参照资料\r\n" + fence + "| 参数敏感 |\r\n" ).encode("utf-8")