elistener
Version:
listenTo/stopListening to an EventEmitter for easy cleanup
118 lines (94 loc) • 2.19 kB
JavaScript
var EventEmitter = require('events').EventEmitter
var test = require('tape')
var toElistener = require('../')
test('basic listen/stopListening', function (t) {
var e = new EventEmitter()
var listener = {}
var event = 'hello'
var eventArg = 'world'
var shouldHear
toElistener(listener)
function attach () {
listener.listenTo(e, event, helloHandler)
}
function helloHandler (data) {
t.equal(shouldHear, true)
t.equal(data, eventArg)
}
attach()
shouldHear = true
e.emit(event, eventArg)
listener.stopListening(e, event, helloHandler)
shouldHear = false
e.emit(event, eventArg)
attach()
shouldHear = true
e.emit(event, eventArg)
listener.stopListening(e, event)
shouldHear = false
e.emit(event, eventArg)
attach()
shouldHear = true
e.emit(event, eventArg)
listener.stopListening(e)
shouldHear = false
e.emit(event, eventArg)
listener.listenOnce(e, event, helloHandler)
shouldHear = true
e.emit(event, eventArg)
shouldHear = false
e.emit(event, eventArg)
t.end()
})
test('multi stopListening', function (t) {
var e = new EventEmitter()
var listener = {}
var shouldHear
var count = 0
toElistener(listener)
function handler (data) {
t.equal(shouldHear, true)
count++
}
listener.listenTo(e, 'yo', handler)
shouldHear = true
e.emit('yo')
t.equal(count, 1)
listener.listenTo(e, 'yo', handler)
e.emit('yo')
t.equal(count, 3)
listener.stopListening(e, 'yo')
shouldHear = false
e.emit('yo')
t.equal(count, 3)
listener.listenTo(e, 'yo', handler)
listener.listenTo(e, 'ho', handler)
listener.stopListening(e)
shouldHear = false
e.emit('yo')
e.emit('ho')
t.equal(count, 3)
t.end()
})
test('prototype', function (t) {
var e = new EventEmitter()
var id = 0
var Listener = function () { this.id = id++ }
var event = 'hello'
toElistener(Listener.prototype)
var a = new Listener()
var b = new Listener()
var count = 0
a.listenTo(e, event, function () {
count++
})
b.listenTo(e, event, function () {
count++
})
e.emit(event)
t.equal(count, 2)
a.stopListening()
e.emit(event)
t.equal(count, 3)
t.end()
})