diff --git a/src/core/ticker/TickerListener.js b/src/core/ticker/TickerListener.js index 12cbd16..532b5c6 100644 --- a/src/core/ticker/TickerListener.js +++ b/src/core/ticker/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/src/core/ticker/TickerListener.js b/src/core/ticker/TickerListener.js index 12cbd16..532b5c6 100644 --- a/src/core/ticker/TickerListener.js +++ b/src/core/ticker/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/test/core/Ticker.js b/test/core/Ticker.js index 7154220..96403a1 100644 --- a/test/core/Ticker.js +++ b/test/core/Ticker.js @@ -298,6 +298,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; @@ -369,4 +374,31 @@ ticker.add(listener2, null, PIXI.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, PIXI.UPDATE_PRIORITY.HIGH); + ticker.add(listener2, null, PIXI.UPDATE_PRIORITY.HIGH); + ticker.add(listener3, null, PIXI.UPDATE_PRIORITY.HIGH); + + ticker.start(); + }); });