rafa
Version:
Rafa.js is a Javascript framework for building concurrent applications.
65 lines (60 loc) • 2.07 kB
JavaScript
module.exports = (assert, Rafa) => {
suite("merge", () => {
test("structure", () => {
var stream1 = Rafa.stream();
var stream2 = Rafa.stream();
var stream3 = Rafa.stream();
var merged = stream1.merge(stream2, stream3);
assert.isNotNull(stream1.child);
assert.isNotNull(stream2.child);
assert.isNotNull(stream3.child);
assert.isNull(merged.parent);
assert.equal(stream1.child.handler, stream2.child.handler);
assert.equal(stream1.child.handler, stream3.child.handler);
});
test("values", () => {
var stream1 = Rafa.stream();
var stream2 = Rafa.stream();
var merged = stream1.merge(stream2);
var values = [];
merged.each(v => values.push(v));
stream1.enumerate(Rafa.Enumerator.array([1]));
stream2.enumerate(Rafa.Enumerator.array([2]));
assert.equal(values.length, 2);
assert.equal(values[0], 1);
assert.equal(values[1], 2);
});
test("errors", () => {
var stream1 = Rafa.stream();
var stream2 = Rafa.stream();
var merged = stream1.merge(stream2);
var values = [];
merged.error(v => values.push(v));
stream1.push(Rafa.context(), Rafa.errorMessage(1));
stream2.push(Rafa.context(), Rafa.errorMessage(2));
assert.equal(values.length, 2);
assert.equal(values[0], 1);
assert.equal(values[1], 2);
});
test("done", () => {
var stream1 = Rafa.stream();
var stream2 = Rafa.stream();
var merged = stream1.merge(stream2);
var dones = 0;
merged.done(v => dones++);
stream1.push(Rafa.context(), Rafa.doneMessage());
stream2.push(Rafa.context(), Rafa.doneMessage());
assert.equal(dones, 1);
});
test("detach", () => {
var stream1 = Rafa.stream();
var stream2 = Rafa.stream();
var merged = stream1.merge(stream2);
var proxy1 = stream1.child;
var proxy2 = stream2.child;
merged.detach();
assert.isNull(stream1.child);
assert.isNull(stream2.child);
});
});
};