18 lines
1.3 KiB
TypeScript
18 lines
1.3 KiB
TypeScript
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]);
|
|
});
|