2017-01-20 23:00:17 -06:00

81 lines
1.4 KiB
JavaScript

import test from 'ava';
import { WorkerPortal } from './lib';
function FakeWorkerPair() {
let cbA = null;
let cbB = null;
const objA = {
postMessage: data => {
cbB({ data: data });
},
addEventListener: (eventName, fn) => {
cbA = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbA = null;
}
};
const objB = {
postMessage: data => {
cbA({ data: data });
},
addEventListener: (eventName, fn) => {
cbB = (...r) => {
fn(...r);
};
},
removeEventListener: (eventName, fn) => {
cbB = null;
}
};
return [objA, objB];
}
test('Workers can call and respond equally', async t => {
const [a, b] = FakeWorkerPair();
const slave = WorkerPortal(
{
slaveAdd: (a, b) => a + b
},
a,
true
);
const master = WorkerPortal(
{
masterSubtract: (a, b) => a - b
},
b,
false
);
const masterApi = await master;
const slaveApi = await slave;
t.deepEqual(Object.keys(masterApi), ['__init', '__cleanupSlave', 'slaveAdd', '_cleanup']);
t.deepEqual(Object.keys(slaveApi), ['masterSubtract']);
t.is(await slaveApi.masterSubtract(9, 2), 7);
t.is(await masterApi.slaveAdd(9, 2), 11);
t.is(await masterApi.slaveAdd(5, 2), 7);
t.is(await slaveApi.masterSubtract(2, 2), 0);
await masterApi._cleanup();
return masterApi
.slaveAdd(9, 2)
.then(e => {
t.fail('Expected rejection');
})
.catch(e => {
t.is(e.message, 'Portal disabled');
});
});