open-epsilon
Version:
empty-epsilon / open-sound-control bidirectional proxy
110 lines • 4.13 kB
JavaScript
;
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