From 443d0baa814f6dae4e6f1fb7c5aec40676f04d4b Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Mon, 9 Jan 2017 14:41:47 +0100 Subject: [PATCH] [test] Increase code coverage --- test/WebSocket.test.js | 109 ++++++++++++++++++++++++----------- test/WebSocketServer.test.js | 17 +----- 2 files changed, 75 insertions(+), 51 deletions(-) diff --git a/test/WebSocket.test.js b/test/WebSocket.test.js index 318feed30..242fb294a 100644 --- a/test/WebSocket.test.js +++ b/test/WebSocket.test.js @@ -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 @@ -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 () { @@ -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 () { @@ -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}`); diff --git a/test/WebSocketServer.test.js b/test/WebSocketServer.test.js index 78c0d7768..cceb53f94 100644 --- a/test/WebSocketServer.test.js +++ b/test/WebSocketServer.test.js @@ -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}`); @@ -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 () {