"""Copy-only tests: these strings are vocabulary cases, not engine fixtures.""" import pytest from scripts.reader_appendix_language import clean_reader_appendix_markdown @pytest.mark.parametrize("raw,label", [ ("parameter_sensitive", "参数敏感"), ("pyjhora_behavior_only", "仅单一外部参照,未做多引擎核对"), ("not_multiengine_parity", "仅单一外部参照,未做多引擎核对"), ("unresolved_external_tuple_boundary", "外部边界未对齐"), ("partial_verified", "部分核验"), ("raw_appendix_only", "仅原始附录可见"), ("missing_in_local", "本地暂无"), ]) def test_status_copy_preserves_rows(raw, label): source = f"| sign_cn | degree_in_sign | nakshatra_lord |\n| 白羊座 | 12.5 | {raw} |\n" result = clean_reader_appendix_markdown(source) assert result == source.replace(raw, label) assert result.count("\n") == source.count("\n") @pytest.mark.parametrize("raw", ["PyJHora", "JHora", "pyjhora"]) def test_external_engine_names(raw): assert clean_reader_appendix_markdown(raw) == "外部参照引擎" @pytest.mark.parametrize("raw", ["PL9", "PL9 第 83-88 页", "PL9 第 40 / 48 页", "PL9 page 99-100", "PL9.pdf", "PL9 第 43–44 页"]) def test_external_product_pages(raw): assert clean_reader_appendix_markdown(raw) == "外部参照资料" @pytest.mark.parametrize("raw", ["cmd_full_reading", "jyotish_engine.cmd_full_reading", "render_pl9_markdown", "build_professional_report_reference_packet"]) def test_internal_functions(raw): assert clean_reader_appendix_markdown(raw) == "本地计算" @pytest.mark.parametrize("raw,label", [("blocked", "暂不可用"), ("executed", "已执行"), ("available", "可用"), ("computed", "已计算")]) def test_ambiguous_words_only_in_whole_cells(raw, label): prose = f"The {raw} result is not a claim.\n| {raw} result | `{raw}` | {raw} |\n" assert clean_reader_appendix_markdown(prose) == f"The {raw} result is not a claim.\n| {raw} result | `{label}` | {label} |\n" assert clean_reader_appendix_markdown(raw) == raw def test_chart_fence_unchanged_and_copy_idempotent(): fence = '```jyotish-chart\n{"title":"parameter_sensitive","id":"D1"}\n```\n' source = "参数敏感\n" + fence + "| parameter_sensitive |\n" result = clean_reader_appendix_markdown(source) assert fence in result assert clean_reader_appendix_markdown(result) == result def test_public_boundary_only_leaves_internal_renderer_and_json_unchanged(): from scripts.professional_report_reference import build_professional_report_reference from types import SimpleNamespace packet = {"status": "parameter_sensitive"} engine = SimpleNamespace( build_professional_report_reference_packet=lambda *args: packet, render_pl9_markdown=lambda value: "| parameter_sensitive | cmd_full_reading |", ) handler = SimpleNamespace( _high_rigor_birth_payload=lambda body: {"year": 2000, "hour": 0, "minute": 0, "today": "2026-01-01"}, _compute_full_reading_for_thematic=lambda birth: {}, ) assert build_professional_report_reference(handler, {"format": "json"}, engine=engine)["report"] is packet assert build_professional_report_reference(handler, {"format": "markdown"}, engine=engine)["markdown"] == "| parameter_sensitive | cmd_full_reading |" assert engine.render_pl9_markdown(packet) == "| parameter_sensitive | cmd_full_reading |" assert packet == {"status": "parameter_sensitive"}