reisarod's picture
Upload folder using huggingface_hub
5fae594 verified
'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);
});
});
});