MatchMaster/tools/coin-madness/check-home-entry-ready.cjs

19 lines
1.4 KiB
JavaScript

const fs = require('fs'), ts = require('typescript'), assert = require('node:assert/strict');
const source = fs.readFileSync('assets/Script/GameManager.ts','utf8');
const body = source.split(' startGame() {')[1].split(' //#region 微信登录')[0];
const code = ts.transpileModule('function startGame() {'+body,{compilerOptions:{target:ts.ScriptTarget.ES2017}}).outputText;
let shopDone, entryDone, loaded=0;
const cc={tween:()=>({to(){return this},start(){}}),v3(){},isValid:()=>true,warn(){},
assetManager:{loadBundle(name,cb){shopDone=cb}},director:{loadScene(){loaded++}}};
const ready=new Promise(resolve=>entryDone=resolve);
const start=new Function('cc','GoldMinerService',code+';return startGame;')(cc,{current:()=>({readForDisplay:()=>ready})});
(async()=>{
start.call({node:{}});shopDone();await Promise.resolve();assert.equal(loaded,0);
entryDone({});await Promise.resolve();await Promise.resolve();assert.equal(loaded,1);
const prefab=JSON.parse(fs.readFileSync('assets/coin_madness/prefab/CoinMadness.prefab'));
assert.equal(prefab.find(n=>n.__type__==='cc.Node'&&n._name==='Rules')._active,false);
const panel=prefab.find(n=>n.message&&n.purchaseButton&&n.card);
assert.equal(prefab[prefab[panel.message.__id__].node.__id__]._active,false);
console.log('PASS: homepage waits for first entry snapshot; both footer hints hidden in prefab');
})().catch(e=>{console.error(e);process.exitCode=1});