disposable-cls
Version:
Provides disposable continuation local storage for Node.js.
84 lines (83 loc) • 4.18 kB
JavaScript
;
var events_1 = require("events");
var chai_1 = require("chai");
var index_1 = require("../src/index");
var MockObjects_1 = require("./MockObjects");
describe("Event Emitters", function () {
describe("in single scope block", function () {
it("should have access to the current context items", function (done) {
var emitter = new events_1.EventEmitter();
index_1.using([new MockObjects_1.SimpleMockObject()], function () {
index_1.bindEventEmitter(emitter);
emitter.on("event", function () {
chai_1.expect(index_1.getCurrentObject(MockObjects_1.SimpleMockObject)).to.not.be.undefined;
done();
});
});
setImmediate(function () { emitter.emit("event"); });
});
it("should have access to the emitted arguments", function (done) {
var emitter = new events_1.EventEmitter();
index_1.using([new MockObjects_1.SimpleMockObject()], function () {
index_1.bindEventEmitter(emitter);
emitter.on("event", function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
chai_1.expect(args).to.have.length(2);
chai_1.expect(args[0]).to.be.equal(10);
chai_1.expect(args[1]).to.be.equal("Hello");
done();
});
});
setImmediate(function () { emitter.emit("event", 10, "Hello"); });
});
it("should not allow the captured context items to be disposed of when listener is active", function (done) {
var wasDisposed = false;
var doneFlag = false;
var expectationsOnCompleteFunc = function () {
if (doneFlag) {
// Expect the wasDisposed flag to remain false because even though the using block will
// have completed, the bound EventEmitter will still receive emitted events
chai_1.expect(wasDisposed).to.be.false;
return done();
}
setImmediate(expectationsOnCompleteFunc);
};
var emitter = new events_1.EventEmitter();
index_1.using([new MockObjects_1.SimpleDisposableMockObject(function () { wasDisposed = true; })], function () {
index_1.bindEventEmitter(emitter);
emitter.on("event", function () {
chai_1.expect(wasDisposed).to.be.false;
doneFlag = true;
});
});
setImmediate(expectationsOnCompleteFunc);
setImmediate(function () { emitter.emit("event"); });
});
it("should dipose of the context items when the last listener is removed", function (done) {
var wasDisposed = false;
var doneFlag = false;
var emitter = new events_1.EventEmitter();
var listener = function () { doneFlag = true; };
var expectationsOnCompleteFunc = function () {
if (doneFlag) {
chai_1.expect(wasDisposed).to.be.false;
emitter.removeListener("event", listener);
// Expect the wasDisposed flag to become true because the event listener has now been removed
// from the EventEmitter
chai_1.expect(wasDisposed).to.be.true;
return done();
}
setImmediate(expectationsOnCompleteFunc);
};
index_1.using([new MockObjects_1.SimpleDisposableMockObject(function () { wasDisposed = true; })], function () {
index_1.bindEventEmitter(emitter);
emitter.on("event", listener);
});
setImmediate(expectationsOnCompleteFunc);
setImmediate(function () { emitter.emit("event"); });
});
});
});