From 5837888fca9b3bca33712c9db6662eaaccf1a733 Mon Sep 17 00:00:00 2001 From: Ryan Castner Date: Thu, 9 Apr 2020 08:51:09 -0400 Subject: [PATCH] Update failing WebChannel tests, 6 RFB tests still failing --- tests/fake.websocket.js | 16 +++++++++++++++- tests/test.websock.js | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/tests/fake.websocket.js b/tests/fake.websocket.js index 68ab3f84..5194685b 100644 --- a/tests/fake.websocket.js +++ b/tests/fake.websocket.js @@ -1,7 +1,7 @@ import Base64 from '../core/base64.js'; // PhantomJS can't create Event objects directly, so we need to use this -function make_event(name, props) { +export function make_event(name, props) { const evt = document.createEvent('Event'); evt.initEvent(name, true, true); if (props) { @@ -30,6 +30,7 @@ export default class FakeWebSocket { this.bufferedAmount = 0; this.__is_fake = true; + this.__listeners = []; } close(code, reason) { @@ -49,6 +50,19 @@ export default class FakeWebSocket { this.bufferedAmount += data.length; } + addEventListener(type, listener, options) { + this.__listeners.push({type, handler: listener, options}); + } + + dispatchEvent(evt) { + for (let i = 0; i < this.__listeners.length; i++) { + let listener = this.__listeners[i]; + if (evt.type === listener.type) { + listener.handler(evt); + } + } + } + _get_sent_data() { const res = new Uint8Array(this._send_queue.buffer, 0, this.bufferedAmount); this.bufferedAmount = 0; diff --git a/tests/test.websock.js b/tests/test.websock.js index 2b49d74e..41041e97 100644 --- a/tests/test.websock.js +++ b/tests/test.websock.js @@ -1,7 +1,7 @@ const expect = chai.expect; import WebChannel from '../core/websock.js'; -import FakeWebSocket from './fake.websocket.js'; +import FakeWebSocket, { make_event } from './fake.websocket.js'; describe('WebChannel', function () { "use strict"; @@ -259,6 +259,19 @@ describe('WebChannel', function () { WebSocket.CONNECTING = old_WS.CONNECTING; WebSocket.CLOSING = old_WS.CLOSING; WebSocket.CLOSED = old_WS.CLOSED; + WebSocket.__listeners = []; + WebSocket.prototype.addEventListener = (type, listener, options) => { + WebSocket.__listeners.push({type, handler: listener, options}); + }; + + WebSocket.prototype.dispatchEvent = (evt) => { + for (let i = 0; i < WebSocket.__listeners.length; i++) { + let listener = WebSocket.__listeners[i]; + if (evt.type === listener.type) { + listener.handler(evt); + } + } + }; WebSocket.prototype.binaryType = 'arraybuffer'; }); @@ -338,7 +351,7 @@ describe('WebChannel', function () { }); it('should call the close event handler on closing', function () { - sock._rawChannel.onclose(); + sock._rawChannel.dispatchEvent(make_event('close')); expect(sock._eventHandlers.close).to.have.been.calledOnce; });