bend_puzzle/test/v4777-hud-input-performance-smoke-test.js
2026-07-31 12:54:46 +09:00

20 lines
3 KiB
JavaScript

'use strict';
const {assert,functionSource,app,css,buildMeta}=require('./helpers/app-source');
const hud=functionSource('boardPlayHudVisible'),select=functionSource('selectBoard'),center=functionSource('centerMeta');
assert(hud.includes('hudBoardId===b?.id'),'HUD must remain visible for the last board whose knob was manipulated');
assert(!select.includes('hudBoardId=b.id')&&functionSource('activateBoardHud').includes('hudBoardId=b.id')&&functionSource('activateBoardPointerDrag').includes('activateBoardHud(b)'),'Click selection must not expose the HUD, while a committed knob drag must pin it');
assert(center.includes('select=true')&&app.includes("centerMeta(initialMeta||data.metas.B0,{select:false})"),'Startup camera centering must not select an untouched board');
assert(functionSource('resetSelectedBoard').includes('rendered.get(hudBoardId)'),'Reset must target the persistent HUD selection');
assert(!css.includes("body.is-drawing .board-card:not(.input-active) .static-layer"),'Non-selected boards must not be dimmed while drawing');
const sanitize=functionSource('sanitizeStateForPuzzle');
assert(sanitize.includes('path.detachedStart&&path.endGate==null')&&sanitize.includes('warpKeys.has'),'Loose lines with both knobs on warp cells must be removed');
const realtime=functionSource('queueRealtimeCursor');
assert(realtime.includes("classList.contains('is-drawing')")&&realtime.includes('realtimePendingCursorClient')&&realtime.indexOf('worldUnitAtClient')>realtime.indexOf('setTimeout'),'Raw pointer events must not perform realtime world conversion or send during drawing');
const customInput=functionSource('updateCustomCursorFromPointer'),customCommit=functionSource('commitCustomCursorFrame');
assert(customInput.includes("dataset.cursorMode==='dom'")&&customInput.includes("classList.contains('is-drawing')")&&customInput.includes('scheduleCustomCursorFrame()')&&!customInput.includes('style.transform')&&customCommit.includes('style.transform')&&functionSource('scheduleCustomCursorFrame').includes('requestAnimationFrame(paint)'),'DOM cursor fallback must hide during knob manipulation and commit only through the capped display lane');
assert(functionSource('syncCursorAppearance').includes('dataset.cursorMode=presentation.mode')&&css.includes('data-cursor-mode="dom"')&&css.includes('.board-input-surface')&&css.includes('body.is-drawing #viewport'),'Static cursor skins must cover uncleared board input surfaces and hide during manipulation');
const drag=functionSource('extendPointerTo'),render=functionSource('renderDragFrame');
assert(drag.includes('lastModelProbeKey')&&drag.includes('probeStep=6'),'Drag model work must be quantized instead of repeated for every raw move');
assert(render.includes('blended=false')&&render.includes('lastRenderedTip')&&render.includes('setSvgAttr'),'Live drag rendering must avoid gradients and redundant SVG writes');
assert(buildMeta.APP_VERSION==='47.83','Application version was not advanced');
console.log('v47.83 active HUD, cursor coverage, and capped knob tracking regression test passed');