Added zuul config and made testing work on browsers

This commit is contained in:
Tony Kovanen
2014-02-20 12:18:21 +02:00
parent 5efe005679
commit 42cc5d2cff
11 changed files with 174 additions and 118 deletions

View File

@@ -2,6 +2,11 @@ language: node_js
node_js:
- 0.6
- 0.8
- 0.10
notifications:
irc: "irc.freenode.org#socket.io"
irc: "irc.freenode.org##socket.io"
env:
global:
- secure: v76/Y3hGIGsANoFAW0US3X8cuDFY7g8stMFrwGUxiQnm4HN3j83w+FfoZay0mESKhNIpqk4nCJQwMCd1gJnLL7ybjGOt5LeEuQVlLDXkRVrXSViy2XwAW+mLj7H/++/LTHWo/Ma6pOa1YC2o4SbSsiK1NdhdAK5ZGluonPBIG18=
- secure: P2zFTMeI9duoPBXhAZZLddqeJS+dUI27Q02tTdr+AjvUkr8f7Zga57SZxP6Jbn8bxUPI3ZQzAm1KMsyUo4IAegXLJ4j9VCF6ab65NkE1k8UH99kXXS30Ha27NS1aQafCbaOTxxQfqQHmnjt2HJtvk04nqCEDhoZCdDUZNVSGCOc=

16
.zuul.yml Normal file
View File

@@ -0,0 +1,16 @@
ui: mocha-bdd
browsers:
- name: chrome
version: 29..latest
- name: firefox
version: latest
- name: safari
version: latest
- name: ie
version: 10
platform: Windows 2012
- name: ie
version: 9
version: [6..9, latest]
- name: iphone
version: oldest..latest

View File

@@ -4,6 +4,8 @@ REPORTER = dot
test:
@./node_modules/.bin/mocha \
--reporter $(REPORTER) \
--bail
--bail \
test/index.js
@./node_modules/.bin/zuul -- test/index.js
.PHONY: test

View File

@@ -19,7 +19,8 @@
},
"devDependencies": {
"mocha": "1.16.2",
"expect.js": "0.2.0"
"expect.js": "0.2.0",
"zuul": "1.5.4"
},
"component": {
"scripts": [

37
test/arraybuffer.js Normal file
View File

@@ -0,0 +1,37 @@
var parser = require('../index.js');
var expect = require('expect.js');
var helpers = require('./helpers.js');
var encode = parser.encode;
var decode = parser.decode;
describe('parser', function() {
it('encodes an ArrayBuffer', function() {
var packet = {
type: parser.BINARY_EVENT,
data: new ArrayBuffer(2),
id: 0,
nsp: '/'
};
parser.encode(packet, function(encodedData) {
var decodedPacket = parser.decode(encodedData);
helpers.testPacketMetadata(packet, decodedPacket);
helpers.testArrayBuffers(packet.data, decodedPacket.data);
});
});
it('encodes an ArrayBuffer deep in JSON', function() {
var packet = {
type: parser.BINARY_EVENT,
data: {a: 'hi', b: {why: new ArrayBuffer(3)}, c:'bye'},
id: 999,
nsp: '/deep'
};
parser.encode(packet, function(encodedData) {
var decodedPacket = parser.decode(encodedData);
helpers.testPacketMetadata(packet, decodedPacket);
expect(packet.data.a).to.eql(decodedPacket.data.a);
expect(packet.data.c).to.eql(decodedPacket.data.c);
helpers.testArrayBuffers(packet.data.b.why, decodedPacket.data.b.why);
});
});
});

16
test/buffer.js Normal file
View File

@@ -0,0 +1,16 @@
var parser = require('../index.js');
var expect = require('expect.js');
var helpers = require('./helpers.js');
var encode = parser.encode;
var decode = parser.decode;
describe('parser', function() {
it('encodes a Buffer', function() {
helpers.test({
type: parser.BINARY_EVENT,
data: new Buffer('abc', 'utf8'),
id: 23,
nsp: '/cool'
});
});
});

25
test/helpers.js Normal file
View File

@@ -0,0 +1,25 @@
var parser = require('../index.js');
var expect = require('expect.js');
var encode = parser.encode;
var decode = parser.decode;
// tests encoding and decoding a packet
module.exports.test = function(obj){
encode(obj, function(encodedPacket) {
expect(decode(encodedPacket)).to.eql(obj);
});
}
// array buffer's slice is native code that is not transported across
// socket.io via msgpack, so regular .eql fails
module.exports.testArrayBuffers = function(buf1, buf2) {
buf1.slice = undefined;
buf2.slice = undefined;
expect(buf1).to.eql(buf2);
}
module.exports.testPacketMetadata = function(p1, p2) {
expect(p1.type).to.eql(p2.type);
expect(p1.id).to.eql(p2.id);
expect(p1.nsp).to.eql(p2.nsp);
}

11
test/index.js Normal file
View File

@@ -0,0 +1,11 @@
var env = require('./support/env.js');
require('./parser.js');
if (!env.browser) {
require('./buffer.js');
}
if (global.ArrayBuffer) {
require('./arraybuffer.js');
}

53
test/parser.js Normal file
View File

@@ -0,0 +1,53 @@
var parser = require('../index.js');
var expect = require('expect.js');
var helpers = require('./helpers.js');
var encode = parser.encode;
var decode = parser.decode;
describe('parser', function(){
it('exposes types', function(){
expect(parser.CONNECT).to.be.a('number');
expect(parser.DISCONNECT).to.be.a('number');
expect(parser.EVENT).to.be.a('number');
expect(parser.ACK).to.be.a('number');
expect(parser.ERROR).to.be.a('number');
});
it('encodes connection', function(){
helpers.test({
type: parser.CONNECT,
nsp: '/woot'
});
});
it('encodes disconnection', function(){
helpers.test({
type: parser.DISCONNECT,
nsp: '/woot'
});
});
it('encodes an event', function(){
helpers.test({
type: parser.EVENT,
data: ['a', 1, {}],
nsp: '/'
});
helpers.test({
type: parser.EVENT,
data: ['a', 1, {}],
id: 1,
nsp: '/test'
});
});
it('encodes an ack', function(){
helpers.test({
type: parser.ACK,
data: ['a', 1, {}],
id: 123,
nsp: '/'
});
});
});

5
test/support/env.js Normal file
View File

@@ -0,0 +1,5 @@
// WARNING this is bad practice
// we only do this in our tests because we need to test engine.io-client
// support in browsers and in node.js
// some tests do not yet work in both
module.exports.browser = !!global.window;

View File

@@ -1,115 +0,0 @@
var parser = require('..');
var expect = require('expect.js');
var encode = parser.encode;
var decode = parser.decode;
// tests encoding and decoding a packet
function test(obj){
encode(obj, function(encodedPacket) {
expect(decode(encodedPacket)).to.eql(obj);
});
}
// array buffer's slice is native code that is not transported across
// socket.io via msgpack, so regular .eql fails
function testArrayBuffers(buf1, buf2) {
buf1.slice = undefined;
buf2.slice = undefined;
expect(buf1).to.eql(buf2);
}
function testPacketMetadata(p1, p2) {
expect(p1.type).to.eql(p2.type);
expect(p1.id).to.eql(p2.id);
expect(p1.nsp).to.eql(p2.nsp);
}
describe('parser', function(){
it('exposes types', function(){
expect(parser.CONNECT).to.be.a('number');
expect(parser.DISCONNECT).to.be.a('number');
expect(parser.EVENT).to.be.a('number');
expect(parser.ACK).to.be.a('number');
expect(parser.ERROR).to.be.a('number');
});
it('encodes connection', function(){
test({
type: parser.CONNECT,
nsp: '/woot'
});
});
it('encodes disconnection', function(){
test({
type: parser.DISCONNECT,
nsp: '/woot'
});
});
it('encodes an event', function(){
test({
type: parser.EVENT,
data: ['a', 1, {}],
nsp: '/'
});
test({
type: parser.EVENT,
data: ['a', 1, {}],
id: 1,
nsp: '/test'
});
});
it('encodes an ack', function(){
test({
type: parser.ACK,
data: ['a', 1, {}],
id: 123,
nsp: '/'
});
});
it('encodes a Buffer', function() {
test({
type: parser.BINARY_EVENT,
data: new Buffer('abc', 'utf8'),
id: 23,
nsp: '/cool'
});
});
it('encodes an ArrayBuffer', function() {
var packet = {
type: parser.BINARY_EVENT,
data: new ArrayBuffer(2),
id: 0,
nsp: '/'
};
parser.encode(packet, function(encodedData) {
var decodedPacket = parser.decode(encodedData);
testPacketMetadata(packet, decodedPacket);
testArrayBuffers(packet.data, decodedPacket.data);
});
});
it('encodes an ArrayBuffer deep in JSON', function() {
var packet = {
type: parser.BINARY_EVENT,
data: {a: 'hi', b: {why: new ArrayBuffer(3)}, c:'bye'},
id: 999,
nsp: '/deep'
};
parser.encode(packet, function(encodedData) {
var decodedPacket = parser.decode(encodedData);
testPacketMetadata(packet, decodedPacket);
expect(packet.data.a).to.eql(decodedPacket.data.a);
expect(packet.data.c).to.eql(decodedPacket.data.c);
testArrayBuffers(packet.data.b.why, decodedPacket.data.b.why);
});
});
});