const { BasePrepare } = require('../'); describe('PIXI.prepare.BasePrepare', function () { it('should create a new, empty, BasePrepare', function () { const renderer = {}; const prep = new BasePrepare(renderer); expect(prep.renderer).to.equal(renderer); expect(prep.uploadHookHelper).to.be.null; expect(prep.queue).to.be.empty; expect(prep.addHooks).to.have.lengthOf(5); expect(prep.uploadHooks).to.have.lengthOf(2); expect(prep.completes).to.be.empty; prep.destroy(); }); it('should add hooks', function () { function addHook() { /* empty */ } function uploadHook() { /* empty */ } const prep = new BasePrepare(); prep.registerFindHook(addHook); prep.registerUploadHook(uploadHook); expect(prep.addHooks).to.contain(addHook); expect(prep.addHooks).to.have.lengthOf(6); expect(prep.uploadHooks).to.contain(uploadHook); expect(prep.uploadHooks).to.have.lengthOf(3); prep.destroy(); }); it('should call hooks and complete', function () { const prep = new BasePrepare(); const uploadItem = {}; const uploadHelper = {}; prep.uploadHookHelper = uploadHelper; const addHook = sinon.spy(function (item, queue) { expect(item).to.equal(uploadItem); expect(queue).to.equal(prep.queue); queue.push(item); return true; }); const uploadHook = sinon.spy(function (helper, item) { expect(helper).to.equal(uploadHelper); expect(item).to.equal(uploadItem); return true; }); const complete = sinon.spy(function () { /* empty */ }); prep.registerFindHook(addHook); prep.registerUploadHook(uploadHook); prep.upload(uploadItem, complete); expect(prep.queue).to.contain(uploadItem); prep.prepareItems(); expect(addHook.calledOnce).to.be.true; expect(uploadHook.calledOnce).to.be.true; expect(complete.calledOnce).to.be.true; prep.destroy(); }); it('should call complete if no queue', function () { const prep = new BasePrepare(); function addHook() { return false; } const complete = sinon.spy(function () { /* empty */ }); prep.registerFindHook(addHook); prep.upload({}, complete); expect(complete.calledOnce).to.be.true; prep.destroy(); }); it('should remove un-preparable items from queue', function () { const prep = new BasePrepare(); const addHook = sinon.spy(function (item, queue) { queue.push(item); return true; }); const uploadHook = sinon.spy(function () { return false; }); const complete = sinon.spy(function () { /* empty */ }); prep.registerFindHook(addHook); prep.registerUploadHook(uploadHook); prep.upload({}, complete); expect(prep.queue).to.have.lengthOf(1); prep.prepareItems(); expect(prep.queue).to.be.empty; expect(addHook.calledOnce).to.be.true; expect(uploadHook.calledOnce).to.be.true; expect(complete.calledOnce).to.be.true; prep.destroy(); }); it('should remove destroyed items from queue', function () { const prep = new BasePrepare(); const addHook = sinon.spy(function (item, queue) { queue.push(item); return true; }); const uploadHook = sinon.spy(function () { return false; }); const complete = sinon.spy(function () { /* empty */ }); prep.registerFindHook(addHook); prep.registerUploadHook(uploadHook); const item = {}; prep.upload(item, complete); expect(prep.queue).to.have.lengthOf(1); item._destroyed = true; prep.prepareItems(); expect(prep.queue).to.be.empty; expect(addHook.calledOnce).to.be.true; expect(uploadHook.called).to.be.false; expect(complete.calledOnce).to.be.true; prep.destroy(); }); it('should attach to SharedTicker', function (done) { const prep = new BasePrepare(); const addHook = sinon.spy(function (item, queue) { queue.push(item); return true; }); const uploadHook = sinon.spy(function () { return true; }); function complete() { expect(prep.queue).to.be.empty; expect(addHook.calledOnce).to.be.true; expect(uploadHook.calledOnce).to.be.true; prep.destroy(); done(); } prep.registerFindHook(addHook); prep.registerUploadHook(uploadHook); prep.upload({}, complete); expect(prep.queue).to.have.lengthOf(1); expect(addHook.called).to.be.true; expect(uploadHook.called).to.be.false; expect(complete.called).to.not.be.ok; }); });