101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
var common = require('./common');
 | 
						|
var EventEmitter = require('../').EventEmitter;
 | 
						|
var once = require('../').once;
 | 
						|
var assert = require('assert');
 | 
						|
 | 
						|
function onceAnEvent() {
 | 
						|
  var ee = new EventEmitter();
 | 
						|
 | 
						|
  process.nextTick(function () {
 | 
						|
    ee.emit('myevent', 42);
 | 
						|
  });
 | 
						|
 | 
						|
  return once(ee, 'myevent').then(function (args) {
 | 
						|
    var value = args[0]
 | 
						|
    assert.strictEqual(value, 42);
 | 
						|
    assert.strictEqual(ee.listenerCount('error'), 0);
 | 
						|
    assert.strictEqual(ee.listenerCount('myevent'), 0);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function onceAnEventWithTwoArgs() {
 | 
						|
  var ee = new EventEmitter();
 | 
						|
 | 
						|
  process.nextTick(function () {
 | 
						|
    ee.emit('myevent', 42, 24);
 | 
						|
  });
 | 
						|
 | 
						|
  return once(ee, 'myevent').then(function (value) {
 | 
						|
    assert.strictEqual(value.length, 2);
 | 
						|
    assert.strictEqual(value[0], 42);
 | 
						|
    assert.strictEqual(value[1], 24);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function catchesErrors() {
 | 
						|
  var ee = new EventEmitter();
 | 
						|
 | 
						|
  var expected = new Error('kaboom');
 | 
						|
  var err;
 | 
						|
  process.nextTick(function () {
 | 
						|
    ee.emit('error', expected);
 | 
						|
  });
 | 
						|
 | 
						|
  return once(ee, 'myevent').then(function () {
 | 
						|
    throw new Error('should reject')
 | 
						|
  }, function (err) {
 | 
						|
    assert.strictEqual(err, expected);
 | 
						|
    assert.strictEqual(ee.listenerCount('error'), 0);
 | 
						|
    assert.strictEqual(ee.listenerCount('myevent'), 0);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function stopListeningAfterCatchingError() {
 | 
						|
  var ee = new EventEmitter();
 | 
						|
 | 
						|
  var expected = new Error('kaboom');
 | 
						|
  var err;
 | 
						|
  process.nextTick(function () {
 | 
						|
    ee.emit('error', expected);
 | 
						|
    ee.emit('myevent', 42, 24);
 | 
						|
  });
 | 
						|
 | 
						|
  // process.on('multipleResolves', common.mustNotCall());
 | 
						|
 | 
						|
  return once(ee, 'myevent').then(common.mustNotCall, function (err) {
 | 
						|
    // process.removeAllListeners('multipleResolves');
 | 
						|
    assert.strictEqual(err, expected);
 | 
						|
    assert.strictEqual(ee.listenerCount('error'), 0);
 | 
						|
    assert.strictEqual(ee.listenerCount('myevent'), 0);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function onceError() {
 | 
						|
  var ee = new EventEmitter();
 | 
						|
 | 
						|
  var expected = new Error('kaboom');
 | 
						|
  process.nextTick(function () {
 | 
						|
    ee.emit('error', expected);
 | 
						|
  });
 | 
						|
 | 
						|
  return once(ee, 'error').then(function (args) {
 | 
						|
    var err = args[0]
 | 
						|
    assert.strictEqual(err, expected);
 | 
						|
    assert.strictEqual(ee.listenerCount('error'), 0);
 | 
						|
    assert.strictEqual(ee.listenerCount('myevent'), 0);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
Promise.all([
 | 
						|
  onceAnEvent(),
 | 
						|
  onceAnEventWithTwoArgs(),
 | 
						|
  catchesErrors(),
 | 
						|
  stopListeningAfterCatchingError(),
 | 
						|
  onceError()
 | 
						|
]).catch(function (err) {
 | 
						|
  console.error(err.stack)
 | 
						|
  process.exit(1)
 | 
						|
});
 |