test-event.js 894 Bytes
'use strict'
var util = require('util')

module.exports = function (obj, event, next) {
  var timeout = setTimeout(gotTimeout, 10)
  obj.once(event, gotResult)

  function gotTimeout () {
    obj.removeListener(event, gotResult)
    next(new Error('Timeout listening for ' + event))
  }
  var result = []
  function gotResult () {
    result = Array.prototype.slice.call(arguments)
    clearTimeout(timeout)
    timeout = setTimeout(gotNoMoreResults, 10)
    obj.once(event, gotTooManyResults)
  }
  function gotNoMoreResults () {
    obj.removeListener(event, gotTooManyResults)
    var args = [null].concat(result)
    next.apply(null, args)
  }
  function gotTooManyResults () {
    var secondResult = Array.prototype.slice.call(arguments)
    clearTimeout(timeout)
    next(new Error('Got too many results, first ' + util.inspect(result) + ' and then ' + util.inspect(secondResult)))
  }
}