|
'use strict'; |
|
|
|
var should = require('should'); |
|
var Room = require('../../source/room'); |
|
var Socket = require('../fake_socket'); |
|
|
|
describe('Room', function () { |
|
|
|
beforeEach(function () { |
|
Socket.reset(); |
|
}); |
|
|
|
describe('.get', function() { |
|
|
|
it('should get a room', function () { |
|
|
|
|
|
var room = Room.get('some-room'); |
|
room.should.be.an.instanceOf(Room); |
|
|
|
|
|
Room.get('some-room').should.equal(room); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('.flush', function () { |
|
|
|
it('should destroy all the rooms', function () { |
|
|
|
|
|
var room = Room.get('a'); |
|
|
|
|
|
var socket = new Socket(); |
|
socket.join('a'); |
|
room.sockets.should.have.length(1); |
|
|
|
|
|
Room.flush(); |
|
|
|
|
|
room.sockets.should.have.length(0); |
|
|
|
|
|
Room.get('a').should.not.equal(room); |
|
}); |
|
|
|
}); |
|
|
|
describe(':constructor', function () { |
|
|
|
it('should create a new Room', function () { |
|
var room = new Room('my-room'); |
|
|
|
room.should.have.keys('id', 'sockets', '_namespaces'); |
|
room.id.should.equal('my-room'); |
|
|
|
|
|
Room.get('my-room').should.not.equal(room); |
|
}); |
|
|
|
}); |
|
|
|
describe(':_join', function () { |
|
|
|
it('should add a socket to a room', function () { |
|
var room = new Room('my-room'); |
|
var socket = new Socket(); |
|
|
|
room._join(socket); |
|
room.length().should.equal(1); |
|
|
|
|
|
room._join(socket); |
|
room.length().should.equal(1); |
|
|
|
|
|
socket = new Socket(); |
|
|
|
room._join(socket); |
|
room.length().should.equal(2); |
|
}); |
|
|
|
}); |
|
|
|
describe(':_leave', function () { |
|
|
|
it('should remove a socket from a room', function () { |
|
var room = new Room('my-awesome-room'); |
|
var socket = new Socket(); |
|
|
|
room.length().should.equal(0); |
|
|
|
|
|
room._leave(socket); |
|
room.length().should.equal(0); |
|
|
|
|
|
room._join(socket); |
|
room.length().should.equal(1); |
|
|
|
|
|
room._leave(socket); |
|
room.length().should.equal(0); |
|
}); |
|
|
|
}); |
|
|
|
describe(':in', function () { |
|
|
|
it('should proxy Room.get', function () { |
|
var a = Room.get('a'); |
|
var b = Room.get('b'); |
|
|
|
a.in('a').should.equal(a); |
|
a.in('b').should.equal(b); |
|
b.in('a').should.equal(a); |
|
b.in('b').should.equal(b); |
|
}); |
|
|
|
}); |
|
|
|
describe(':length', function () { |
|
|
|
it('should count how many sockets are in a room', function () { |
|
var room = new Room('my-room'); |
|
room.length().should.equal(0); |
|
|
|
room._join('a'); |
|
room.length().should.equal(1); |
|
|
|
room._join('b'); |
|
room.length().should.equal(2); |
|
|
|
room._join('c'); |
|
room.length().should.equal(3); |
|
|
|
room._join('d'); |
|
room.length().should.equal(4); |
|
|
|
room._leave('d'); |
|
room.length().should.equal(3); |
|
|
|
room._leave('c'); |
|
room.length().should.equal(2); |
|
|
|
room._leave('b'); |
|
room.length().should.equal(1); |
|
|
|
room._leave('a'); |
|
room.length().should.equal(0); |
|
}); |
|
|
|
}); |
|
|
|
describe(':emit', function () { |
|
|
|
it('should emit to all sockets in a room', function () { |
|
var room = Room.get('my-room'); |
|
|
|
var a = new Socket(); |
|
var b = new Socket(); |
|
var c = new Socket(); |
|
|
|
a.join('my-room'); |
|
b.join('my-room'); |
|
c.join('my-room'); |
|
|
|
room.length().should.equal(3); |
|
|
|
room.emit('three', 1, 2, 3); |
|
|
|
a.last().should.eql(['three', 1, 2, 3]); |
|
b.last().should.eql(['three', 1, 2, 3]); |
|
c.last().should.eql(['three', 1, 2, 3]); |
|
|
|
a.leave('my-room'); |
|
room.length().should.equal(2); |
|
|
|
room.emit('two', 1, 2, 3); |
|
|
|
a.last().should.eql(['three', 1, 2, 3]); |
|
b.last().should.eql(['two', 1, 2, 3]); |
|
c.last().should.eql(['two', 1, 2, 3]); |
|
|
|
b.leave('my-room'); |
|
room.length().should.equal(1); |
|
|
|
room.emit('one', 1, 2, 3); |
|
|
|
a.last().should.eql(['three', 1, 2, 3]); |
|
b.last().should.eql(['two', 1, 2, 3]); |
|
c.last().should.eql(['one', 1, 2, 3]); |
|
|
|
c.leave('my-room'); |
|
room.length().should.equal(0); |
|
|
|
room.emit('zero', 1, 2, 3); |
|
|
|
a.last().should.eql(['three', 1, 2, 3]); |
|
b.last().should.eql(['two', 1, 2, 3]); |
|
c.last().should.eql(['one', 1, 2, 3]); |
|
}); |
|
|
|
}); |
|
|
|
describe(':broadcast', function () { |
|
|
|
it('should broadcast to all sockets in a room', function () { |
|
var room = Room.get('my-room'); |
|
|
|
var a = new Socket(); |
|
var b = new Socket(); |
|
var c = new Socket(); |
|
|
|
a.join('my-room'); |
|
b.join('my-room'); |
|
c.join('my-room'); |
|
|
|
|
|
room.broadcast(a.id, 'three', 1, 2, 3); |
|
|
|
should.equal(undefined, a.last()); |
|
b.last().should.eql(['three', 1, 2, 3]); |
|
c.last().should.eql(['three', 1, 2, 3]); |
|
|
|
|
|
room.broadcast(b.id, 'two', 1, 2, 3); |
|
|
|
a.last().should.eql(['two', 1, 2, 3]); |
|
b.last().should.eql(['three', 1, 2, 3]); |
|
c.last().should.eql(['two', 1, 2, 3]); |
|
|
|
|
|
room.broadcast(c.id, 'one', 1, 2, 3); |
|
|
|
a.last().should.eql(['one', 1, 2, 3]); |
|
b.last().should.eql(['one', 1, 2, 3]); |
|
c.last().should.eql(['two', 1, 2, 3]); |
|
}); |
|
|
|
}); |
|
|
|
describe(':namespace', function () { |
|
|
|
it('should get a namespace for a room', function () { |
|
var room = new Room('with-a-ns'); |
|
var ns = room.namespace('my-ns'); |
|
|
|
room.namespace('my-ns').should.equal(ns); |
|
room.namespace('my-other-ns').should.not.equal(ns); |
|
}); |
|
|
|
}); |
|
|
|
describe(':contains', function () { |
|
|
|
it('should check if a room contains a socket', function () { |
|
var room = Room.get('your-room'); |
|
|
|
var socket = new Socket(); |
|
room.contains(socket).should.equal(false); |
|
|
|
socket.join('your-room'); |
|
room.contains(socket).should.equal(true); |
|
|
|
socket.leave('your-room'); |
|
room.contains(socket).should.equal(false); |
|
|
|
room._join(socket); |
|
room.contains(socket).should.equal(true); |
|
}); |
|
|
|
}); |
|
|
|
describe(':empty', function () { |
|
|
|
it('should empty a room', function () { |
|
var room = Room.get('that-room'); |
|
var socket = new Socket(); |
|
socket.join('that-room'); |
|
|
|
room.length().should.equal(1); |
|
|
|
room.empty(); |
|
|
|
room.length().should.equal(0); |
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|