/* eslint-disable no-console, func-names */
'use strict';
var EventEmitter = require('events').EventEmitter;
var test = require('tape');
var bubbleError = require('./');
test('it should return the arguments as an array', function(t) {
var emitter1 = new EventEmitter();
var emitter2 = new EventEmitter();
var emitter3 = new EventEmitter();
var streams = [emitter1, emitter2, emitter3];
t.deepEqual(streams, bubbleError.apply(null, streams));
t.end();
});
test('it should bubble up the error to the last stream', function(t) {
var emitter1 = new EventEmitter();
var emitter2 = new EventEmitter();
var emitter3 = new EventEmitter();
var streams = [emitter1, emitter2, emitter3];
var err = new Error('test');
bubbleError.apply(null, streams);
emitter3.on('error', function(e) {
t.equal(e, err);
t.end();
});
emitter1.emit('error', err);
});
test('it should only emit an error event once', function(t) {
var emitter1 = new EventEmitter();
var emitter2 = new EventEmitter();
var emitter3 = new EventEmitter();
var streams = [emitter1, emitter2, emitter3];
var err = new Error('test');
bubbleError.apply(null, streams);
emitter3.on('error', function(e) {
t.equal(e, err);
t.end();
});
emitter1.emit('error', err);
emitter2.emit('error', err);
});
test('it should not bubble up other events', function(t) {
var emitter1 = new EventEmitter();
var emitter2 = new EventEmitter();
var emitter3 = new EventEmitter();
var streams = [emitter1, emitter2, emitter3];
bubbleError.apply(null, streams);
emitter2.on('data', function(d) {
t.equal(d, 'test');
});
emitter3.on('data', function() {
throw new Error('Unexpected data event');
});
emitter2.emit('data', 'test');
t.end();
});