专题的多圆显示区:前台按并集裁剪迷雾
上一批把显示区改成了「一组圆」,这一批让前台真正认多个圆。 - clip-path 从 circle() 换成 path():circle() 只表达得了一个圆。每个圆一段 圆弧子路径、**同绕向**(sweep=0),nonzero 填充规则下多段自然取并集, 重叠处不会互相挖洞。 - 拼路径的活单独放 fog-clip.js(rond-map.js 是个大 IIFE,函数取不出来), 这样能直接跑 node 单测;layout 里必须排在 rond-map.js 之前加载。 - 顺带清掉已经死掉的 fitCircle:多圆之后「圆心 + 半径」表达不了,留着就是 两套并行的贴合口径。fitParams 现在只给 fitBBox(单圆时外接矩形正是那个 圆的外接正方形,视野等价)。 - 守卫改名 TestTopicFogIsClippedToAreas,钉住两端(模板发 fogAreas ↔ 脚本认 fogAreas)与两处顺序(裁剪注册在 applyFit 之后、fog-clip.js 在 rond-map.js 之前);fogAreas 必须**无条件**下发(空数组 = 不限区域),不要包在条件里。 - verify.sh 挂进前端单测:以前只靠人记得手动跑 = 等于没有。找不到 node 直接 失败而不是跳过(跳过会让验收看着全绿、实际一行前端脚本都没验)。 验证(临时两圆专题,SQL 造的,已删): - fog-clip.test.js 15 条:把生成的 path 解析回圆弧再验几何,含绕向一致性与 半径 0/负数的夹取。 - 端到端像素验证:自校准出「CSS 容器坐标 → 图像像素」(scale≈2、offset≈19.2, 正是 site_cdp 的 --clip 外扩 10px×scale,别再手算);三张掩码图证明并集语义 —— A 独有点只有 A 亮、B 独有点只有 B 亮、**重叠中心两圆都亮且并集也亮 (无洞)**,整体集合差异 0.013%。 - 迷雾掩码:86,776 个像素,按两圆并集的解析式判 **圆外 0 个**;两个圆内分别 有 52,609 / 46,757 个迷雾像素 ⇒ 第二个圆真的被认了,不是只看第一个。
This commit is contained in:
@@ -149,6 +149,36 @@ if [ -z "$RUN" ] && [ "$PKGS" = "./..." ]; then
|
||||
ok "纯净往返包已生成:$(basename "$CLEAN_OUT")"
|
||||
fi
|
||||
|
||||
# --- 第 1.5 段:前端脚本单测(node 直跑,不依赖数据库)--------------------------
|
||||
# internal/web/static/js/*.test.js 是纯函数用例(日期解析、迷雾裁剪路径拼装)。
|
||||
# 以前只靠人记得手动跑 = 等于没有:改了脚本没人拦。这里挂进验收。
|
||||
# 找不到 node 时**直接失败**而不是「跳过」—— 跳过会让这次验收看着全绿,
|
||||
# 而实际上前端脚本一行都没验(这正是「0 skip」那条纪律要防的事)。
|
||||
NODE_BIN="${NODE_BIN:-}"
|
||||
if [ -z "$NODE_BIN" ]; then
|
||||
for cand in "$(command -v node 2>/dev/null)" \
|
||||
"$HOME/.workbuddy/binaries/node/versions/22.22.2-6/node.exe" \
|
||||
"/c/Program Files/nodejs/node.exe"; do
|
||||
if [ -n "$cand" ] && [ -x "$cand" ]; then NODE_BIN="$cand"; break; fi
|
||||
done
|
||||
fi
|
||||
[ -n "$NODE_BIN" ] || fail "找不到 node(前端脚本单测跑不了)。用 NODE_BIN=/path/to/node 指定后再跑"
|
||||
JSPASS=0; JSFAIL=0
|
||||
for t in "$ROOT"/internal/web/static/js/*.test.js; do
|
||||
[ -f "$t" ] || continue
|
||||
if jsout=$("$NODE_BIN" "$t" 2>&1); then
|
||||
n=$(printf '%s\n' "$jsout" | sed -n 's/.*pass=\([0-9]\{1,\}\).*/\1/p' | tail -1)
|
||||
JSPASS=$((JSPASS + ${n:-0}))
|
||||
ok "前端单测 $(basename "$t"):pass=${n:-0}"
|
||||
else
|
||||
printf '%s\n' "$jsout" | tail -25
|
||||
JSFAIL=$((JSFAIL + 1))
|
||||
echo "✗ 前端单测失败:$(basename "$t")"
|
||||
fi
|
||||
done
|
||||
[ "$JSFAIL" = 0 ] || fail "前端单测有 $JSFAIL 个文件失败"
|
||||
echo "== 前端单测合计:pass=$JSPASS,失败文件 $JSFAIL"
|
||||
|
||||
# --- 第二段:全量(或定点)------------------------------------------------------
|
||||
RUNARG=""
|
||||
[ -n "$RUN" ] && RUNARG="-run $RUN"
|
||||
|
||||
Reference in New Issue
Block a user