Skip to content

Commit

Permalink
[test] Increase code coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
lpinca committed Jan 9, 2017
1 parent e3d5d48 commit 443d0ba
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 51 deletions.
109 changes: 74 additions & 35 deletions test/WebSocket.test.js
Expand Up @@ -420,6 +420,18 @@ describe('WebSocket', function () {
});

describe('#pause and #resume', function () {
it('throws an error when `readyState` is not `OPEN` (pause)', function () {
const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() });

assert.throws(() => ws.pause(), /^Error: not opened$/);
});

it('throws an error when `readyState` is not `OPEN` (resume)', function () {
const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() });

assert.throws(() => ws.resume(), /^Error: not opened$/);
});

it('pauses the underlying stream', function (done) {
// this test is sort-of racecondition'y, since an unlikely slow connection
// to localhost can cause the test to succeed even when the stream pausing
Expand Down Expand Up @@ -1067,35 +1079,30 @@ describe('WebSocket', function () {
});

describe('WHATWG API emulation', function () {
it('should not throw errors when getting and setting', function (done) {
server.createServer(++port, (srv) => {
const listener = () => {};
const ws = new WebSocket(`ws://localhost:${port}`);

assert.strictEqual(ws.onmessage, undefined);
assert.strictEqual(ws.onclose, undefined);
assert.strictEqual(ws.onerror, undefined);
assert.strictEqual(ws.onopen, undefined);
it('should not throw errors when getting and setting', function () {
const listener = () => {};
const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() });

ws.onmessage = listener;
ws.onerror = listener;
ws.onclose = listener;
ws.onopen = listener;
assert.strictEqual(ws.onmessage, undefined);
assert.strictEqual(ws.onclose, undefined);
assert.strictEqual(ws.onerror, undefined);
assert.strictEqual(ws.onopen, undefined);

assert.strictEqual(ws.binaryType, 'nodebuffer');
ws.binaryType = 'arraybuffer';
assert.strictEqual(ws.binaryType, 'arraybuffer');
ws.binaryType = 'nodebuffer';
assert.strictEqual(ws.binaryType, 'nodebuffer');
ws.onmessage = listener;
ws.onerror = listener;
ws.onclose = listener;
ws.onopen = listener;

assert.strictEqual(ws.onmessage, listener);
assert.strictEqual(ws.onclose, listener);
assert.strictEqual(ws.onerror, listener);
assert.strictEqual(ws.onopen, listener);
assert.strictEqual(ws.binaryType, 'nodebuffer');
ws.binaryType = 'arraybuffer';
assert.strictEqual(ws.binaryType, 'arraybuffer');
ws.binaryType = 'nodebuffer';
assert.strictEqual(ws.binaryType, 'nodebuffer');

srv.close(done);
ws.terminate();
});
assert.strictEqual(ws.onmessage, listener);
assert.strictEqual(ws.onclose, listener);
assert.strictEqual(ws.onerror, listener);
assert.strictEqual(ws.onopen, listener);
});

it('should throw an error when setting an invalid binary type', function () {
Expand Down Expand Up @@ -1134,17 +1141,36 @@ describe('WebSocket', function () {
});
});

it('should receive text data wrapped in a MessageEvent when using addEventListener', function (done) {
server.createServer(++port, (srv) => {
const ws = new WebSocket(`ws://localhost:${port}`);
it('doesn\'t return event listeners added with `on`', function () {
const listener = () => {};
const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() });

ws.addEventListener('open', () => ws.send('hi'));
ws.addEventListener('message', (messageEvent) => {
assert.strictEqual(messageEvent.data, 'hi');
srv.close(done);
ws.terminate();
});
});
ws.on('open', listener);

assert.deepStrictEqual(ws.listeners('open'), [listener]);
assert.strictEqual(ws.onopen, undefined);
});

it('doesn\'t remove event listeners added with `on`', function () {
const listener = () => {};
const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() });

ws.on('close', listener);
ws.onclose = listener;

let listeners = ws.listeners('close');

assert.strictEqual(listeners.length, 2);
assert.strictEqual(listeners[0], listener);
assert.strictEqual(listeners[1]._listener, listener);

ws.onclose = listener;

listeners = ws.listeners('close');

assert.strictEqual(listeners.length, 2);
assert.strictEqual(listeners[0], listener);
assert.strictEqual(listeners[1]._listener, listener);
});

it('registers listeners for custom events with addEventListener', function () {
Expand Down Expand Up @@ -1186,6 +1212,19 @@ describe('WebSocket', function () {
assert.strictEqual(ws.listeners('foo').length, 0);
});

it('should receive text data wrapped in a MessageEvent when using addEventListener', function (done) {
server.createServer(++port, (srv) => {
const ws = new WebSocket(`ws://localhost:${port}`);

ws.addEventListener('open', () => ws.send('hi'));
ws.addEventListener('message', (messageEvent) => {
assert.strictEqual(messageEvent.data, 'hi');
srv.close(done);
ws.terminate();
});
});
});

it('should receive valid CloseEvent when server closes with code 1000', function (done) {
const wss = new WebSocketServer({ port: ++port }, () => {
const ws = new WebSocket(`ws://localhost:${port}`);
Expand Down
17 changes: 1 addition & 16 deletions test/WebSocketServer.test.js
Expand Up @@ -238,7 +238,7 @@ describe('WebSocketServer', function () {
});
});

it('is updated when client closes the connection (1/2)', function (done) {
it('is updated when client closes the connection', function (done) {
const wss = new WebSocketServer({ port: ++port }, () => {
const ws = new WebSocket(`ws://localhost:${port}`);

Expand All @@ -253,21 +253,6 @@ describe('WebSocketServer', function () {
});
});
});

it('is updated when client closes the connection (2/2)', function (done) {
const wss = new WebSocketServer({ port: ++port }, () => {
const ws = new WebSocket(`ws://localhost:${port}`);

ws.onopen = () => ws.close();
});

wss.on('connection', (ws) => {
ws.onclose = () => {
assert.strictEqual(wss.clients.size, 0);
wss.close(done);
};
});
});
});

describe('#options', function () {
Expand Down

0 comments on commit 443d0ba

Please sign in to comment.