exports["test start / stop ports"] = assert => { const input = new InputPort({ id: Date.now().toString(32), initial: {data:0} }); const topic = input.topic; assert.ok(topic.includes(addonID), "topics are namespaced to add-on"); const xs = lift(({data}) => "x:" + data, input); const ys = lift(({data}) => "y:" + data, input); assert.deepEqual(input.value, {data:0}, "initila value is set"); assert.deepEqual(xs.value, "x:0", "initial value is mapped"); assert.deepEqual(ys.value, "y:0", "initial value is mapped"); notifyObservers(message(1), topic, null); assert.deepEqual(input.value, {data:0}, "no message received on input port"); assert.deepEqual(xs.value, "x:0", "no message received on xs"); assert.deepEqual(ys.value, "y:0", "no message received on ys"); start(xs); notifyObservers(message(2), topic, null); assert.deepEqual(input.value, {data:2}, "message received on input port"); assert.deepEqual(xs.value, "x:2", "message received on xs"); assert.deepEqual(ys.value, "y:2", "no message received on (not started) ys"); notifyObservers(message(3), topic, null); assert.deepEqual(input.value, {data:3}, "message received on input port"); assert.deepEqual(xs.value, "x:3", "message received on xs"); assert.deepEqual(ys.value, "y:3", "message received on ys"); notifyObservers(message(4), topic, null); assert.deepEqual(input.value, {data:4}, "message received on input port"); assert.deepEqual(xs.value, "x:4", "message not received on (stopped) xs"); assert.deepEqual(ys.value, "y:4", "message received on ys"); stop(input); notifyObservers(message(5), topic, null); assert.deepEqual(input.value, {data:4}, "message note received on input port"); assert.deepEqual(xs.value, "x:4", "message not received on (stopped) xs"); assert.deepEqual(ys.value, "y:4", "message not received on (stopped) ys"); };
exports["test receive what was send"] = assert => { const id = Date.now().toString(32); const input = new InputPort({ id: id, initial: 0}); const output = new OutputPort({ id: id, sync: true }); assert.ok(input.topic.includes(addonID), "input topic is namespaced to addon"); assert.equal(input.topic, output.topic, "input & output get same topics from id."); start(input); assert.equal(input.value, 0, "initial value is set"); send(output, { data: 1 }); assert.deepEqual(input.value, {data: 1}, "message unwrapped"); send(output, []); assert.deepEqual(input.value, [], "array message unwrapped"); send(output, null); assert.deepEqual(input.value, null, "null message received"); send(output, new String("message")); assert.deepEqual(input.value, new String("message"), "string instance received"); send(output, /pattern/); assert.deepEqual(input.value, /pattern/, "regexp received"); assert.throws(() => send(output, "hi"), /Unsupproted message type: `string`/, "strings can't be send"); assert.throws(() => send(output, 4), /Unsupproted message type: `number`/, "numbers can't be send"); assert.throws(() => send(output, void(0)), /Unsupproted message type: `undefined`/, "undefineds can't be send"); assert.throws(() => send(output, true), /Unsupproted message type: `boolean`/, "booleans can't be send"); stop(input); };