listeners.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // Copyright Joyent, Inc. and other Node contributors.
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a
  4. // copy of this software and associated documentation files (the
  5. // "Software"), to deal in the Software without restriction, including
  6. // without limitation the rights to use, copy, modify, merge, publish,
  7. // distribute, sublicense, and/or sell copies of the Software, and to permit
  8. // persons to whom the Software is furnished to do so, subject to the
  9. // following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included
  12. // in all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  17. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  20. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  21. require('./common');
  22. var assert = require('assert');
  23. var events = require('../');
  24. var util = require('util');
  25. function listener() {}
  26. function listener2() {}
  27. function listener3() {
  28. return 0;
  29. }
  30. function listener4() {
  31. return 1;
  32. }
  33. function TestStream() {}
  34. util.inherits(TestStream, events.EventEmitter);
  35. {
  36. var ee = new events.EventEmitter();
  37. ee.on('foo', listener);
  38. var fooListeners = ee.listeners('foo');
  39. var listeners = ee.listeners('foo');
  40. assert.ok(Array.isArray(listeners));
  41. assert.strictEqual(listeners.length, 1);
  42. assert.strictEqual(listeners[0], listener);
  43. ee.removeAllListeners('foo');
  44. listeners = ee.listeners('foo');
  45. assert.ok(Array.isArray(listeners));
  46. assert.strictEqual(listeners.length, 0);
  47. assert.ok(Array.isArray(fooListeners));
  48. assert.strictEqual(fooListeners.length, 1);
  49. assert.strictEqual(fooListeners[0], listener);
  50. }
  51. {
  52. var ee = new events.EventEmitter();
  53. ee.on('foo', listener);
  54. var eeListenersCopy = ee.listeners('foo');
  55. assert.ok(Array.isArray(eeListenersCopy));
  56. assert.strictEqual(eeListenersCopy.length, 1);
  57. assert.strictEqual(eeListenersCopy[0], listener);
  58. var listeners = ee.listeners('foo');
  59. assert.ok(Array.isArray(listeners));
  60. assert.strictEqual(listeners.length, 1);
  61. assert.strictEqual(listeners[0], listener);
  62. eeListenersCopy.push(listener2);
  63. listeners = ee.listeners('foo');
  64. assert.ok(Array.isArray(listeners));
  65. assert.strictEqual(listeners.length, 1);
  66. assert.strictEqual(listeners[0], listener);
  67. assert.strictEqual(eeListenersCopy.length, 2);
  68. assert.strictEqual(eeListenersCopy[0], listener);
  69. assert.strictEqual(eeListenersCopy[1], listener2);
  70. }
  71. {
  72. var ee = new events.EventEmitter();
  73. ee.on('foo', listener);
  74. var eeListenersCopy = ee.listeners('foo');
  75. ee.on('foo', listener2);
  76. var listeners = ee.listeners('foo');
  77. assert.ok(Array.isArray(listeners));
  78. assert.strictEqual(listeners.length, 2);
  79. assert.strictEqual(listeners[0], listener);
  80. assert.strictEqual(listeners[1], listener2);
  81. assert.ok(Array.isArray(eeListenersCopy));
  82. assert.strictEqual(eeListenersCopy.length, 1);
  83. assert.strictEqual(eeListenersCopy[0], listener);
  84. }
  85. {
  86. var ee = new events.EventEmitter();
  87. ee.once('foo', listener);
  88. var listeners = ee.listeners('foo');
  89. assert.ok(Array.isArray(listeners));
  90. assert.strictEqual(listeners.length, 1);
  91. assert.strictEqual(listeners[0], listener);
  92. }
  93. {
  94. var ee = new events.EventEmitter();
  95. ee.on('foo', listener);
  96. ee.once('foo', listener2);
  97. var listeners = ee.listeners('foo');
  98. assert.ok(Array.isArray(listeners));
  99. assert.strictEqual(listeners.length, 2);
  100. assert.strictEqual(listeners[0], listener);
  101. assert.strictEqual(listeners[1], listener2);
  102. }
  103. {
  104. var ee = new events.EventEmitter();
  105. ee._events = undefined;
  106. var listeners = ee.listeners('foo');
  107. assert.ok(Array.isArray(listeners));
  108. assert.strictEqual(listeners.length, 0);
  109. }
  110. {
  111. var s = new TestStream();
  112. var listeners = s.listeners('foo');
  113. assert.ok(Array.isArray(listeners));
  114. assert.strictEqual(listeners.length, 0);
  115. }
  116. {
  117. var ee = new events.EventEmitter();
  118. ee.on('foo', listener);
  119. var wrappedListener = ee.rawListeners('foo');
  120. assert.strictEqual(wrappedListener.length, 1);
  121. assert.strictEqual(wrappedListener[0], listener);
  122. assert.notStrictEqual(wrappedListener, ee.rawListeners('foo'));
  123. ee.once('foo', listener);
  124. var wrappedListeners = ee.rawListeners('foo');
  125. assert.strictEqual(wrappedListeners.length, 2);
  126. assert.strictEqual(wrappedListeners[0], listener);
  127. assert.notStrictEqual(wrappedListeners[1], listener);
  128. assert.strictEqual(wrappedListeners[1].listener, listener);
  129. assert.notStrictEqual(wrappedListeners, ee.rawListeners('foo'));
  130. ee.emit('foo');
  131. assert.strictEqual(wrappedListeners.length, 2);
  132. assert.strictEqual(wrappedListeners[1].listener, listener);
  133. }
  134. {
  135. var ee = new events.EventEmitter();
  136. ee.once('foo', listener3);
  137. ee.on('foo', listener4);
  138. var rawListeners = ee.rawListeners('foo');
  139. assert.strictEqual(rawListeners.length, 2);
  140. assert.strictEqual(rawListeners[0](), 0);
  141. var rawListener = ee.rawListeners('foo');
  142. assert.strictEqual(rawListener.length, 1);
  143. assert.strictEqual(rawListener[0](), 1);
  144. }