From 89caaf407120fea9f7eebe8b995d5dce179943c2 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 4 Jun 2018 12:38:05 +0200 Subject: [PATCH] Use `LoopbackPort` in the "message_handler" unit-tests There's no good reason, as far as I can tell, to duplicate the functionality of the `LoopbackPort` in the unit-tests. The only difference between the implementations is that `LoopbackPort` mimics the (native) structured cloning, however that shouldn't matter here since the tests are only sending "simple" data (strings respectively arrays with numbers). Furthermore the patch also changes `LoopbackPort` to default to using "structured cloning" and deferred invocation of the listeners, since native typed array support is now a requirement for using the PDF.js library. --- src/display/api.js | 2 +- test/unit/message_handler_spec.js | 45 ++++++------------------------- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index 4c23c7741..b121661f8 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -1205,7 +1205,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { })(); class LoopbackPort { - constructor(defer) { + constructor(defer = true) { this._listeners = []; this._defer = defer; this._deferred = Promise.resolve(undefined); diff --git a/test/unit/message_handler_spec.js b/test/unit/message_handler_spec.js index 9db31ac1f..72735300b 100644 --- a/test/unit/message_handler_spec.js +++ b/test/unit/message_handler_spec.js @@ -14,39 +14,10 @@ */ import { createPromiseCapability } from '../../src/shared/util'; +import { LoopbackPort } from '../../src/display/api'; import { MessageHandler } from '../../src/shared/message_handler'; describe('message_handler', function () { - // Temporary fake port for sending messages between main and worker. - class FakePort { - constructor() { - this._listeners = []; - this._deferred = Promise.resolve(undefined); - } - - postMessage(obj) { - let event = { data: obj, }; - this._deferred.then(() => { - this._listeners.forEach(function (listener) { - listener.call(this, event); - }, this); - }); - } - - addEventListener(name, listener) { - this._listeners.push(listener); - } - - removeEventListener(name, listener) { - let i = this._listeners.indexOf(listener); - this._listeners.splice(i, 1); - } - - terminate() { - this._listeners = []; - } - } - // Sleep function to wait for sometime, similar to setTimeout but faster. function sleep(ticks) { return Promise.resolve().then(() => { @@ -56,7 +27,7 @@ describe('message_handler', function () { describe('sendWithStream', function () { it('should return a ReadableStream', function () { - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler1 = new MessageHandler('main', 'worker', port); let readable = messageHandler1.sendWithStream('fakeHandler'); // Check if readable is an instance of ReadableStream. @@ -66,7 +37,7 @@ describe('message_handler', function () { it('should read using a reader', function (done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler1 = new MessageHandler('main', 'worker', port); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => { @@ -110,7 +81,7 @@ describe('message_handler', function () { it('should not read any data when cancelled', function (done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => { sink.onPull = function () { @@ -162,7 +133,7 @@ describe('message_handler', function () { it('should not read when errored', function(done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => { sink.onPull = function () { @@ -205,7 +176,7 @@ describe('message_handler', function () { it('should read data with blocking promise', function (done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => { sink.onPull = function () { @@ -266,7 +237,7 @@ describe('message_handler', function () { it('should read data with blocking promise and buffer whole data' + ' into stream', function (done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => { sink.onPull = function () { @@ -326,7 +297,7 @@ describe('message_handler', function () { it('should ignore any pull after close is called', function (done) { let log = ''; - let port = new FakePort(); + let port = new LoopbackPort(); let capability = createPromiseCapability(); let messageHandler2 = new MessageHandler('worker', 'main', port); messageHandler2.on('fakeHandler', (data, sink) => {