File size: 2,903 Bytes
68ec315 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | # -*- coding: utf-8 -*-
"""V4.1-B1 · B8 六项插件接实际推理 · 旁挂单测(6 项)。
运行:python -m unittest discover -s tests_contract -v
"""
import os
import sys
import unittest
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, ROOT)
from holoaeon.fusion_upgrade import plugin_runtime as PR # noqa: E402
IVSA_ROOT = r"F:\doubaowork\开源发布_中西医融合康复工程_20261026\integrative-rehab-vsa"
def _runtime():
return PR.PluginRuntime.load(root=ROOT, guest_root=IVSA_ROOT)
class PluginRuntimeTest(unittest.TestCase):
def test_01_default_disabled(self):
rt = _runtime()
self.assertFalse(rt.plugin["enabled_by_default"])
self.assertEqual(rt.resolve_all()["capabilities_loaded"], 0)
def test_02_explicit_enable_only(self):
rt = _runtime()
self.assertFalse(rt.enable("")["ok"])
self.assertFalse(rt.enable("潮起开门 ")["ok"])
self.assertTrue(rt.enable("潮起开门")["ok"])
self.assertTrue(rt.enable(rt.plugin["seal"])["ok"])
def test_03_six_capabilities_loaded(self):
rt = _runtime()
rt.enable("潮起开门")
got = rt.resolve_all()
self.assertEqual(got["capabilities_loaded"], 6)
self.assertEqual(set(rt.declared_capabilities()), set(rt.capability_ids()))
@unittest.skipUnless(os.path.isdir(IVSA_ROOT), "客仓不在本机")
def test_04_counts_match_guest(self):
rt = _runtime()
rt.enable("潮起开门")
rows = {r["capability"]: r["rows"] for r in rt.resolve_all()["results"]}
self.assertEqual(rows["channel_groups_17"], 17)
self.assertEqual(rows["heartbeat_70_registry"], 70)
self.assertEqual(rows["rehab_organs_11"], 11)
self.assertEqual(rows["chronic_diseases_7"], 7)
self.assertEqual(rows["rehab_cases_20"], 20)
self.assertEqual(rows["capability_dimensions_147"], 147)
def test_05_no_ivsa_import(self):
src = open(os.path.join(ROOT, "holoaeon", "fusion_upgrade",
"plugin_runtime.py"), encoding="utf-8").read()
self.assertNotIn("import ivsa", src)
self.assertNotIn("integrative", src)
self.assertNotIn("subprocess", src)
def test_06_bridge_deterministic_and_guarded(self):
rt = _runtime()
rt.enable("潮起开门")
bridge = PR.ReasoningBridge(rt)
q = "这条经络通道属于哪个分组?17 通道如何分布"
a1, a2 = bridge.ask(q), bridge.ask(q)
self.assertEqual(a1["seal"], a2["seal"])
self.assertIn("channel_groups_17", a1["routed"])
self.assertEqual(a1["evidence_class"], "simulated")
g = bridge.ask("每次服用多少 mg?")
self.assertTrue(g["guard"]["blocked"])
self.assertEqual(g["facts"], [])
if __name__ == "__main__":
unittest.main()
|