Update Iot.js
[platform/upstream/iotjs.git] / test / run_pass / test_events.js
1 /* Copyright 2015-present Samsung Electronics Co., Ltd. and other contributors
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 var EventEmitter = require('events').EventEmitter;
17 var assert = require('assert');
18
19
20 var emitter = new EventEmitter();
21
22 var eventCnt1 = 0;
23 var eventCnt2 = 0;
24 var eventCnt3 = 0;
25 var onceCnt = 0;
26 var eventSequence = "";
27
28 emitter.once('once', function() {
29   onceCnt += 1;
30 });
31
32
33 assert.equal(onceCnt, 0);
34 emitter.emit('once');
35 assert.equal(onceCnt, 1);
36 emitter.emit('once');
37 assert.equal(onceCnt, 1);
38
39
40 emitter.once('once2', function() {
41   onceCnt += 1;
42   assert.equal(arguments.length, 14);
43   assert.equal(arguments[0], 0);
44   assert.equal(arguments[1], 1);
45   assert.equal(arguments[2], 2);
46   assert.equal(arguments[3], 3);
47   assert.equal(arguments[4], 4);
48   assert.equal(arguments[5], 5);
49   assert.equal(arguments[6], 6);
50   assert.equal(arguments[7], 7);
51   assert.equal(arguments[8], 8);
52   assert.equal(arguments[9], 9);
53   assert.equal(arguments[10], "a");
54   assert.equal(arguments[11], "b");
55   assert.equal(arguments[12], "c");
56   assert.equal(arguments[13].a, 123);
57 });
58
59 assert.equal(onceCnt, 1);
60 emitter.emit('once2', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", { a: 123});
61 assert.equal(onceCnt, 2);
62 emitter.emit('once2', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", { a: 123});
63 assert.equal(onceCnt, 2);
64
65 emitter.addListener('event', function() {
66   eventCnt1 += 1;
67   eventSequence += "1";
68 });
69
70 assert.equal(eventCnt1, 0);
71 emitter.emit('event');
72 assert.equal(eventCnt1, 1);
73
74 emitter.addListener('event', function() {
75   eventCnt2 += 1;
76   eventSequence += "2";
77 });
78
79 assert.equal(eventCnt2, 0);
80 emitter.emit('event');
81 assert.equal(eventCnt1, 2);
82 assert.equal(eventCnt2, 1);
83
84 emitter.addListener('event', function() {
85   eventCnt3 += 1;
86   eventSequence += "3";
87 });
88
89 assert.equal(eventCnt3, 0);
90 emitter.emit('event');
91 assert.equal(eventCnt1, 3);
92 assert.equal(eventCnt2, 2);
93 assert.equal(eventCnt3, 1);
94 emitter.emit('event');
95 assert.equal(eventCnt1, 4);
96 assert.equal(eventCnt2, 3);
97 assert.equal(eventCnt3, 2);
98 emitter.emit('no receiver');
99 assert.equal(eventCnt1, 4);
100 assert.equal(eventCnt2, 3);
101 assert.equal(eventCnt3, 2);
102
103
104 emitter.addListener('args', function() {
105   assert.equal(arguments.length, 14);
106   assert.equal(arguments[0], 0);
107   assert.equal(arguments[1], 1);
108   assert.equal(arguments[2], 2);
109   assert.equal(arguments[3], 3);
110   assert.equal(arguments[4], 4);
111   assert.equal(arguments[5], 5);
112   assert.equal(arguments[6], 6);
113   assert.equal(arguments[7], 7);
114   assert.equal(arguments[8], 8);
115   assert.equal(arguments[9], 9);
116   assert.equal(arguments[10], "a");
117   assert.equal(arguments[11], "b");
118   assert.equal(arguments[12], "c");
119   assert.equal(arguments[13].a, 123);
120   eventSequence += "4";
121 });
122
123 emitter.addListener('args', function() {
124   assert.equal(arguments.length, 14);
125   eventSequence += "5";
126 })
127
128 emitter.emit('args', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", { a: 123});
129
130
131 var listener1 = function() {
132   eventSequence += '6';
133 };
134
135 emitter.addListener('rmTest', listener1);
136 emitter.emit('rmTest');
137 emitter.removeListener('rmTest', function() {});
138 emitter.emit('rmTest');
139 emitter.removeListener('rmTest', listener1);
140 emitter.emit('rmTest');
141
142
143 var listener2 = function() {
144   eventSequence += '7';
145 };
146
147 emitter.addListener('rmTest', listener2);
148 emitter.addListener('rmTest', listener2);
149 emitter.emit('rmTest');
150 eventSequence += "|"
151 emitter.removeListener('rmTest', listener2);
152 emitter.emit('rmTest');
153 eventSequence += "|"
154 emitter.removeListener('rmTest', listener2);
155 emitter.emit('rmTest');
156 eventSequence += "|"
157
158
159 var listener3 = function() {
160   eventSequence += '8';
161 };
162
163 emitter.addListener('rmTest', listener3);
164 emitter.addListener('rmTest', listener3);
165 emitter.emit('rmTest');
166 eventSequence += "|";
167 emitter.removeAllListeners('rmTest');
168 emitter.emit('rmTest');
169 eventSequence += "|";
170
171
172 emitter.emit('event');
173 eventSequence += "|";
174 emitter.removeAllListeners();
175 emitter.emit('event');
176 eventSequence += "|";
177
178
179 assert.equal(eventSequence, "112123123456677|7||88||123||");