From afbdafdd0180db3bb46a28c79c728aab4591cdfc Mon Sep 17 00:00:00 2001 From: Anand Thakker Date: Thu, 11 Aug 2016 19:41:10 -0400 Subject: [PATCH] Unit test Dispatcher's use of WorkerPool --- js/util/dispatcher.js | 2 +- test/js/util/dispatcher.test.js | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/js/util/dispatcher.test.js diff --git a/js/util/dispatcher.js b/js/util/dispatcher.js index 51e9fa3b41f..1515734f26b 100644 --- a/js/util/dispatcher.js +++ b/js/util/dispatcher.js @@ -19,7 +19,7 @@ function Dispatcher(length, parent) { this.currentActor = 0; this.id = util.uniqueId(); var workers = Dispatcher.workerPool.acquire(this.id, length); - for (var i = 0; i < length; i++) { + for (var i = 0; i < workers.length; i++) { var worker = workers[i]; var actor = new Actor(worker, parent, this.id); actor.name = "Worker " + i; diff --git a/test/js/util/dispatcher.test.js b/test/js/util/dispatcher.test.js new file mode 100644 index 00000000000..5911061b1b9 --- /dev/null +++ b/test/js/util/dispatcher.test.js @@ -0,0 +1,39 @@ +'use strict'; + +var test = require('tap').test; +var Dispatcher = require('../../../js/util/dispatcher'); +var WebWorker = require('../../../js/util/web_worker'); +var originalWorkerPool = Dispatcher.workerPool; + +test('Dispatcher', function (t) { + t.test('requests and releases workers from pool', function (t) { + var dispatcher; + var workers = [new WebWorker(), new WebWorker()]; + + var releaseCalled = []; + Dispatcher.workerPool = { + acquire: function (id, count) { + t.equal(count, 2); + return workers; + }, + release: function (id) { + releaseCalled.push(id); + } + }; + + dispatcher = new Dispatcher(2, {}); + t.same(dispatcher.actors.map(function (actor) { return actor.target; }), workers); + dispatcher.remove(); + t.equal(dispatcher.actors.length, 0, 'actors discarded'); + t.same(releaseCalled, [dispatcher.id]); + t.end(); + }); + + t.end(); +}); + +test('after', function (t) { + Dispatcher.workerPool = originalWorkerPool; + t.end(); +}); +