MatchMaster/tools/coin-madness/check-popup-queue.cjs

19 lines
1.2 KiB
JavaScript

const fs = require('fs'), ts = require('typescript'), assert = require('node:assert/strict');
const code = ts.transpileModule(fs.readFileSync('assets/home_popup_queue/HomePopupQueue.ts', 'utf8'), {
compilerOptions: { target: ts.ScriptTarget.ES2017, module: ts.ModuleKind.CommonJS, experimentalDecorators: true }
}).outputText;
const cc = { Component: class {}, _decorator: { ccclass: c => c }, isValid: () => true, error: e => { throw e; } };
const out = {};
new Function('exports', 'cc', code)(out, cc);
for (const host of [null, {}, { isPopupActive: () => false }, { isPopupActive: () => true }]) {
const queue = new out.default();
queue.node = { getComponent: name => name === 'CoinMadnessHost' ? host : null, getChildByName: () => null };
let ran = 0;
queue.enqueue('automatic', 10, done => { ran++; done(); });
queue.update();
const blocked = !!host && typeof host.isPopupActive === 'function' && host.isPopupActive();
assert.equal(ran, blocked ? 0 : 1);
if (blocked) { host.isPopupActive = () => false; queue.update(); assert.equal(ran, 1); }
}
console.log('PASS: missing/legacy host never throws; active manual panel blocks automatic popups until closed.');