bend_puzzle/test/v4786-effects-ux-smoke-test.js

15 lines
2.3 KiB
JavaScript
Raw Normal View History

2026-08-01 16:06:14 +09:00
'use strict';
const {assert,app,css,read,functionSource}=require('./helpers/app-source');
const catalog=JSON.parse(read('store-catalog.json')),ids=new Set(catalog.map(item=>item.id));
for(const id of['line-effect-prism','line-effect-comet','line-effect-neon','reaction-effect-rain'])assert(!ids.has(id),`Retired effect remains in catalog: ${id}`);
assert(app.includes('MAX_RENDER_FPS=30')&&app.includes('AUXILIARY_FPS=30')&&app.includes('REACTION_TARGET_FPS=30')&&app.includes('DRAG_TARGET_FPS=30'),'Visual rendering is not capped at 30 FPS');
assert(css.includes('.path.line-effect-aurora,.gate-marker.line-effect-aurora')&&css.includes('.gate-dot.line-effect-aurora')&&css.includes('!important')&&functionSource('nextAuroraRgb').includes('auroraPaletteIndex')&&functionSource('startAuroraRgbAnimation').includes('AURORA_COLOR_INTERVAL')&&app.includes('AURORA_COLOR_INTERVAL=2000'),'Aurora is not driven by the curated two-second palette across lines and gates');
const styled=functionSource('drawStyledReaction');
assert(!styled.includes("style==='rain'")&&styled.includes('floatY=-18')&&!styled.includes('drawReactionFlash(context,50'),'Classic reaction is not reduced to a simple floating emoji or rain remains');
assert(functionSource('drawLaserReaction').includes('spin*3.8'),'Laser center emoji is not rotating at high speed');
const publish=functionSource('publishReactionAt');
assert(publish.includes("style!=='classic'")&&publish.includes('activeLocalSpecialReactionUntil=expiresAt')&&publish.includes('sendOrQueueRealtimeReaction(reaction)'),'Client does not lock or share overlapping special emoji effects');
assert(functionSource('publishReaction',read('realtime-server.js')).includes('active.playerId===client.playerId'),'Server does not reject overlapping special emoji effects');
assert(functionSource('animatePurchasedItemToInventory').includes("fly.className='purchase-item-fly'")&&functionSource('animatePurchasedItemToInventory').includes('inventoryBtn.classList.add')&&functionSource('renderStorePanel').includes('purchaseFlyOrigin(icon)'),'Purchased-item appearance does not fly into the Item button');
assert(!functionSource('makeBoard').includes('active-board-boundary')&&!css.includes('active-board-boundary'),'Retired selected-board orbit outline remains');
console.log('v47.87 effect performance, reaction sharing, Aurora, and shop fly-in passed');