1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
/*!
* VisualEditor DataModel Fake socket.io-like class for testing
*
* @copyright See AUTHORS.txt
*/
// Fake socket class, with limited API
ve.dm.FakeSocket = function VeDmFakeSocket( server, query ) {
server.sockets.sockets.push( this );
this.handlers = new Map();
this.rooms = new Set();
this.pending = [];
this.handshake = { query: query, url: 'fakeurl' };
this.client = { conn: { remoteAddress: 'fakeaddress' } };
this.storedDataForDoc = {};
this.dataForDoc = undefined;
this.log = [];
};
OO.initClass( ve.dm.FakeSocket );
ve.dm.FakeSocket.static.makeServer = function () {
const sockets = [],
log = [];
const getRoom = function ( roomName ) {
return { emit: ( ...args ) => {
sockets.forEach( ( socket ) => {
if ( socket.rooms.has( roomName ) ) {
socket.emit( ...args );
}
} );
} };
};
const reset = function () {
sockets.length = 0;
log.length = 0;
};
return { sockets: { sockets: sockets, log: log, in: getRoom, reset: reset } };
};
ve.dm.FakeSocket.prototype.join = function ( roomName ) {
this.rooms.add( roomName );
};
ve.dm.FakeSocket.prototype.emit = function ( eventName, ...args ) {
const handlers = this.handlers.get( eventName ) || [];
handlers.forEach( ( handler ) => {
this.pending.push( handler( ...args ) );
} );
};
ve.dm.FakeSocket.prototype.on = function ( eventName, handler ) {
if ( !this.handlers.has( eventName ) ) {
this.handlers.set( eventName, [] );
}
this.handlers.get( eventName ).push( handler );
};
ve.dm.FakeSocket.prototype.receive = function ( eventName, ...args ) {
const handlers = this.handlers.get( eventName ) || [];
handlers.forEach( ( handler ) => {
this.pending.push( handler( ...args ) );
} );
};
ve.dm.FakeSocket.prototype.wait = function () {
return Promise.all( this.pending );
};
|