refactor(编号): test/host 与 App/Drivers 注释去测试层级号(73 站点 / 64 文件)
同族第二道:代码注释面。41 个 run_unit_test.py 文件头与引用行、common harness 与两份 README、4 个 *_test.c 文件头、App/** 14 处(含 BOM 文件 App/cfg/cfg_file.c)、 GD5F nand_ftl.c 1 处,共 73 站点 / 64 文件;措辞取「主机侧纯逻辑单元测试运行器 (纯标准库)」避免同行「主机侧」重复。 零行为改动(机器证据,不是口头): - 17 个 .c/.h 剥掉注释后与 HEAD **逐字节相同**; - 42 个 .py 走 ast.dump 比较、仅归一 docstring(真实字符串字面量参与比较,故旗标或 输出文本被动过必然报红)→ 全部相等;behaviour_changed=0。 - py_compile 42/42;抽跑 watchdog 47/47、freq 46/46(动手前先取基线,改后同数); CR 字节 0、EF BF BD 0、BOM 与 HEAD 逐一一致、check_bom_drift rc=0。 刻意未动:6 处字符串字面量(FTP 应答 "215 UNIX Type: L8"、lftpd_test.c SYST 断言、 console_log_test.c 的 "L1\r\n"、phasor_test.c 的 "L2-in ring" 文案与 printf 标题)—— 改了就是改测试输出/行为;UI 设计令牌层 L0(ui_tokens.h、ui_content_page.c)与 test/host/README.md 的算法层号是**另外的族**。 两条 SyntaxWarning(ftp_cfg / net_cfg 文件头 \S 转义)**HEAD 同样存在**,已对 HEAD 副本 复现证明非本次引入,未顺手改。
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# test/host/common/ — 主机侧测试公共库
|
||||
|
||||
> L0.5 主机侧单元测试的**通用 harness**:被各模块的单测运行器共享,
|
||||
> 主机侧纯逻辑单测的**通用 harness**:被各模块的单测运行器共享,
|
||||
> 集中承载工具链探测与编译/运行/判定的公共细节。
|
||||
|
||||
## 文件一览
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
看门狗单测最早的运行器(`test/host/watchdog/run_unit_test.py`)把工具链探测、
|
||||
`INCLUDE`/`LIB` 拼接、GBK 解码、`/wd4819` 抑制、退出码契约**全写死在模块目录内**。
|
||||
第二个 L0.5 单测出现时须整段复制——工具链细节一旦修正(新增 VS 版本、SDK 布局
|
||||
第二个主机侧纯逻辑单测出现时须整段复制——工具链细节一旦修正(新增 VS 版本、SDK 布局
|
||||
变化、编码处理调整)就会发散。抽取后各模块运行器只剩"声明式"配置。
|
||||
|
||||
> **边界**:harness **不认识任何模块**——源码路径、桩目录、额外 include、断言
|
||||
@@ -72,7 +72,7 @@ raise SystemExit(run_host_unit_test(TestBuild(name="...", src="...", ...)))
|
||||
|
||||
## 环境要求
|
||||
|
||||
同 L0.5 通用要求(见 [`../../../docs/测试说明/测试开发标准流程.md`](../../../docs/测试说明/测试开发标准流程.md) §4.2):
|
||||
同主机侧纯逻辑单测通用要求(见 [`../../../docs/测试说明/测试开发标准流程.md`](../../../docs/测试说明/测试开发标准流程.md) §4.2):
|
||||
MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不调 `vcvars64.bat`**
|
||||
(内部 `reg.exe` 受限),直接拼环境变量调 `cl.exe`。
|
||||
|
||||
@@ -95,10 +95,10 @@ MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不
|
||||
二进制**——两棵树的 `summary_marker` 一模一样,harness 分辨不出来,等于拿别人的
|
||||
运行结果给自己下结论。2026-10-25 三条道并行时全量 `ci_local` 里 `test-cppcheck` /
|
||||
`test-coverage` 偶发 "files were modified by this hook"、单跑即绿,就是这一类。
|
||||
- **按工作树分家 + 每次跑独占**同时解决"跨树互踩"和"同树并发"(覆盖率钩子与手工 L0.5
|
||||
- **按工作树分家 + 每次跑独占**同时解决"跨树互踩"和"同树并发"(覆盖率钩子与手工主机侧纯逻辑单测
|
||||
同时跑同一棵树时也会撞)。不牺牲任何东西:每个测试单元就一个 `.c`,`cl` 每次整体
|
||||
重编,"共享 obj 省编译"本来就是错觉。**没有加锁**——这里没有需要互斥的独占资源,
|
||||
只是名字撞了;加锁等于把 L0.5 变成和 build/bench 一样的全局串行。
|
||||
只是名字撞了;加锁等于把主机侧纯逻辑单测变成和 build/bench 一样的全局串行。
|
||||
|
||||
两个开关(都写在 harness 顶部注释里,判据以 `unit_test_harness.host_build_root()` 为准):
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""unit_test_harness.py - 主机侧单元测试(L0.5)的通用运行器 harness。
|
||||
"""unit_test_harness.py - 主机侧纯逻辑单测的通用运行器 harness。
|
||||
|
||||
职责(**不认识任何具体模块**):
|
||||
探测本机 MSVC 工具链 -> 拼 INCLUDE/LIB -> 编译测试单元 -> 运行 -> 判定退出码。
|
||||
@@ -10,7 +10,7 @@
|
||||
为什么要 harness(2026-10-01 测试架构评审):
|
||||
看门狗单测的运行器(`test/host/watchdog/run_unit_test.py`,170 行)把工具链
|
||||
探测、`INCLUDE`/`LIB` 拼接、GBK 解码、`/wd4819` 抑制、退出码契约**全部写死在
|
||||
模块目录内**。第二个 L0.5 单测出现时须整段复制——工具链细节一旦修正(新增 VS
|
||||
模块目录内**。第二个主机侧纯逻辑单测出现时须整段复制——工具链细节一旦修正(新增 VS
|
||||
版本、SDK 布局变化、编码处理调整)就会发散。抽到这里后,各模块运行器只剩
|
||||
"声明式"配置。
|
||||
|
||||
@@ -134,7 +134,7 @@ class TestBuild:
|
||||
|
||||
|
||||
# ----------------------------- 产物目录归属(跨工作树并行) -----------------------------
|
||||
# 现象(2026-10-25 三条道并行开发实测):全量 ci_local 的 L0 里 test-cppcheck /
|
||||
# 现象(2026-10-25 三条道并行开发实测):全量 ci_local 的静态门禁里 test-cppcheck /
|
||||
# test-coverage 偶发 "files were modified by this hook",单独重跑即绿、工作树零改动。
|
||||
# 根因是旧写法把 obj/exe 直接落在**全机共用**的 %TEMP%,名字由套件名派生
|
||||
# (%TEMP%\net_socket_tests.exe 与 %TEMP%\net_socket_obj)。多棵工作树并行跑**同名
|
||||
@@ -147,7 +147,7 @@ class TestBuild:
|
||||
#
|
||||
# 口径:**按工作树分家**。产物根 = %TEMP%\dtu_host\<仓库根路径哈希>\,跨树天然不撞,
|
||||
# 同一棵树内仍复用同一份目录(33 套的编译缓存没必要白白重编)。**不用锁**——锁会把
|
||||
# L0.5 变成和 build/bench 一样的全局串行,而这里并没有需要互斥的独占资源,只是名字
|
||||
# 主机侧纯逻辑单测变成和 build/bench 一样的全局串行,而这里并没有需要互斥的独占资源,只是名字
|
||||
# 撞了。显式覆盖:DTU_HOST_BUILD=<目录>(CI/容器要固定路径时用)。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user