Skip to content

Commit fd1018b

Browse files
committed
Merge pull request #1 from rase-/add/zuul
Added zuul config and made testing work on browsers
2 parents 5efe005 + 4e8db59 commit fd1018b

12 files changed

+253
-118
lines changed

.travis.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ language: node_js
22
node_js:
33
- 0.6
44
- 0.8
5+
- 0.10
56

67
notifications:
7-
irc: "irc.freenode.org#socket.io"
8+
irc: "irc.freenode.org##socket.io"
9+
env:
10+
global:
11+
- secure: v76/Y3hGIGsANoFAW0US3X8cuDFY7g8stMFrwGUxiQnm4HN3j83w+FfoZay0mESKhNIpqk4nCJQwMCd1gJnLL7ybjGOt5LeEuQVlLDXkRVrXSViy2XwAW+mLj7H/++/LTHWo/Ma6pOa1YC2o4SbSsiK1NdhdAK5ZGluonPBIG18=
12+
- secure: P2zFTMeI9duoPBXhAZZLddqeJS+dUI27Q02tTdr+AjvUkr8f7Zga57SZxP6Jbn8bxUPI3ZQzAm1KMsyUo4IAegXLJ4j9VCF6ab65NkE1k8UH99kXXS30Ha27NS1aQafCbaOTxxQfqQHmnjt2HJtvk04nqCEDhoZCdDUZNVSGCOc=

.zuul.yml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
ui: mocha-bdd
2+
browsers:
3+
- name: chrome
4+
version: 29..latest
5+
- name: firefox
6+
version: latest
7+
- name: safari
8+
version: latest
9+
- name: ie
10+
version: 10
11+
platform: Windows 2012
12+
- name: ie
13+
version: 9
14+
version: [6..9, latest]
15+
- name: iphone
16+
version: oldest..latest

Makefile

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ REPORTER = dot
44
test:
55
@./node_modules/.bin/mocha \
66
--reporter $(REPORTER) \
7-
--bail
7+
--bail \
8+
test/index.js
9+
@./node_modules/.bin/zuul -- test/index.js
810

911
.PHONY: test

package.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@
1919
},
2020
"devDependencies": {
2121
"mocha": "1.16.2",
22-
"expect.js": "0.2.0"
22+
"expect.js": "0.2.0",
23+
"zuul": "1.5.4"
2324
},
2425
"component": {
2526
"scripts": [
2627
"index.js"
2728
]
29+
},
30+
"scripts": {
31+
"test": "make test"
2832
}
2933
}

test/arraybuffer.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
var parser = require('../index.js');
2+
var expect = require('expect.js');
3+
var helpers = require('./helpers.js');
4+
var encode = parser.encode;
5+
var decode = parser.decode;
6+
7+
describe('parser', function() {
8+
it('encodes an ArrayBuffer', function() {
9+
var packet = {
10+
type: parser.BINARY_EVENT,
11+
data: new ArrayBuffer(2),
12+
id: 0,
13+
nsp: '/'
14+
};
15+
parser.encode(packet, function(encodedData) {
16+
var decodedPacket = parser.decode(encodedData);
17+
helpers.testPacketMetadata(packet, decodedPacket);
18+
helpers.testArrayBuffers(packet.data, decodedPacket.data);
19+
});
20+
});
21+
22+
it('encodes an ArrayBuffer deep in JSON', function() {
23+
var packet = {
24+
type: parser.BINARY_EVENT,
25+
data: {a: 'hi', b: {why: new ArrayBuffer(3)}, c:'bye'},
26+
id: 999,
27+
nsp: '/deep'
28+
};
29+
parser.encode(packet, function(encodedData) {
30+
var decodedPacket = parser.decode(encodedData);
31+
helpers.testPacketMetadata(packet, decodedPacket);
32+
expect(packet.data.a).to.eql(decodedPacket.data.a);
33+
expect(packet.data.c).to.eql(decodedPacket.data.c);
34+
helpers.testArrayBuffers(packet.data.b.why, decodedPacket.data.b.why);
35+
});
36+
});
37+
});

test/blob.js

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
var parser = require('../index.js');
2+
var expect = require('expect.js');
3+
var helpers = require('./helpers.js');
4+
var encode = parser.encode;
5+
var decode = parser.decode;
6+
7+
var BlobBuilder = global.BlobBuilder || global.WebKitBlobBuilder || global.MSBlobBuilder || global.MozBlobBuilder;
8+
9+
describe('parser', function() {
10+
it('encodes a Blob', function() {
11+
var data;
12+
if (BlobBuilder) {
13+
var bb = new BlobBuilder();
14+
bb.append(new ArrayBuffer(2));
15+
data = bb.getBlob();
16+
} else {
17+
data = new Blob([new ArrayBuffer(2)]);
18+
}
19+
var packet = {
20+
type: parser.BINARY_EVENT,
21+
data: data,
22+
id: 0,
23+
nsp: '/'
24+
};
25+
parser.encode(packet, function(encodedData) {
26+
var decodedPacket = parser.decode(encodedData);
27+
helpers.testPacketMetadata(packet, decodedPacket);
28+
helpers.testArrayBuffers(packet.data, decodedPacket.data);
29+
});
30+
});
31+
32+
it('encodes an Blob deep in JSON', function() {
33+
var data;
34+
if (BlobBuilder) {
35+
var bb = new BlobBuilder();
36+
bb.append(new ArrayBuffer(2));
37+
data = bb.getBlob();
38+
} else {
39+
data = new Blob([new ArrayBuffer(2)]);
40+
}
41+
42+
var packet = {
43+
type: parser.BINARY_EVENT,
44+
data: {a: 'hi', b: { why: data }, c:'bye'},
45+
id: 999,
46+
nsp: '/deep'
47+
};
48+
parser.encode(packet, function(encodedData) {
49+
var decodedPacket = parser.decode(encodedData);
50+
helpers.testPacketMetadata(packet, decodedPacket);
51+
expect(packet.data.a).to.eql(decodedPacket.data.a);
52+
expect(packet.data.c).to.eql(decodedPacket.data.c);
53+
helpers.testArrayBuffers(packet.data.b.why, decodedPacket.data.b.why);
54+
});
55+
});
56+
57+
});

test/buffer.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
var parser = require('../index.js');
2+
var expect = require('expect.js');
3+
var helpers = require('./helpers.js');
4+
var encode = parser.encode;
5+
var decode = parser.decode;
6+
7+
describe('parser', function() {
8+
it('encodes a Buffer', function() {
9+
helpers.test({
10+
type: parser.BINARY_EVENT,
11+
data: new Buffer('abc', 'utf8'),
12+
id: 23,
13+
nsp: '/cool'
14+
});
15+
});
16+
});

test/helpers.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var parser = require('../index.js');
2+
var expect = require('expect.js');
3+
var encode = parser.encode;
4+
var decode = parser.decode;
5+
6+
// tests encoding and decoding a packet
7+
module.exports.test = function(obj){
8+
encode(obj, function(encodedPacket) {
9+
expect(decode(encodedPacket)).to.eql(obj);
10+
});
11+
}
12+
13+
// array buffer's slice is native code that is not transported across
14+
// socket.io via msgpack, so regular .eql fails
15+
module.exports.testArrayBuffers = function(buf1, buf2) {
16+
buf1.slice = undefined;
17+
buf2.slice = undefined;
18+
expect(buf1).to.eql(buf2);
19+
}
20+
21+
module.exports.testPacketMetadata = function(p1, p2) {
22+
expect(p1.type).to.eql(p2.type);
23+
expect(p1.id).to.eql(p2.id);
24+
expect(p1.nsp).to.eql(p2.nsp);
25+
}

test/index.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var env = require('./support/env.js');
2+
3+
var blobSupported = (function() {
4+
try {
5+
new Blob(['hi']);
6+
return true;
7+
} catch(e) {}
8+
return false;
9+
})();
10+
11+
/**
12+
* Create a blob builder even when vendor prefixes exist
13+
*/
14+
15+
var BlobBuilder = global.BlobBuilder || global.WebKitBlobBuilder || global.MSBlobBuilder || global.MozBlobBuilder;
16+
var blobBuilderSupported = !!BlobBuilder && !!BlobBuilder.prototype.append && !!BlobBuilder.prototype.getBlob;
17+
18+
require('./parser.js');
19+
20+
if (!env.browser) {
21+
require('./buffer.js');
22+
}
23+
24+
if (global.ArrayBuffer) {
25+
require('./arraybuffer.js');
26+
}
27+
28+
if (blobSupported || blobBuilderSupported) {
29+
require('./blob.js');
30+
}

test/parser.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
var parser = require('../index.js');
2+
var expect = require('expect.js');
3+
var helpers = require('./helpers.js');
4+
var encode = parser.encode;
5+
var decode = parser.decode;
6+
7+
describe('parser', function(){
8+
9+
it('exposes types', function(){
10+
expect(parser.CONNECT).to.be.a('number');
11+
expect(parser.DISCONNECT).to.be.a('number');
12+
expect(parser.EVENT).to.be.a('number');
13+
expect(parser.ACK).to.be.a('number');
14+
expect(parser.ERROR).to.be.a('number');
15+
});
16+
17+
it('encodes connection', function(){
18+
helpers.test({
19+
type: parser.CONNECT,
20+
nsp: '/woot'
21+
});
22+
});
23+
24+
it('encodes disconnection', function(){
25+
helpers.test({
26+
type: parser.DISCONNECT,
27+
nsp: '/woot'
28+
});
29+
});
30+
31+
it('encodes an event', function(){
32+
helpers.test({
33+
type: parser.EVENT,
34+
data: ['a', 1, {}],
35+
nsp: '/'
36+
});
37+
helpers.test({
38+
type: parser.EVENT,
39+
data: ['a', 1, {}],
40+
id: 1,
41+
nsp: '/test'
42+
});
43+
});
44+
45+
it('encodes an ack', function(){
46+
helpers.test({
47+
type: parser.ACK,
48+
data: ['a', 1, {}],
49+
id: 123,
50+
nsp: '/'
51+
});
52+
});
53+
});

test/support/env.js

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

0 commit comments

Comments
 (0)