diff --git a/packages/ticker/src/TickerListener.js b/packages/ticker/src/TickerListener.js index 1704dfb..2874b81 100644 --- a/packages/ticker/src/TickerListener.js +++ b/packages/ticker/src/TickerListener.js @@ -150,7 +150,7 @@ } // Redirect to the next item - const redirect = this.previous; + const redirect = this.next; // Remove references this.next = hard ? null : redirect; diff --git a/packages/ticker/src/TickerListener.js b/packages/ticker/src/TickerListener.js index 1704dfb..2874b81 100644 --- a/packages/ticker/src/TickerListener.js +++ b/packages/ticker/src/TickerListener.js @@ -150,7 +150,7 @@ } // Redirect to the next item - const redirect = this.previous; + const redirect = this.next; // Remove references this.next = hard ? null : redirect; diff --git a/packages/ticker/test/index.js b/packages/ticker/test/index.js index b0992ac..2e9eb16 100644 --- a/packages/ticker/test/index.js +++ b/packages/ticker/test/index.js @@ -299,6 +299,11 @@ expect(this.length()).to.equal(length + 1); + expect(listener2.called).to.be.false; + expect(listener1.calledOnce).to.be.true; + + shared.update(); + expect(listener2.calledOnce).to.be.true; expect(listener1.calledOnce).to.be.true; @@ -370,4 +375,31 @@ ticker.add(listener2, null, UPDATE_PRIORITY.LOW); ticker.start(); }); + + it('should Ticker call destroyed listener "next" pointer after destroy', function (done) + { + const ticker = new Ticker(); + + const listener1 = sinon.spy(); + const listener2 = sinon.spy(() => + { + ticker.remove(listener2); + }); + + const listener3 = sinon.spy(() => + { + ticker.stop(); + + expect(listener1.calledOnce).to.be.true; + expect(listener2.calledOnce).to.be.true; + expect(listener3.calledOnce).to.be.true; + done(); + }); + + ticker.add(listener1, null, UPDATE_PRIORITY.HIGH); + ticker.add(listener2, null, UPDATE_PRIORITY.HIGH); + ticker.add(listener3, null, UPDATE_PRIORITY.HIGH); + + ticker.start(); + }); });