rafa
Version:
Rafa.js is a Javascript framework for building concurrent applications.
70 lines (64 loc) • 2.09 kB
JavaScript
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;
};
};