NewsBlur/node/node_modules/socket.io-client/support/test-runner/app.js

313 lines
6.7 KiB
JavaScript
Raw Normal View History

2012-01-02 18:24:53 -08:00
/**
* Module dependencies.
*/
var express = require('express')
, stylus = require('stylus')
, sio = require('socket.io')
, path = require('path')
, fs = require('fs');
/**
* App.
*/
var app = express.createServer();
/**
* Initial port to listen to.
*/
var port = 3000;
/**
* Transport to test with.
*/
var args = process.argv.slice(2)
, transport = args.length ? args[0] : 'xhr-polling';
/**
* A map of tests to socket.io ports we're listening on.
*/
var testsPorts = {};
/**
* App configuration.
*/
app.configure(function () {
app.use(stylus.middleware({ src: __dirname + '/public' }))
app.use(express.static(__dirname + '/public'));
app.use('/test', express.static(__dirname + '/../../test'));
app.set('views', __dirname);
app.set('view engine', 'jade');
});
/**
* App routes.
*/
app.get('/', function (req, res) {
res.render('index', {
layout: false
, testsPorts: testsPorts
});
});
/**
* App listen.
*/
app.listen(port++, function () {
var addr = app.address();
console.error(' listening on http://' + addr.address + ':' + addr.port);
});
/**
* Override handler to simplify development
*/
function handler (req, res) {
fs.readFile(__dirname + '/../../dist/socket.io.js', 'utf8', function (err, b) {
if (err) {
res.writeHead(404);
res.end('Error');
return;
}
res.writeHead(200, { 'Content-Type': 'application/javascript' });
res.end(b);
});
};
/**
* Socket.IO default server (to serve client)
*/
var io = sio.listen(app);
io.configure(function () {
io.set('browser client handler', handler);
io.set('transports', [
transport
]);
});
/**
* Scopes servers for a given test suite.
*/
var currentSuite;
function suite (name, fn) {
currentSuite = testsPorts[name] = {};
fn();
};
/**
* Creates a socket io server
*/
function server (name, fn) {
currentSuite[name] = port;
var io = sio.listen(port);
io.configure(function () {
io.set('transports', [transport]);
});
fn(io);
port++;
};
/**
* Socket.IO servers.
*/
suite('socket.test.js', function () {
server('test connecting the socket and disconnecting', function (io) {
io.sockets.on('connection', function () {});
});
server('test receiving messages', function (io) {
io.sockets.on('connection', function (socket) {
var messages = 0;
var interval = setInterval(function () {
socket.send(++messages);
if (messages == 3) {
clearInterval(interval);
setTimeout(function () {
socket.disconnect();
}, 500);
}
}, 50);
});
});
server('test sending messages', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('message', function (msg) {
socket.send(msg);
});
});
});
server('test acks sent from client', function (io) {
io.sockets.on('connection', function (socket) {
socket.send('tobi', function () {
socket.send('tobi 2');
});
});
});
server('test acks sent from server', function (io) {
io.sockets.on('connection', function (socket) {});
});
server('test connecting to namespaces', function (io) {
io.of('/woot').on('connection', function (socket) {
socket.send('connected to woot');
});
io.of('/chat').on('connection', function (socket) {
socket.send('connected to chat');
});
});
server('test disconnecting from namespaces', function (io) {
io.of('/a').on('connection', function (socket) {});
io.of('/b').on('connection', function (socket) {});
});
server('test authorizing for namespaces', function (io) {
io.of('/a')
.authorization(function (data, fn) {
fn(null, false);
})
.on('connection', function (socket) {});
});
server('test sending json from server', function (io) {
io.sockets.on('connection', function (socket) {
io.sockets.json.send(3141592);
});
});
server('test sending json from client', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('message', function (arr) {
if (Array.isArray(arr) && arr.length == 3) {
socket.send('echo');
}
});
});
});
server('test emitting an event from server', function (io) {
io.sockets.on('connection', function (socket) {
socket.emit('woot');
});
});
server('test emitting multiple events at once to the server', function (io) {
io.sockets.on('connection', function (socket) {
var messages = [];
socket.on('print', function (msg) {
if (messages.indexOf(msg) >= 0) {
console.error('duplicate message');
}
messages.push(msg);
if (messages.length == 2) {
socket.emit('done');
}
});
});
});
server('test emitting an event to server', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('woot', function () {
socket.emit('echo');
});
});
});
server('test emitting an event from server and sending back data', function (io) {
io.sockets.on('connection', function (socket) {
socket.emit('woot', 1, function (a) {
if (a === 'test') {
socket.emit('done');
}
});
});
});
server('test emitting an event to server and sending back data', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('tobi', function (a, b, fn) {
if (a === 1 && b === 2) {
fn({ hello: 'world' });
}
});
});
});
server('test encoding a payload', function (io) {
io.of('/woot').on('connection', function (socket) {
var count = 0;
socket.on('message', function (a) {
if (a == 'ñ') {
if (++count == 4) {
socket.emit('done');
}
}
});
});
});
server('test sending query strings to the server', function (io) {
io.sockets.on('connection', function (socket) {
socket.json.send(socket.handshake);
})
});
server('test sending newline', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('message', function (msg) {
if (msg == '\n') {
socket.emit('done');
}
});
});
});
server('test sending unicode', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('message', function (msg) {
if (msg.test == "☃") {
socket.emit('done');
}
});
});
});
server('test webworker connection', function (io) {
io.sockets.on('connection', function (socket) {
socket.on('message', function (msg) {
if (msg == 'woot') {
socket.emit('done');
}
});
});
});
});