"""DM-01~09: 数据模型 — Field/FieldTree/VerificationRun/TestSuite""" import sys, os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) from data.field_tree import Field, FieldTree from data.diff_result import VerificationRun, FieldResult from data.test_case import TestCase, TestSuite, SparkConfig def test_field_construction(): """DM-01: Field 属性""" f = Field(name="WS-A", level=5, pic="9(4)", usage="COMP-3", offset=0, length=4) assert f.name == "WS-A" assert f.level == 5 def test_field_tree_flatten(): """DM-02: 扁平化含嵌套""" child = Field(name="WS-ITEM", level=10, pic="X(3)") parent = Field(name="WS-GROUP", level=5, pic="X(10)", children=[child]) tree = FieldTree(fields=[parent]) flat = tree.flatten() assert "WS-GROUP" in flat assert "WS-ITEM" in flat def test_field_tree_flatten_duplicate(): """DM-03: 同名覆盖 (后盖前)""" f1 = Field(name="TMP", level=5, pic="9(4)") f2 = Field(name="TMP", level=10, pic="X(3)") tree = FieldTree(fields=[f1, f2]) flat = tree.flatten() assert flat["TMP"].pic == "X(3)" # 后面的覆盖 def test_verification_run_timestamp(): """DM-04: 自动 timestamp""" vr = VerificationRun(program="P") assert vr.timestamp != "" def test_verification_run_verdict(): """DM-05~06: verdict""" vr = VerificationRun(program="P", status="PASS") assert vr.verdict() == "PASS" vr2 = VerificationRun(program="P", status="BLOCKED") assert vr2.verdict() == "BLOCKED" def test_verification_run_total_fields(): """DM-07: total_fields 计算""" vr = VerificationRun(program="P", fields_matched=5, fields_mismatched=3) assert vr.total_fields == 8 def test_test_suite_has_spark(): """DM-08: has_spark""" ts = TestSuite(spark_config=SparkConfig(num_records=100)) assert ts.has_spark is True ts2 = TestSuite() assert ts2.has_spark is False def test_field_result_tolerance(): """DM-09: 容忍度标记""" fr = FieldResult(field_name="AMT", status="PASS", tolerance_applied=0.01) assert fr.status == "PASS" assert fr.tolerance_applied == 0.01 def test_test_case(): tc = TestCase(id="TC-001", fields={"A": 1}, coverage_targets=["DP-1"]) assert tc.id == "TC-001" assert tc.fields["A"] == 1