import test from 'node:test'; import assert from 'node:assert/strict'; import {RequestLoading} from '../../YouleNexus/assets/framework/presentation/request-loading.ts'; test('request loading closes on matching success or failure independent of payload',()=>{ const shown:boolean[]=[];const loading=new RequestLoading(v=>shown.push(v)); for(const rpc of ['get_player_task','get_task_award','getVipRankList'] as const){ for(const data of [{state:0},{state:1,error:'失败'},null]){loading.begin(rpc);loading.received({route:'agent',rpc,data});assert.deepEqual(shown.splice(0),[true,false]);} } loading.begin('get_player_task');loading.received({route:'agent',rpc:'getVipRankList'});assert.deepEqual(shown,[true]); loading.received({route:'agent',rpc:'show_message'});assert.deepEqual(shown,[true,false]); }); test('overlapping requests, cancellation, and duplicate replies do not flicker',()=>{ const shown:boolean[]=[];const loading=new RequestLoading(v=>shown.push(v)); loading.begin('get_player_task');loading.begin('getVipRankList');loading.received({route:'agent',rpc:'get_player_task'}); assert.deepEqual(shown,[true]);loading.cancel('getVipRankList');loading.cancel('getVipRankList'); assert.deepEqual(shown,[true,false]);loading.begin('get_task_award');loading.clear();assert.deepEqual(shown,[true,false,true,false]); });