diff --git a/packages/app/src/Application.js b/packages/app/src/Application.js index b5c0ba1..2c67c94 100644 --- a/packages/app/src/Application.js +++ b/packages/app/src/Application.js @@ -187,11 +187,13 @@ */ destroy(removeView) { - const oldTicker = this._ticker; + if (this._ticker) + { + const oldTicker = this._ticker; - this.ticker = null; - - oldTicker.destroy(); + this.ticker = null; + oldTicker.destroy(); + } this.stage.destroy(); this.stage = null; diff --git a/packages/app/src/Application.js b/packages/app/src/Application.js index b5c0ba1..2c67c94 100644 --- a/packages/app/src/Application.js +++ b/packages/app/src/Application.js @@ -187,11 +187,13 @@ */ destroy(removeView) { - const oldTicker = this._ticker; + if (this._ticker) + { + const oldTicker = this._ticker; - this.ticker = null; - - oldTicker.destroy(); + this.ticker = null; + oldTicker.destroy(); + } this.stage.destroy(); this.stage = null; diff --git a/packages/app/test/index.js b/packages/app/test/index.js index 7643aef..7bfa205 100644 --- a/packages/app/test/index.js +++ b/packages/app/test/index.js @@ -57,4 +57,66 @@ done(); }); }); + + describe('set ticker', function () + { + before(function () + { + this.app = new Application(); + /* remove default listener to prevent uncaught exception */ + this.app._ticker.remove(this.app.render, this.app); + }); + + after(function () + { + this.app.destroy(true); + }); + + it('should assign ticker object', function () + { + const ticker = { add: sinon.spy() }; + const _ticker = { remove: sinon.spy() }; + + this.app._ticker = _ticker; + this.app.ticker = ticker; + + expect(_ticker.remove).to.be.calledOnce; + expect(_ticker.remove.args[0][0]).to.be.equal(this.app.render); + expect(_ticker.remove.args[0][1]).to.be.equal(this.app); + + expect(this.app._ticker).to.be.equal(ticker); + expect(ticker.add).to.be.calledOnce; + expect(ticker.add.args[0][0]).to.be.equal(this.app.render); + expect(ticker.add.args[0][1]).to.be.equal(this.app); + expect(ticker.add.args[0][2]).to.be.equal(PIXI.UPDATE_PRIORITY.LOW); + }); + + it('should assign ticker if no ticker', function () + { + const ticker = { add: sinon.spy() }; + + this.app._ticker = null; + this.app.ticker = ticker; + + expect(this.app._ticker).to.be.equal(ticker); + expect(ticker.add).to.be.calledOnce; + expect(ticker.add.args[0][0]).to.be.equal(this.app.render); + expect(ticker.add.args[0][1]).to.be.equal(this.app); + expect(ticker.add.args[0][2]).to.be.equal(PIXI.UPDATE_PRIORITY.LOW); + }); + + it('should assign null ticker', function () + { + const _ticker = { remove: sinon.spy() }; + + this.app._ticker = _ticker; + this.app.ticker = null; + + expect(_ticker.remove).to.be.calledOnce; + expect(_ticker.remove.args[0][0]).to.be.equal(this.app.render); + expect(_ticker.remove.args[0][1]).to.be.equal(this.app); + + expect(this.app._ticker).to.be.null; + }); + }); });