UNPKG

disposable-cls

Version:

Provides disposable continuation local storage for Node.js.

84 lines (83 loc) 4.18 kB
"use strict"; 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"); }); }); }); });