diff --git a/client/electron/test/run-all.mjs b/client/electron/test/run-all.mjs index 6ab3d69..0ea5c3e 100644 --- a/client/electron/test/run-all.mjs +++ b/client/electron/test/run-all.mjs @@ -2370,6 +2370,40 @@ let selfCheckRuns = 0; ['名与括号间有空格', 'function fooSelfTest (a) {}\n'], ['const = async (…', 'const fooSelfTest = async (a) => {};\n'], ]; + /* + * ★★ **样本表本身也必须被钉住**(我自己变异出来的 M45)。 + * + * 实测:把 5 个样本**删掉 3 个**(只留 `function` 声明与 `const = async`) + * ⇒ 默认跑 **0 条 RED**、`red` 仍是 9,只是成功报文里那半句从 + * "在 **5** 种写法上都有对照" 变成 "在 **2** 种写法上…"。 + * ⇒ 也就是说 **"发现规则在 N 种写法上都有对照" 当时是散文,不是判据**: + * 它把 N 打出来,而 N 变小**没有任何东西拦**。 + * 而"样本齐不齐"正是这条防线**唯一的防线** —— 样本可以被悄悄删光, + * 防线的覆盖就静默地退回到"只验我恰好留下的那一种"。 + * **这是"判据存在 vs 判据在路径上"的又一个变体**:样本在,但"样本够不够"没判据。 + * + * ⇒ 修法:把**要求覆盖的写法**列成一份**具名的**清单(`REQUIRED_FORMS`), + * 然后两个方向都判: + * ① 每种**要求**的写法都必须有样本(⇒ 删样本 = 红,不再是静默); + * ② 每个样本都必须能被认出来(原有方向)。 + * ⇒ 删样本现在会红,而且**指名**删的是哪一种。 + * (为什么不是"断言 `length >= 5`":那个数**自己**就是可以随手改小的常量; + * 具名清单至少让"我要放弃支持箭头函数写法"变成一次**看得见的声明**。) + */ + const REQUIRED_FORMS = ['function 声明', '箭头函数', 'async function', '名与括号间有空格', 'const = async (…']; + const sampleNames = FORM_SAMPLES.map(([w]) => w); + const noSample = REQUIRED_FORMS.filter(w => !sampleNames.includes(w)); + if (noSample.length) { + console.log(`RED 这些写法**要求覆盖、却没有样本**:${noSample.join('、')}` + + ' ⇒ 覆盖静默缩水(发现规则对那种写法可能就是瞎的)'); + reds.push(`(自检)\`FORM_SAMPLES\` 缺了要求的样本:${noSample.join('、')}` + + ' —— 覆盖缩水必须看得见,不能只改一个数字'); + } + const stray = sampleNames.filter(w => !REQUIRED_FORMS.includes(w)); + if (stray.length) { + console.log(`RED 这些样本不在要求清单里(加了样本却没说是为了守哪种写法):${stray.join('、')}`); + reds.push(`(自检)\`FORM_SAMPLES\` 有多余样本未登记进 \`REQUIRED_FORMS\`:${stray.join('、')}`); + } const missed = FORM_SAMPLES.filter(([, src]) => !declaredSelfTests(src).includes('fooSelfTest')); if (missed.length) { console.log(`RED 发现规则认不出这些写法(⇒ 那种写法写了自检也不会被接线防线看见):` @@ -2404,7 +2438,7 @@ let selfCheckRuns = 0; console.log(`自检段:${SELFTESTS.length} 个自检已在**默认路径**内跑过` + `(${SELFTESTS.map(([n]) => `--${n}`).join('、')});` + `源码里 ${declared.length} 个 \`*SelfTest\` 函数**全部**在册(无"写了没接线");` - + `发现规则在 ${FORM_SAMPLES.length} 种写法上都有对照`); + + `发现规则在 ${FORM_SAMPLES.length} 种写法上都有对照(要求 ${REQUIRED_FORMS.length} 种,缺一即红)`); } }