mirror of
https://github.com/Wan-Video/Wan2.1.git
synced 2025-07-14 19:50:10 +00:00
200 lines
4.9 KiB
JavaScript
200 lines
4.9 KiB
JavaScript
'use strict';
|
|
|
|
var Jandal = require('../../index');
|
|
var Socket = require('../../source/socket');
|
|
var Room = require('../../source/room');
|
|
var should = require('should');
|
|
|
|
var createSocket = function () {
|
|
return {
|
|
last: null,
|
|
reply: null,
|
|
on: function (name, callback) {
|
|
if (name != 'data') return;
|
|
this.reply = callback;
|
|
},
|
|
write: function (string) {
|
|
this.last = string;
|
|
}
|
|
};
|
|
};
|
|
|
|
describe('Socket', function () {
|
|
|
|
var conn, socket, expect;
|
|
|
|
expect = function (string) {
|
|
conn.last.should.equal(string);
|
|
};
|
|
|
|
beforeEach(function () {
|
|
Room.flush();
|
|
conn = createSocket();
|
|
socket = new Socket(conn, 'stream');
|
|
});
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// EVENTS
|
|
// ----------------------------------------------------------------------------
|
|
|
|
it('should register a listener for the "data" event on instantiation', function () {
|
|
conn.reply.should.have.type('function');
|
|
});
|
|
|
|
it('should expose some EventEmitter methods via on() and _emit()', function () {
|
|
var total = 0;
|
|
|
|
socket.on('event with a few arguments', function (a, b, c) {
|
|
a.should.equal('one');
|
|
b.should.equal('two');
|
|
c.should.equal('three');
|
|
total = arguments.length;
|
|
});
|
|
|
|
socket._emit('event with a few arguments', 'one', 'two', 'three');
|
|
|
|
total.should.equal(3);
|
|
should.strictEqual(conn.last, null);
|
|
});
|
|
|
|
it('should proxy native EventEmitter events', function () {
|
|
|
|
socket.on('newListener', function (event, fn) {
|
|
event.should.have.type('string');
|
|
fn.should.have.type('function');
|
|
});
|
|
|
|
socket.on('should trigger newListener', function () {});
|
|
socket.emit('newListener', 'randomEvent', function () {});
|
|
should.strictEqual(conn.last, null);
|
|
});
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// NAMESPACES
|
|
// ----------------------------------------------------------------------------
|
|
|
|
it('should create namespaces', function () {
|
|
var shoe = socket.namespace('shoe');
|
|
|
|
// Should re-use the same namespace
|
|
shoe.should.equal(socket.namespace('shoe'));
|
|
});
|
|
|
|
it('should prefix namespaced events', function () {
|
|
var shoe = socket.namespace('shoe');
|
|
|
|
shoe.emit('event', 'hello', 'world');
|
|
expect('shoe.event("hello","world")');
|
|
|
|
shoe.emit('no_args');
|
|
expect('shoe.no_args()');
|
|
});
|
|
|
|
it('should respond to namespaced events', function () {
|
|
var shoe = socket.namespace('shoe');
|
|
|
|
shoe.on('event', function (a, b) {
|
|
a.should.have.type('string');
|
|
b.should.have.type('string');
|
|
});
|
|
|
|
conn.reply('shoe.event("thats","odd")');
|
|
conn.reply('shoe.event("hello","world")');
|
|
});
|
|
|
|
it('should not mix events between namespaces', function () {
|
|
var shoe = socket.namespace('shoe');
|
|
var sandal = socket.namespace('sandal');
|
|
|
|
socket.on('event', function () {
|
|
type = 'socket';
|
|
});
|
|
|
|
shoe.on('event', function () {
|
|
type = 'shoe';
|
|
});
|
|
|
|
sandal.on('event', function () {
|
|
type = 'sandal';
|
|
});
|
|
|
|
var type = '';
|
|
conn.reply('event("test")');
|
|
type.should.equal('socket');
|
|
|
|
type = '';
|
|
conn.reply('shoe.event("test", "thing")');
|
|
type.should.equal('shoe');
|
|
|
|
type = '';
|
|
conn.reply('sandal.event(["test", "thing"],"hello")');
|
|
type.should.equal('sandal');
|
|
});
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// CALLBACKS
|
|
// ----------------------------------------------------------------------------
|
|
|
|
it('should convert functions into callback handlers', function () {
|
|
var fn = function () { };
|
|
|
|
socket.emit('event', fn);
|
|
expect('event().fn(0)');
|
|
|
|
socket.emit('event', fn);
|
|
expect('event().fn(1)');
|
|
});
|
|
|
|
it('should trigger callbacks', function () {
|
|
socket.on('event', function (callback) {
|
|
callback.should.have.type('function');
|
|
callback();
|
|
});
|
|
|
|
conn.reply('event().fn(20)');
|
|
expect('socket.fn_20()');
|
|
});
|
|
|
|
it('should trigger callback with arguments', function () {
|
|
socket.on('event', function (callback) {
|
|
callback('hello', 'world');
|
|
});
|
|
|
|
conn.reply('event().fn(10)');
|
|
expect('socket.fn_10("hello","world")');
|
|
});
|
|
|
|
it('should run callbacks', function (done) {
|
|
var fn = function (a, b) {
|
|
a.should.equal('some');
|
|
b.should.equal('arguments');
|
|
done();
|
|
};
|
|
|
|
socket.emit('event', fn);
|
|
conn.reply('socket.fn_0("some","arguments")');
|
|
});
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ROOMS
|
|
// ----------------------------------------------------------------------------
|
|
|
|
it('should join a room', function () {
|
|
socket.join('my_room');
|
|
socket.room('my_room').length().should.equal(1);
|
|
socket.rooms.should.eql(['all', 'my_room']);
|
|
});
|
|
|
|
it('should leave a room', function () {
|
|
socket.join('my_room');
|
|
socket.leave('my_room');
|
|
socket.room('my_room').length().should.equal(0);
|
|
socket.rooms.should.eql(['all']);
|
|
});
|
|
|
|
});
|
|
|