71 lines
3.4 KiB
Python
71 lines
3.4 KiB
Python
"""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"}
|