UNPKG

rafa

Version:

Rafa.js is a Javascript framework for building concurrent applications.

70 lines (64 loc) 2.09 kB
module.exports = (assert, Rafa) => { suite("push", () => { test("sync - all nodes return a message", function(done) { var messages = { _: [] }; var handler = function(m) { messages[this.name] = m.value; messages._.push(this.name); return new Rafa.Message(m.value+this.name); }; createTree(handler).push( createContext(messages, 'abdfegch', done), new Rafa.Message('x') ); }); /* a * c b * h e d * g f */ test("async - all nodes return a thenable", function(done) { var messages = { _: [] }; var handler = function(m, c) { messages[this.name] = m.value; messages._.push(this.name); return new Rafa.Message(Promise.resolve(m.value+this.name)); }; createTree(handler).push( createContext(messages, 'abcdehfg', done), new Rafa.Message(Promise.resolve('x')) ); }); }); function createContext(messages, result, done) { return new Rafa.Context(() => { assert.equal(Object.keys(messages).length, 9); assert.equal(messages.a, 'x'); assert.equal(messages.b, 'xa'); assert.equal(messages.d, 'xab'); assert.equal(messages.f, 'xabd'); assert.equal(messages.e, 'xab'); assert.equal(messages.g, 'xabe'); assert.equal(messages.c, 'xa'); assert.equal(messages.h, 'xac'); assert.equal(messages._.join(''), result); done(); }); } function createTree(handler) { var a = createNamedStream('a', null, handler); var b = createNamedStream('b', a, handler); var c = createNamedStream('c', a, handler); var d = createNamedStream('d', b, handler); var e = createNamedStream('e', b, handler); var f = createNamedStream('f', d, handler); var g = createNamedStream('g', e, handler); var h = createNamedStream('h', c, handler); return a; } function createNamedStream(name, parent, handler) { var stream = new Rafa.Stream(parent, handler); stream.name = name; return stream; }; };