rafa
Version:
Rafa.js is a Javascript framework for building concurrent applications.
71 lines (67 loc) • 2.58 kB
JavaScript
module.exports = (assert, Rafa) => {
suite("group", () => {
test("structure", () => {
var stream = Rafa.stream();
var parts = stream.group();
assert.isNotNull(parts._);
assert.isNotNull(parts._.destroy);
});
test("categories", () => {
var stream = Rafa.stream();
var parts = stream.group('a', 'b');
var values = { 'a': [], 'b': [], '_': [] };
parts.a.each(v => values.a.push(v));
parts.b.each(v => values.b.push(v));
parts._.each(v => values._.push(v));
stream.push(Rafa.context(), Rafa.message('a'));
stream.push(Rafa.context(), Rafa.message('b'));
stream.push(Rafa.context(), Rafa.message('c'));
stream.push(Rafa.context(), Rafa.message('a'));
stream.push(Rafa.context(), Rafa.message('b'));
stream.push(Rafa.context(), Rafa.message('d'));
assert.equal(values.a.length, 2);
assert.equal(values.b.length, 2);
assert.equal(values._.length, 2);
assert.equal(values.a[0], 'a');
assert.equal(values.a[1], 'a');
assert.equal(values.b[0], 'b');
assert.equal(values.b[1], 'b');
assert.equal(values._[0], 'c');
assert.equal(values._[1], 'd');
});
test("starts with", () => {
var stream = Rafa.stream();
var values = { 'a': [], 'b': [], '_': [] };
var parts = stream.group('a', 'b', v => v[0]);
parts.a.each(v => values.a.push(v));
parts.b.each(v => values.b.push(v));
parts._.each(v => values._.push(v));
stream.push(Rafa.context(), Rafa.message('amazing'));
stream.push(Rafa.context(), Rafa.message('balloon'));
stream.push(Rafa.context(), Rafa.message('time'));
stream.push(Rafa.context(), Rafa.message('awesome'));
stream.push(Rafa.context(), Rafa.message('battle'));
stream.push(Rafa.context(), Rafa.message('drunk'));
assert.equal(values.a.length, 2);
assert.equal(values.b.length, 2);
assert.equal(values._.length, 2);
assert.equal(values.a[0], 'amazing');
assert.equal(values.a[1], 'awesome');
assert.equal(values.b[0], 'balloon');
assert.equal(values.b[1], 'battle');
assert.equal(values._[0], 'time');
assert.equal(values._[1], 'drunk');
});
test("detach", () => {
var stream = Rafa.stream();
var parts = stream.group();
var _ = parts._;
var called = 0;
parts._.each(v => called++);
parts._.detach();
stream.push(Rafa.context(), Rafa.message(1));
assert.isNull(parts._);
assert.equal(called, 0);
});
});
};