lepu-test-platform-web/node_modules/events/tests/events-once.js

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)
});