Skip to content

Commit 00a2e63

Browse files
committed
fix: Provide correct return value from source.emit()
Thanks to @rbrtribeiro for the fix! This rebases the work from #8 with minor modifications, and tests the return values directly (rather than adding a wide-bracket integration test). Close #8 Close #9
1 parent 8639a87 commit 00a2e63

File tree

2 files changed

+50
-45
lines changed

2 files changed

+50
-45
lines changed

index.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@ function propagate(events, source, dest) {
1515

1616
var oldEmit = source.emit
1717

18-
source.emit = function(eventType) {
19-
oldEmit.apply(source, arguments)
18+
// Returns true if the event had listeners, false otherwise.
19+
// https://nodejs.org/api/events.html#events_emitter_emit_eventname_args
20+
source.emit = (eventName, ...args) => {
21+
let oldHandled = oldEmit.call(source, eventName, ...args)
2022

21-
if (!events || ~events.indexOf(eventType)) {
22-
dest.emit.apply(dest, arguments)
23+
let destHandled = false
24+
if (events === undefined || !~events.indexOf(eventType)) {
25+
destHandled = dest.emit.call(dest, eventName, ...args)
2326
}
27+
28+
return oldHandled || destHandled
2429
}
2530

2631
function end() {

tests/index.js

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,64 @@ var test = require('tap').test
22
var EventEmitter = require('events').EventEmitter
33
var propagate = require('..')
44

5-
test('propagates events', function(t) {
6-
t.plan(12)
5+
test('propagates events', t => {
6+
t.plan(16)
77
var ee1 = new EventEmitter()
88
var ee2 = new EventEmitter()
99
propagate(ee1, ee2)
1010

11-
ee2.on('event-1', function(a, b, c) {
11+
ee2.on('event-1', (a, b, c) => {
1212
t.equal(a, 'a')
1313
t.equal(b, 'b')
1414
t.equal(c, undefined)
1515
})
1616

17-
ee2.on('event-2', function(a, b, c) {
17+
ee2.on('event-2', (a, b, c) => {
1818
t.equal(a, 'c')
1919
t.equal(b, 'd')
2020
t.equal(c, undefined)
2121
})
2222

23-
ee1.emit('event-1', 'a', 'b')
24-
ee1.emit('event-1', 'a', 'b')
25-
ee1.emit('event-2', 'c', 'd')
26-
ee1.emit('event-2', 'c', 'd')
23+
t.true(ee1.emit('event-1', 'a', 'b'))
24+
t.true(ee1.emit('event-1', 'a', 'b'))
25+
t.true(ee1.emit('event-2', 'c', 'd'))
26+
t.true(ee1.emit('event-2', 'c', 'd'))
2727
})
2828

29-
test('propagates can end', function(t) {
30-
t.plan(1)
29+
test('propagates can end', t => {
30+
t.plan(3)
3131

3232
var ee1 = new EventEmitter()
3333
var ee2 = new EventEmitter()
3434
var prop = propagate(ee1, ee2)
3535

36-
ee2.on('event', function() {
36+
ee2.on('event', () => {
3737
t.ok('true', 'propagated')
3838
})
3939

40-
ee1.emit('event')
40+
t.true(ee1.emit('event'))
4141
prop.end()
42-
ee1.emit('event')
42+
t.false(ee1.emit('event'))
4343
})
4444

45-
test('after propagation old one still emits', function(t) {
46-
t.plan(2)
45+
test('after propagation old one still emits', t => {
46+
t.plan(4)
4747

4848
var ee1 = new EventEmitter()
4949
var ee2 = new EventEmitter()
5050
var prop = propagate(ee1, ee2)
5151

52-
ee1.on('event', function() {
52+
ee1.on('event', () => {
5353
t.ok('true', 'propagated')
5454
})
5555

56-
ee1.emit('event')
56+
t.true(ee1.emit('event'))
5757
prop.end()
58-
ee1.emit('event')
58+
t.true(ee1.emit('event'))
5959
})
6060

61-
test('emit on source before destination', function(t) {
62-
t.plan(1)
61+
test('emit on source before destination', t => {
62+
t.plan(2)
6363

6464
var source = new EventEmitter()
6565
var dest = new EventEmitter()
@@ -68,47 +68,47 @@ test('emit on source before destination', function(t) {
6868
// `count` should have been incremented by handler on source when handler on dest is invoked
6969
var count = 0
7070
propagate(source, dest)
71-
source.on('event', function() {
71+
source.on('event', () => {
7272
count++
7373
})
74-
dest.on('event', function() {
74+
dest.on('event', () => {
7575
t.equal(count, 1, 'emit on source first')
7676
})
7777

7878
// Emit the events for assertion
79-
source.emit('event')
79+
t.true(source.emit('event'))
8080
})
8181

82-
test('is able to propagate only certain events', function(t) {
83-
t.plan(2)
82+
test('is able to propagate only certain events', t => {
83+
t.plan(6)
8484
var ee1 = new EventEmitter()
8585
var ee2 = new EventEmitter()
8686
// propagate only event-1 and event-2, leaving out
8787
var p = propagate(['event-1', 'event-2'], ee1, ee2)
8888

89-
ee2.on('event-1', function() {
89+
ee2.on('event-1', () => {
9090
t.ok(true, 'event 1 received')
9191
})
9292

93-
ee2.on('event-2', function(a, b, c) {
93+
ee2.on('event-2', (a, b, c) => {
9494
t.ok(true, 'event 2 received')
9595
})
9696

97-
ee2.on('event-3', function(a, b, c) {
97+
ee2.on('event-3', (a, b, c) => {
9898
t.ok(false, 'event 3 should not have been received')
9999
})
100100

101-
ee1.emit('event-1')
102-
ee1.emit('event-2')
103-
ee1.emit('event-3')
101+
t.true(ee1.emit('event-1'))
102+
t.true(ee1.emit('event-2'))
103+
t.false(ee1.emit('event-3'))
104104

105105
p.end()
106106

107-
ee1.emit('event-1')
107+
t.false(ee1.emit('event-1'))
108108
})
109109

110-
test('is able to propagate and map certain events', function(t) {
111-
t.plan(2)
110+
test('is able to propagate and map certain events', t => {
111+
t.plan(6)
112112
var ee1 = new EventEmitter()
113113
var ee2 = new EventEmitter()
114114
// propagate only event-1 and event-2, leaving out
@@ -121,23 +121,23 @@ test('is able to propagate and map certain events', function(t) {
121121
ee2
122122
)
123123

124-
ee2.on('other-event-1', function() {
124+
ee2.on('other-event-1', () => {
125125
t.ok(true, 'event 1 received')
126126
})
127127

128-
ee2.on('other-event-2', function(a, b, c) {
128+
ee2.on('other-event-2', (a, b, c) => {
129129
t.ok(true, 'event 2 received')
130130
})
131131

132-
ee2.on('event-3', function(a, b, c) {
132+
ee2.on('event-3', (a, b, c) => {
133133
t.ok(false, 'event 3 should not have been received')
134134
})
135135

136-
ee1.emit('event-1')
137-
ee1.emit('event-2')
138-
ee1.emit('event-3')
136+
t.true(ee1.emit('event-1'))
137+
t.true(ee1.emit('event-2'))
138+
t.false(ee1.emit('event-3'))
139139

140140
p.end()
141141

142-
ee1.emit('event-1')
142+
t.false(ee1.emit('event-1'))
143143
})

0 commit comments

Comments
 (0)