diff --git a/client/electron/test/CRITERIA.md b/client/electron/test/CRITERIA.md index 557e712..768d8b5 100644 --- a/client/electron/test/CRITERIA.md +++ b/client/electron/test/CRITERIA.md @@ -31,6 +31,17 @@ `client/electron/test/background.test.mjs` 里还有一批 `\{[\s\S]{0,80}…`、`{0,160}` 窗口。 下次碰那个文件时按本节形状改成"取规则体",不要在那里再加一条注释算了。 +### 1.5 两张表各缺一半时,必须**按 id 联接**,不能按相邻关系配对(pi 2026-09-14) + +读 SDK 的系统色时踩到的:`sysResource.js` 只有**名字→id**,`resources.txt` 只有 **id→值**, +而后者把名字与值排得并不总是紧邻(我第一遍按文本邻近关系读,直接串了行, +把 `ohos_id_color_background` 读成了 `ohos_id_color_background_dark` 的值)。 +正确做法:名字查 id、id 查值,**两次联接都基于标识符**;顺便用一张表校验另一张表 +(例如 `_dark` 结尾的名字应当拿到深色值),对不上就说明联接方式错了。 + +这与第 1 条是同一件事:**邻接不是结构**。它同样适用于"我自己写的判据" +(§6.6 里那条被变异测试抓住两次的窗口式正则就是反例)。 + ## 2. 合成的清单 + 空 allow-list:条目要结构化 "清单从 SDK/参考实现生成 + allow-list 目前为空"是个好形状,但它**迟早被侵蚀**: diff --git a/client/electron/test/run-all.mjs b/client/electron/test/run-all.mjs index 456cf0c..0bde5f2 100644 --- a/client/electron/test/run-all.mjs +++ b/client/electron/test/run-all.mjs @@ -49,7 +49,7 @@ if (!existsSync(CRITERIA_DOC)) { process.exit(1); } const criteriaDoc = readFileSync(CRITERIA_DOC, 'utf8'); -for (const must of ['配对/解析', 'allow-list', '变异验证', '剥掉注释', '按行', '自报条数', '只支撑你看到的那一层', '已经在某个提交里', '自带修法']) { +for (const must of ['配对/解析', 'allow-list', '变异验证', '剥掉注释', '按行', '自报条数', '只支撑你看到的那一层', '已经在某个提交里', '自带修法', '按 id 联接']) { if (!criteriaDoc.includes(must)) { console.error(`✗ 判据规范里少了「${must}」这条 —— 规则被删掉了还是搬走了?`); process.exit(1);