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});