mirror of
https://github.com/Wan-Video/Wan2.1.git
synced 2025-07-14 19:50:10 +00:00
261 lines
5.7 KiB
JavaScript
261 lines
5.7 KiB
JavaScript
'use strict';
|
|
|
|
var should = require('should');
|
|
var Socket = require('../../source/socket');
|
|
var Room = require('../../source/room');
|
|
var Connection = require('events').EventEmitter;
|
|
|
|
var handle = {
|
|
identify: function (socket) {
|
|
return socket;
|
|
},
|
|
write: function (socket, message) {
|
|
socket.emit('message', message);
|
|
},
|
|
onread: function (socket, fn) {
|
|
socket.on('message', fn);
|
|
},
|
|
onerror: function (socket, fn) {
|
|
socket.on('error', fn);
|
|
},
|
|
onopen: function (socket, fn) {
|
|
socket.on('open', fn);
|
|
},
|
|
onclose: function (socket, fn) {
|
|
socket.on('close', fn);
|
|
},
|
|
release: function (socket) {
|
|
socket.removeAllListeners('message');
|
|
socket.removeAllListeners('error');
|
|
socket.removeAllListeners('open');
|
|
socket.removeAllListeners('close');
|
|
}
|
|
};
|
|
|
|
describe('Socket', function () {
|
|
|
|
var conn, socket;
|
|
|
|
before(function () {
|
|
Socket.all = Room.get('all');
|
|
});
|
|
|
|
beforeEach(function () {
|
|
Room.get('all').empty();
|
|
conn = new Connection();
|
|
socket = new Socket(conn, handle);
|
|
});
|
|
|
|
describe('.all', function () {
|
|
|
|
it('should contain all connected sockets', function () {
|
|
Socket.all.length().should.equal(1);
|
|
Socket.all.id.should.equal('all');
|
|
Socket.all.sockets.should.eql([ socket ]);
|
|
|
|
socket.release();
|
|
Socket.all.length().should.equal(0);
|
|
});
|
|
|
|
});
|
|
|
|
describe('.in', function () {
|
|
|
|
it('should get the "all" room', function () {
|
|
Socket.in('all').should.equal(Socket.all);
|
|
});
|
|
|
|
it('should get a custom room', function () {
|
|
Socket.in('test').length().should.equal(0);
|
|
socket.join('test');
|
|
Socket.in('test').length().should.equal(1);
|
|
});
|
|
|
|
});
|
|
|
|
describe(':constructor', function () {
|
|
|
|
it('should create a new Socket', function () {
|
|
socket.rooms.should.be.an.instanceOf(Array);
|
|
socket.broadcast.should.have.type('function');
|
|
Socket.all.length().should.equal(1);
|
|
});
|
|
|
|
});
|
|
|
|
describe(':_process', function () {
|
|
|
|
it('should pass args with the event', function (done) {
|
|
socket.once('fn', function (arg1, arg2, arg3) {
|
|
arg1.should.equal('a');
|
|
arg2.should.equal('b');
|
|
arg3.should.equal('c');
|
|
done();
|
|
});
|
|
|
|
var data = 'fn("a", "b", "c")';
|
|
socket._process(data);
|
|
|
|
});
|
|
|
|
it('should emit namespaces as events', function (done) {
|
|
socket.once('ns.fn', function(arg1, arg2, arg3) {
|
|
arg1.should.equal('a');
|
|
arg2.should.equal('b');
|
|
arg3.should.equal('c');
|
|
done();
|
|
});
|
|
|
|
var data = 'ns.fn("a", "b", "c")';
|
|
socket._process(data);
|
|
|
|
});
|
|
|
|
|
|
it('should emit to namespaces', function (done) {
|
|
socket.namespace('ns').once('fn', function(arg1, arg2, arg3) {
|
|
arg1.should.equal('a');
|
|
arg2.should.equal('b');
|
|
arg3.should.equal('c');
|
|
done();
|
|
});
|
|
|
|
var data = 'ns.fn("a", "b", "c")';
|
|
socket._process(data);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe(':_handleWith', function () {
|
|
|
|
it('should set _handle', function () {
|
|
socket._handle.should.equal(handle);
|
|
|
|
socket._handleWith('stream');
|
|
var stream = socket._handle;
|
|
stream.should.not.equal(handle);
|
|
stream.should.have.type('object');
|
|
|
|
socket._handleWith('websocket');
|
|
var websocket = socket._handle;
|
|
websocket.should.not.equal(stream);
|
|
websocket.should.have.type('object');
|
|
});
|
|
|
|
});
|
|
|
|
describe(':connect', function () {
|
|
|
|
it('should bind socket with handler', function () {
|
|
|
|
// socket.connect() is run in the constrsuctor
|
|
// if a socket connection is passed in
|
|
|
|
socket.socket.should.equal(conn);
|
|
socket.id.should.equal(handle.identify(conn));
|
|
|
|
conn.listeners('message').should.have.length(1);
|
|
conn.listeners('error').should.have.length(1);
|
|
conn.listeners('open').should.have.length(1);
|
|
conn.listeners('close').should.have.length(1);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe(':namespace', function () {
|
|
|
|
it('should get a namespace', function (done) {
|
|
var ns = socket.namespace('name');
|
|
|
|
ns.name.should.equal('name');
|
|
ns.item.should.equal(socket);
|
|
|
|
ns.on('event', function (arg1, arg2, arg3) {
|
|
arg1.should.equal('a');
|
|
arg2.should.equal('b');
|
|
arg3.should.equal('c');
|
|
done();
|
|
});
|
|
|
|
socket.emit('name.event', 'a', 'b', 'c');
|
|
});
|
|
|
|
});
|
|
|
|
describe(':emit', function () {
|
|
|
|
it('should emit a message', function (done) {
|
|
|
|
conn.on('message', function (message) {
|
|
message.should.equal('event("arg1",2,[3])');
|
|
done();
|
|
});
|
|
|
|
socket.emit('event', 'arg1', 2, [3]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe(':join', function () {
|
|
|
|
it('should join a room', function () {
|
|
|
|
socket.rooms.should.eql([ 'all' ]);
|
|
Socket.in('room').length().should.equal(0);
|
|
|
|
socket.join('room');
|
|
socket.rooms.should.eql([ 'all', 'room' ]);
|
|
Socket.in('room').length().should.equal(1);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe(':leave', function () {
|
|
|
|
it('should leave a room', function () {
|
|
|
|
socket.join('room');
|
|
socket.rooms.should.eql([ 'all', 'room' ]);
|
|
|
|
socket.leave('room');
|
|
socket.rooms.should.eql([ 'all' ]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe(':room', function () {
|
|
|
|
it('should be the same as Socket.in', function () {
|
|
socket.room.should.equal(Socket.in);
|
|
});
|
|
|
|
it('should get a room', function () {
|
|
socket.room('all').should.equal(Socket.all);
|
|
socket.room('room').should.equal(Socket.in('room'));
|
|
});
|
|
|
|
});
|
|
|
|
describe(':release', function () {
|
|
|
|
it('should remove from all rooms', function () {
|
|
|
|
Socket.all.length().should.equal(1);
|
|
socket.rooms.should.eql([ 'all' ]);
|
|
|
|
socket.release();
|
|
|
|
Socket.all.length().should.equal(0);
|
|
should.equal(undefined, socket.rooms);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|