UNPKG

open-epsilon

Version:

empty-epsilon / open-sound-control bidirectional proxy

110 lines 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const src_1 = require("../src"); const sinon_1 = require("sinon"); const empty_epsilon_js_1 = require("empty-epsilon-js"); const Subject_1 = require("rxjs/Subject"); const chai_1 = require("chai"); describe(`OpenEpsilon service`, () => { const schema = { "global": { "getFoo": { "arguments": [], "type": ["Foo"] } }, "Foo": { "getBar": { "arguments": [], "type": ["float"] }, "setBar": { "arguments": ["float"], "type": [] }, } }; const interval = 10; const namespace = 'test'; const address = `/${namespace}/foo/bar`; const value = 1.23; const oscMessage = { address, args: [{ type: "f", value }] }; let server; let eeDriver; let oscDriver; beforeEach(`init`, () => { eeDriver = { query: sinon_1.stub(), command: sinon_1.spy(), }; oscDriver = { inbox: new Subject_1.Subject(), outbox: new Subject_1.Subject(), }; server = new src_1.OpenEpsilon(eeDriver, oscDriver, schema, namespace); server.init(interval); }); afterEach(() => { server.destroy(); }); function resetPolling(...addresses) { server.monitoredAddresses = addresses; resetEeQuery(); } function resetEeQuery() { eeDriver.query.reset(); eeDriver.query.resolves([value]); } function grace() { return new Promise(res => setTimeout(res, interval * 2)); } function waitfor(promiseProvider) { return empty_epsilon_js_1.retry(promiseProvider, { interval: interval / 2, timeout: interval * 2 }); } it(`continously polls state and sends to osc`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const sent = sinon_1.spy(); oscDriver.outbox.subscribe(sent); // trigger the polling resetPolling(address); let i = 5; while (i--) { yield waitfor(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () { chai_1.expect(eeDriver.query).to.have.been.calledWith('getFoo():getBar()', 1); chai_1.expect(sent).to.have.been.calledWith(oscMessage); })); resetEeQuery(); } })); describe(`stops polling state`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { beforeEach(`init`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { // trigger the polling resetPolling(address); // allow time for at least one poll yield grace(); })); it(`when addresses array is empty`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { resetPolling(); resetEeQuery(); yield grace(); yield waitfor(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () { chai_1.expect(eeDriver.query).to.have.not.been.called; })); })); it(`after destroyed`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { server.destroy(); resetEeQuery(); yield grace(); yield waitfor(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () { chai_1.expect(eeDriver.query).to.have.not.been.called; })); })); })); it(`sends commands to game server`, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { oscDriver.inbox.next(oscMessage); // await grace(); chai_1.expect(eeDriver.command).to.have.callCount(1); chai_1.expect(eeDriver.command).to.have.been.calledWith('getFoo():setBar({0})', [value.toString()]); })); }); //# sourceMappingURL=service.spec.js.map