test.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. var test = require('tape')
  2. var createEmitter = require('./index')
  3. test('create an event listener', function (t) {
  4. var emitter = createEmitter()
  5. emitter.on('example', function () {})
  6. t.ok(emitter._fns, 'emitter should have a `_fns` object')
  7. t.ok(emitter._fns['example'], 'emitter `_fns` object should have an `example` property')
  8. t.end()
  9. })
  10. test('emit to an event listener', function (t) {
  11. var emitter = createEmitter()
  12. emitter.on('example', function (data) {
  13. t.ok(data.example)
  14. t.end()
  15. })
  16. emitter.emit('example', { example: true })
  17. })
  18. test('emit to an event listener with a namespace', function (t) {
  19. var emitter = createEmitter()
  20. emitter.on('test', function (data) {
  21. t.ok(data.example)
  22. t.end()
  23. })
  24. emitter.emit('test:example', { example: true })
  25. })
  26. test('remove all listeners of an event', function (t) {
  27. var emitter = createEmitter()
  28. var count = 0
  29. emitter.on('example', function (data) {
  30. t.ok(data.example)
  31. count++
  32. })
  33. emitter.on('example', function (data) {
  34. t.ok(data.example)
  35. count++
  36. })
  37. emitter.emit('example', { example: true })
  38. emitter.off('example')
  39. emitter.emit('example', { example: true })
  40. t.equal(count, 2)
  41. t.end()
  42. })
  43. test('remove when no listeners are registered', function (t) {
  44. var emitter = createEmitter()
  45. t.doesNotThrow(function () {
  46. emitter.off('example', function () {})
  47. })
  48. t.end()
  49. })
  50. test('listen to all events', function (t) {
  51. var emitter = createEmitter()
  52. var count = 0
  53. emitter.on('*', function () {
  54. count++
  55. if (count === 3) {
  56. t.end()
  57. }
  58. })
  59. emitter.emit('example')
  60. emitter.emit('test')
  61. emitter.emit('ok')
  62. })
  63. test('listen to an event only once', function (t) {
  64. var emitter = createEmitter()
  65. var count = 0
  66. emitter.once('example', function () {
  67. count++
  68. })
  69. emitter.emit('example')
  70. emitter.emit('example')
  71. t.equal(count, 1)
  72. t.end()
  73. })
  74. test('passes all arguments to event listener', function (t) {
  75. var emitter = createEmitter()
  76. emitter.on('example', function (a, b, c, d, e, f) {
  77. t.ok(a)
  78. t.ok(b)
  79. t.ok(c)
  80. t.ok(d)
  81. t.ok(e)
  82. t.ok(f)
  83. })
  84. emitter.emit('example', 1, 2, 3, 4, 5, 6)
  85. t.end()
  86. })
  87. test('unsubscribe event listeners', function (t) {
  88. var emitter = createEmitter()
  89. function fn () { t.fail('should not be called') }
  90. emitter.on('example', fn)
  91. function fn2 () { t.fail('should not be called') }
  92. emitter.on('example', fn2)
  93. emitter.off('example')
  94. t.end()
  95. })
  96. test('unsubscribe single event handler', function (t) {
  97. var emitter = createEmitter()
  98. emitter.on('example', function () {})
  99. function fn () { t.fail('should not be called') }
  100. emitter.on('example', fn)
  101. emitter.off('example', fn)
  102. t.end()
  103. })
  104. test('unsubscribe event handler that has been subscribed twice', function (t) {
  105. var emitter = createEmitter()
  106. function fn () { t.fail('should not be called') }
  107. emitter.on('example', fn)
  108. emitter.on('example', fn)
  109. emitter.off('example')
  110. t.end()
  111. })
  112. test('unsubscribe one event handler, but keep others', function (t) {
  113. t.plan(1)
  114. var emitter = createEmitter()
  115. function fn () { t.fail('should not be called') }
  116. function fn2 () { t.pass('should be called') }
  117. emitter.on('example', fn)
  118. emitter.on('example', fn2)
  119. emitter.off('example', fn)
  120. emitter.emit('example')
  121. t.end()
  122. })
  123. test('emit event when unsubscribed in event callback', function (t) {
  124. var emitter = createEmitter()
  125. emitter.on('example', function () {
  126. emitter.off('example')
  127. t.ok('emitted once')
  128. })
  129. emitter.off('example')
  130. t.end()
  131. })
  132. test('callback is required for on method', function (t) {
  133. var emitter = createEmitter()
  134. try {
  135. emitter.on('example')
  136. } catch (e) {
  137. t.ok(e)
  138. }
  139. t.end()
  140. })
  141. test('handler only called once if namespaced', function (t) {
  142. var emitter = createEmitter()
  143. var count = 0
  144. emitter.on('example:first', function (data) {
  145. t.ok(data.example)
  146. count++
  147. })
  148. emitter.emit('example:first', { example: true })
  149. t.equal(count, 1)
  150. t.end()
  151. })
  152. test('both namespaces and wildcard listeners are called', function (t) {
  153. var emitter = createEmitter()
  154. var count = 0
  155. emitter.on('*', function (data) {
  156. t.ok(data.example)
  157. count++
  158. })
  159. emitter.on('example', function (data) {
  160. t.ok(this.event)
  161. t.ok(data.example)
  162. count++
  163. })
  164. emitter.emit('example:first', { example: true })
  165. t.equal(count, 2)
  166. t.end()
  167. })