'use strict'; describe('PIXI.Application', function () { it('should generate application', function (done) { expect(PIXI.Application).to.be.a.function; const app = new PIXI.Application(); expect(app.stage).to.be.instanceof(PIXI.Container); expect(app.ticker).to.be.instanceof(PIXI.ticker.Ticker); expect(app.renderer).to.be.ok; app.ticker.addOnce(() => { app.destroy(); done(); }); }); it('should remove canvas when destroyed', function (done) { const app = new PIXI.Application(); const view = app.view; expect(view).to.be.instanceof(HTMLCanvasElement); document.body.appendChild(view); app.ticker.addOnce(() => { expect(document.body.contains(view)).to.be.true; app.destroy(true); expect(document.body.contains(view)).to.be.false; done(); }); }); it('should not start application before calling start method if options.autoStart is false', function (done) { const app = new PIXI.Application({ autoStart: false }); expect(app.ticker.started).to.be.false; app.start(); app.ticker.addOnce(() => { app.destroy(); done(); }); }); it('should be able to destroy filter manager gracefully', function () { const app = new PIXI.Application(); document.body.appendChild(app.view); const sprite = new PIXI.Sprite(PIXI.Texture.WHITE); app.stage.addChild(sprite); const filter = new PIXI.filters.AlphaFilter(); sprite.filters = [filter]; app.render(); app.destroy(true); }); describe('set ticker', function () { before(function () { this.app = new PIXI.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; }); }); describe('destroy', function () { it('should not destroy children by default', function (done) { const app = new PIXI.Application(); const stage = app.stage; const child = new PIXI.DisplayObject(); stage.addChild(child); app.ticker.addOnce(() => { app.destroy(); expect(stage.children.length).to.be.equals(0); expect(child.transform).to.not.be.null; done(); }); }); it('should allow children destroy', function (done) { const app = new PIXI.Application(); const stage = app.stage; const child = new PIXI.DisplayObject(); stage.addChild(child); app.ticker.addOnce(() => { app.destroy(false, true); expect(stage.children.length).to.be.equals(0); expect(stage.transform).to.be.null; expect(child.transform).to.be.null; done(); }); }); }); });