#!/usr/bin/env python3 # -*- coding: utf-8 -*- """UI 数据快照层(ui_data)主机侧纯逻辑单元测试运行器(纯标准库)。 做什么: 用本机 MSVC 编译 test/host/ui_data/ui_data_test.c(它以 #include 纳入 **生产源文件** Drivers/BSP/UI/ui_data.c,并同时 include 契约另一侧的 App/algo 头),在 PC 上离线跑"快照存储 + 发布盖章 + 跨层下标一致性", 失败即非 0 退出。零硬件、零烧录、毫秒级。 工具链探测 / 编译运行全部委托 test/host/common/unit_test_harness.py。 为什么要主机侧单测(而不是只用模拟器像素回归): 快照层是页面看到的整个世界,但 ui-golden 只覆盖"已接线的页面"——遥信 27 点、 定值 40 项、遥测 9 路这类"还没接线的通道"错了不会让任何一张参考图变红。 跨层不透明下标(yc 序 = adc_semantic_t、q10 序 = prot_set_id_t)正是解耦换来 的风险面,契约把它钉在编译/测试期(docs/UI设计/UI_数据供给设计说明.md §9.4)。 用法(仓库根目录): python test/host/ui_data/run_unit_test.py 退出码:0=PASS / 1=测试失败 / 2=环境错误。 设计依据:docs/UI设计/UI_数据供给设计说明.md §9.1 / §12 判据 8(道E task-14); 创建日期:2026-10-25 """ import os import sys HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE))) sys.path.insert(0, os.path.join(ROOT, "test", "host", "common")) from unit_test_harness import TestBuild, run_host_unit_test # noqa: E402 # 被测侧(BSP/UI)与契约另一侧(App/algo)都要在包含路径里:测试单元在同一 TU # 里同时看到两侧头,才有资格断言"页面表的下标指向预期枚举"。 BUILD = TestBuild( name="UI Data Snapshot Tests", src=os.path.join(HERE, "ui_data_test.c"), include_dirs=[ HERE, os.path.join(ROOT, "Drivers", "BSP", "UI"), os.path.join(ROOT, "App", "algo"), os.path.join(ROOT, "App", "log"), # soe_rec.h:SOE 事件类型编号真源 ], summary_marker="=== UI Data Snapshot Tests:", ) if __name__ == "__main__": sys.exit(run_host_unit_test(BUILD))