feat: integrate login flow, lobby UI and bitmap font resources
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {readFileSync} from 'node:fs';
|
||||
import {runInNewContext} from 'node:vm';
|
||||
import ts from 'typescript';
|
||||
|
||||
test('wire logs correctly label both directions and preserve transmitted frames',()=>{
|
||||
for(const debugIO of [false,true]){
|
||||
const logs:unknown[][]=[],sent:string[]=[],received:string[]=[];
|
||||
let socket:any;
|
||||
class WebSocket {
|
||||
constructor(readonly url:string){socket=this;}
|
||||
send(frame:string){sent.push(frame);}
|
||||
}
|
||||
const exports:any={};
|
||||
const source=readFileSync(new URL('../../YouleNexus/assets/framework/net/cocos-transport.ts',import.meta.url),'utf8');
|
||||
runInNewContext(ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2020}}).outputText,
|
||||
{exports,WebSocket,console:{log:(...args:unknown[])=>logs.push(args)},require:()=>({STARTUP_CONFIG:{debugIO}})});
|
||||
const transport=new exports.CocosWebSocketTransport();transport.onMessage((s:string)=>received.push(s));transport.connect('ws://test');
|
||||
const frame='{"route":"agent","rpc":"player_login","data":{"state":0}}';
|
||||
transport.send(frame);socket.onmessage({data:frame});socket.onmessage({data:'{"com":"@serverheartbeat"}'});
|
||||
assert.deepEqual(sent,[frame]);assert.equal(received[0],frame);
|
||||
const frames=logs.filter(args=>String(args[0]).includes('包 '));
|
||||
assert.equal(frames.length,debugIO?3:0);
|
||||
if(debugIO){
|
||||
assert.equal(frames[0][0],'[发包 C→S] agent/player_login');
|
||||
assert.equal(frames[1][0],'[收包 S→C] agent/player_login');
|
||||
assert.equal(frames[2][0],'[收包 S→C] @serverheartbeat');
|
||||
assert.equal(typeof frames[0][2],'object');
|
||||
}
|
||||
else assert.equal(logs.length,0);
|
||||
}
|
||||
});
|
||||
|
||||
test('connection debug logs preserve close evidence and are disabled by debugIO',()=>{
|
||||
for(const debugIO of [false,true]){
|
||||
const logs:any[][]=[];let socket:any,opened=0,closed=0;
|
||||
class WebSocket {
|
||||
readyState=0;
|
||||
constructor(readonly url:string){socket=this;}
|
||||
close(){this.readyState=3;this.onclose({code:1006,reason:'test disconnect',wasClean:false});}
|
||||
onclose:any;
|
||||
}
|
||||
const exports:any={};
|
||||
const source=readFileSync(new URL('../../YouleNexus/assets/framework/net/cocos-transport.ts',import.meta.url),'utf8');
|
||||
runInNewContext(ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2020}}).outputText,
|
||||
{exports,WebSocket,console:{log:(...args:any[])=>logs.push(args)},require:()=>({STARTUP_CONFIG:{debugIO}})});
|
||||
const transport=new exports.CocosWebSocketTransport();
|
||||
transport.onOpen(()=>opened++);transport.onClose(()=>closed++);transport.connect('ws://test');
|
||||
socket.readyState=1;socket.onopen();socket.onerror({type:'error'});
|
||||
assert.equal(opened,1);assert.equal(closed,1);
|
||||
assert.deepEqual(logs.map(x=>x[0]),debugIO?['[WebSocket] 连接中','[WebSocket] 已连接','[WebSocket] 连接错误','[WebSocket] 已断开']:[]);
|
||||
if(debugIO){assert.equal(logs[3][1].code,1006);assert.equal(logs[3][1].reason,'test disconnect');assert.equal(logs[3][1].readyState,3);}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user