const test=require('node:test'); const assert=require('node:assert/strict'); const fs=require('node:fs'); const path=require('node:path'); const vm=require('node:vm'); const {stripTypeScriptTypes}=require('node:module'); const read=p=>fs.readFileSync(path.join(__dirname,'..',p),'utf8'); const tracker=read('assets/Script/module/Task/DailyTaskProgressTracker.ts').replace('export type','type').replace('export default class','class'); const tool=read('assets/Script/module/Tool/GameTool.ts'); const start=tool.indexOf(' shushu_Track: function ('),end=tool.indexOf('\n },',start)+7; const code=stripTypeScriptTypes(tracker+'\nconst GameTool={'+tool.slice(start,end)+'};globalThis.Tracker=DailyTaskProgressTracker;globalThis.GameTool=GameTool;'); test('complete and claim events reach the SDK with the configured task ID and color',()=>{ const events=[],task={taskId:'daily_2_2',trackingId:'2-2',metric:'clear_color',params:{colorId:10},target:1,value:0,state:0}; const context={console:{log(){}},setTimeout:()=>1,clearTimeout(){},cc:{fx:{GameConfig:{GM_INFO:{otherLevel:0,tasks:{version:2,dailyTasks:[task]}}}}}, MiniGameSdk:{API:{shushu_Track:(name,data)=>events.push({name,...data})}}}; vm.runInNewContext(code,context);context.cc.fx.GameTool=context.GameTool; context.Tracker.record({metric:'clear_color',colorId:9});context.Tracker.recordLevelWon();assert.equal(events.length,0); context.Tracker.record({metric:'clear_color',colorId:10});context.Tracker.recordLevelWon(); context.Tracker.trackTask(task,'claim'); assert.deepEqual(events,[{name:'daily_task',task_id:'2-2',task_status:'complete',color_id:10},{name:'daily_task',task_id:'2-2',task_status:'claim',color_id:10}]); context.Tracker.record({metric:'clear_color',colorId:10});context.Tracker.recordLevelWon();assert.equal(events.length,2); context.Tracker.trackTask({taskId:'daily_6_29',trackingId:'6-29'},'complete'); assert.deepEqual(events[2],{name:'daily_task',task_id:'6-29',task_status:'complete'}); });