rafa
Version:
Rafa.js is a Javascript framework for building concurrent applications.
84 lines (72 loc) • 2.37 kB
JavaScript
require("../../core.js")((assert, Rafa) => {
suite("Context", () => {
test("empty constructor", () => {
const context = Rafa.context();
assert.equal(context.pending, 0);
assert.equal(context.done, Rafa.noop);
});
test("constructor with done", () => {
const done = () => 1
const context = Rafa.context(done);
assert.equal(context.pending, 0);
assert.equal(context.done, done);
});
test("waitfor success", (done) => {
const stream = Rafa.stream();
const values = [];
stream.each(v => values.push(v));
stream.error(v => values.push(v+100));
const context = Rafa.context();
const future = Rafa.future();
context.waitfor(stream, Rafa.message(future.promise));
assert.equal(context.pending, 1);
future.resolve(1);
setTimeout(() => {
assert.equal(values.length, 1);
assert.equal(values[0], 1);
assert.equal(context.pending, 0);
done();
});
});
test("waitfor error", (done) => {
const stream = Rafa.stream();
const values = [];
const finish = () => values.push(2);
stream.each(v => values.push(v+100));
stream.error(v => values.push(v));
const context = Rafa.context();
const future = Rafa.future();
context.waitfor(stream, Rafa.message(future.promise));
assert.equal(context.pending, 1);
future.reject(1);
setTimeout(() => {
assert.equal(values.length, 1);
assert.equal(values[0], 1);
assert.equal(context.pending, 0);
done();
});
});
test("waitfor nested promise", (done) => {
const stream = Rafa.stream();
const values = [];
stream.each(v => values.push(v));
stream.error(v => values.push(v+100));
const context = Rafa.context();
const future = Rafa.future();
context.waitfor(stream, Rafa.message(future.promise));
assert.equal(context.pending, 1);
const future2 = Rafa.future();
future.resolve(future2.promise);
setTimeout(() => {
assert.equal(context.pending, 1);
future2.resolve(1);
setTimeout(() => {
assert.equal(values.length, 1);
assert.equal(values[0], 1);
assert.equal(context.pending, 0);
done();
});
});
});
});
});