test(harmony): 「用系统方案」的地基 —— 系统资源名与 BlurStyle 取值离线可校验(判据先于替换)

jianf 追加要求「鸿蒙要求用系统方案」(§二·五)。难点是**没有设备**:
`$r('sys.color.写错了')` 编译期不报、只有真机运行到那一行才炸 —— 这块会变成谁都验不了的区域。

SDK 里其实带着答案:`sdk/default/openharmony/toolchains/id_defined.json` 列了全部系统资源名
及其类型(本机 API 26:7826 条,color 1059 条);BlurStyle 取值在 `component/common.d.ts` 的
`declare enum BlurStyle` 里。两边都能离线查,所以"名字写对没有"可以变成构建期判据。

新增 `test/harmony-system-api.test.mjs`(4 条,已接进 run-all):

1. SDK 名表/组件声明找不到时**判红并给出替代做法**(会静默跳过的判据等于没有这条判据 ——
   本仓库已栽过四次同类问题);
2. 源码里每个 `$r('sys.<type>.<name>')` 必须存在且**类型相符**;
3. 每个 `BlurStyle.<MEMBER>` 必须在 SDK enum 里;
4. 替换计划要用的那批系统色**先核过再写代码**,并且钉住一条边界:名表里没有
   `brand`/`confirm`/`success` —— 权限三档、预算三档这些**业务语义色没有系统对应物**,
   继续用自定义令牌,不许"为了系统化"把 plan 档画成 warning 色(那是丢语义换形式)。

变异验证:拼错色名 `ohos_id_color_list_cad_bg` → 报「查无此名」并指出文件;
写错 `BlurStyle.COMPONENT_不存在` → 报出可用取值。顺带修掉解析精度问题:
早先的宽松正则把文档里的 `T`、`R` 也当成了枚举成员,现在精确到 `,`/`=` 分隔符。

验证:`npm test` 退出码 0(10 个判据文件全绿 + vitest 258/258)。
This commit is contained in:
2026-09-14 13:56:43 +08:00
parent 7603560a72
commit 4d226be056
3 changed files with 196 additions and 0 deletions

View File

@ -463,3 +463,23 @@ deb 也不必从 targets 里摘。已写进 `client/electron/BUILD.md`(含排
**玻璃只出现在一层**不嵌套各自加模糊)——
收件箱现在的通栏行 + 分隔线要改成卡片/气泡这项排在系统材质替换之前做
因为它决定组件结构
### 7.11 「用系统方案」的第一块地基:系统资源名**离线可校验**(判据先于替换)
没有设备`$r('sys.color.写错了')` 编译期不报只有真机运行到那一行才炸 ——
"用系统方案"会变成一块谁都验不了的区域所以先把校验立起来
`client/electron/test/harmony-system-api.test.mjs`4 已接进 `run-all`
- 源码里每个 `$r('sys.<type>.<name>')` 都必须在 SDK 名表
`sdk/default/openharmony/toolchains/id_defined.json` **存在且类型相符**
- 每个 `BlurStyle.<MEMBER>` 都必须在 SDK `declare enum BlurStyle`
- 替换计划里要用的那批系统色**先核过再写代码**`ohos_id_color_list_card_bg`
`_list_separator``_background`/`_sub_background``_text_primary/secondary/tertiary`
`_emphasize``_warning``_alert``_mask_regular`
- 名表里没有 `brand` / `confirm` / `success` —— 这条**边界也钉住**
权限三档预算三档这些**业务语义色没有系统对应物**继续用自定义令牌
不许"为了系统化" plan 档画成 warning
两条纪律写进判据本身SDK 名表找不到时**判红并说明**会静默跳过的判据等于没有
以及变异验证拼错色名 `list_cad_bg` "查无此名"写错 `BlurStyle.COMPONENT_不存在` 报可用取值
名字解析精确到 `,`/`=` 分隔符 —— 早先的宽松写法把文档里的 `T``R` 也算成了枚举成员)。