diff --git a/test/websocket.test.js b/test/websocket.test.js index e87cef392..f67e6716b 100644 --- a/test/websocket.test.js +++ b/test/websocket.test.js @@ -1809,6 +1809,22 @@ describe('WebSocket', () => { assert.strictEqual(ws.listeners('bar').length, 0); }); + it('allows to add one time listeners with `addEventListener`', (done) => { + const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() }); + + ws.addEventListener( + 'foo', + () => { + assert.strictEqual(ws.listenerCount('foo'), 0); + done(); + }, + { once: true } + ); + + assert.strictEqual(ws.listenerCount('foo'), 1); + ws.emit('foo'); + }); + it('supports the `removeEventListener` method', () => { const ws = new WebSocket('ws://localhost', { agent: new CustomAgent() }); @@ -1831,6 +1847,22 @@ describe('WebSocket', () => { assert.strictEqual(ws.listenerCount('message'), 0); assert.strictEqual(ws.listenerCount('open'), 0); assert.strictEqual(ws.listenerCount('foo'), 0); + + ws.addEventListener('message', NOOP, { once: true }); + ws.addEventListener('open', NOOP, { once: true }); + ws.addEventListener('foo', NOOP, { once: true }); + + ws.removeEventListener('message', () => {}); + + assert.strictEqual(ws.listeners('message')[0]._listener, NOOP); + + ws.removeEventListener('message', NOOP); + ws.removeEventListener('open', NOOP); + ws.removeEventListener('foo', NOOP); + + assert.strictEqual(ws.listenerCount('message'), 0); + assert.strictEqual(ws.listenerCount('open'), 0); + assert.strictEqual(ws.listenerCount('foo'), 0); }); it('wraps text data in a `MessageEvent`', (done) => {