Skip to content

Commit

Permalink
[BUGFIX lts] Remove all own listeners
Browse files Browse the repository at this point in the history
We were previously only removing own listeners if they were functions,
this PR updates us to always remove all of them.
  • Loading branch information
Chris Garrett committed Jun 26, 2019
1 parent 8b90e83 commit 80fddf2
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 8 deletions.
11 changes: 3 additions & 8 deletions packages/@ember/-internals/meta/lib/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -594,14 +594,9 @@ export class Meta {
} else {
let listener = listeners[i];

// If the listener is our own function listener and we are trying to
// remove it, we want to splice it out entirely so we don't hold onto a
// reference.
if (
kind === ListenerKind.REMOVE &&
listener.kind !== ListenerKind.REMOVE &&
typeof method === 'function'
) {
// If the listener is our own listener and we are trying to remove it, we
// want to splice it out entirely so we don't hold onto a reference.
if (kind === ListenerKind.REMOVE && listener.kind !== ListenerKind.REMOVE) {
listeners.splice(i, 1);
} else {
assert(
Expand Down
26 changes: 26 additions & 0 deletions packages/@ember/-internals/meta/tests/listeners_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,31 @@ moduleFor(
'one reopen call after mutating parents and flattening out of order'
);
}

'@test removed listeners are removed from the underlying structure GH#1112213'(assert) {
// Ensure counter is zeroed
class Class1 {}
let class1Meta = meta(Class1.prototype);
class1Meta.addToListeners('hello', null, 'm', 0);

let instance1 = new Class1();
let m1 = meta(instance1);

function listenerFunc() {}

m1.removeFromListeners('hello', null, 'm', 0);

m1.addToListeners('stringListener', null, 'm', 0);
m1.addToListeners('functionListener', null, listenerFunc, 0);

m1.removeFromListeners('functionListener', null, listenerFunc, 0);
m1.removeFromListeners('stringListener', null, 'm', 0);

assert.equal(
m1.flattenedListeners().length,
1,
'instance listeners correctly removed, inherited listeners remain'
);
}
}
);

0 comments on commit 80fddf2

Please sign in to comment.