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:
2026-10-28 17:52:55 +08:00
parent 842d711ed6
commit 04997e48aa
64 changed files with 73 additions and 73 deletions
+5 -5
View File
@@ -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()` 为准):
+4 -4
View File
@@ -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/容器要固定路径时用)。