UNPKG

4.21 kBJavaScriptView Raw
1var assert = require("chai").assert;
2var TraceUtils = require('../utils').TraceUtils;
3var LangUtils = require('../utils').LangUtils;
4var Q = require('q');
5var SequentialEventEmitter = require('../emitter').SequentialEventEmitter;
6describe("test sequential event emitter", function () {
7 /**
8 * @constructor
9 * @augments {EventEmitter}
10 */
11 function Messenger() {
12 Messenger.super_.bind(this)();
13 }
14 LangUtils.inherits(Messenger, SequentialEventEmitter);
15
16 Messenger.prototype.send = function(to, message) {
17 var self = this;
18 return Q.Promise(function (resolve, reject) {
19 self.emit("message.new", to, message, function (err) {
20 if (err) {
21 return reject(err);
22 }
23 self.emit("message.sent", function () {
24 return resolve();
25 });
26 });
27 });
28 };
29
30 it("should emit event", function () {
31 var msg = new Messenger();
32 msg.on("message.new", function (to, message, cb) {
33 TraceUtils.log("Message Event #1 (To:" + to + "): " + message);
34 setTimeout(function () {
35 return cb();
36 }, 1000);
37 });
38
39 msg.prependListener("message.new", function (to, message, cb) {
40 TraceUtils.log("Message Event #0 (To:" + to + "): " + message);
41 setTimeout(function () {
42 return cb();
43 }, 2000);
44 });
45
46 msg.on("message.new", function (to, message, cb) {
47 TraceUtils.log("Message Event #2 (To:" + to + "): " + message);
48 setTimeout(function () {
49 return cb();
50 }, 2000);
51 });
52 msg.once("message.sent", function (cb) {
53 TraceUtils.log("Message was succesfully sent");
54 setTimeout(function () {
55 return cb();
56 }, 2000);
57 });
58 return msg.send("George", "Hello!");
59 });
60
61 it("should add and remove listener", function () {
62 var msg = new Messenger();
63 msg.on("message.new", function (to, message, cb) {
64 TraceUtils.log("Message Event #1 (To:" + to + "): " + message);
65 setTimeout(function () {
66 return cb();
67 }, 1000);
68 });
69
70 msg.on("message.new", function (to, message, cb) {
71 TraceUtils.log("Message Event #2 (To:" + to + "): " + message);
72 setTimeout(function () {
73 return cb();
74 }, 2000);
75 });
76
77 var onMessageNew = function onMessageNew(to, message, cb) {
78 TraceUtils.log("Message Event #3 (To:" + to + "): " + message);
79 setTimeout(function () {
80 return cb();
81 }, 2000);
82 };
83
84 msg.on("message.new", onMessageNew);
85 msg.removeListener("message.new", onMessageNew);
86 assert.equal(msg.listenerCount("message.new"), 2, "Invalid number of event listeners");
87
88 msg.once("message.sent", function (cb) {
89 TraceUtils.log("Message was succesfully sent");
90 setTimeout(function () {
91 return cb();
92 }, 2000);
93 });
94
95 return msg.send("George", "Hello!");
96 });
97
98 it("should throw error on first emitter", function () {
99 var msg = new Messenger();
100
101 msg.on("message.new", function (to, message, cb) {
102 TraceUtils.log("Message Event #1 (To:" + to + "): " + message);
103 setTimeout(function () {
104 return cb(new Error("Operation cancelled"));
105 }, 1000);
106 });
107
108 msg.on("message.new", function (to, message, cb) {
109 TraceUtils.log("Message Event #2 (To:" + to + "): " + message);
110 setTimeout(function () {
111 return cb();
112 }, 2000);
113 });
114 assert.equal(msg.listenerCount("message.new"), 2, "Invalid number of event listeners");
115 msg.once("message.sent", function (cb) {
116 TraceUtils.log("Message was succesfully sent");
117 setTimeout(function () {
118 return cb();
119 }, 2000);
120 });
121 return msg.send("George", "Hello!");
122 });
123});
\No newline at end of file