diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/loaders/bitmapFontParser.js b/test/loaders/bitmapFontParser.js new file mode 100644 index 0000000..7c77343 --- /dev/null +++ b/test/loaders/bitmapFontParser.js @@ -0,0 +1,46 @@ +'use strict'; + +describe('PIXI.loaders.bitmapFontParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.bitmapFontParser).to.be.a('function'); + expect(PIXI.loaders.bitmapFontParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not XML', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is not properly formatted XML', function () + { + const spy = sinon.spy(); + const res = { data: document.createDocumentFragment() }; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + // TODO: Test the texture cache code path. + // TODO: Test the loading texture code path. + // TODO: Test data-url code paths. +}); + +describe('PIXI.loaders.parseBitmapFontData', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.parseBitmapFontData).to.be.a('function'); + }); + + // TODO: Test the parser code. +}); diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/loaders/bitmapFontParser.js b/test/loaders/bitmapFontParser.js new file mode 100644 index 0000000..7c77343 --- /dev/null +++ b/test/loaders/bitmapFontParser.js @@ -0,0 +1,46 @@ +'use strict'; + +describe('PIXI.loaders.bitmapFontParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.bitmapFontParser).to.be.a('function'); + expect(PIXI.loaders.bitmapFontParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not XML', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is not properly formatted XML', function () + { + const spy = sinon.spy(); + const res = { data: document.createDocumentFragment() }; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + // TODO: Test the texture cache code path. + // TODO: Test the loading texture code path. + // TODO: Test data-url code paths. +}); + +describe('PIXI.loaders.parseBitmapFontData', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.parseBitmapFontData).to.be.a('function'); + }); + + // TODO: Test the parser code. +}); diff --git a/test/loaders/index.js b/test/loaders/index.js new file mode 100644 index 0000000..97fc849 --- /dev/null +++ b/test/loaders/index.js @@ -0,0 +1,6 @@ +'use strict'; + +require('./bitmapFontParser'); +require('./loader'); +require('./spritesheetParser'); +require('./textureParser'); diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/loaders/bitmapFontParser.js b/test/loaders/bitmapFontParser.js new file mode 100644 index 0000000..7c77343 --- /dev/null +++ b/test/loaders/bitmapFontParser.js @@ -0,0 +1,46 @@ +'use strict'; + +describe('PIXI.loaders.bitmapFontParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.bitmapFontParser).to.be.a('function'); + expect(PIXI.loaders.bitmapFontParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not XML', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is not properly formatted XML', function () + { + const spy = sinon.spy(); + const res = { data: document.createDocumentFragment() }; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + // TODO: Test the texture cache code path. + // TODO: Test the loading texture code path. + // TODO: Test data-url code paths. +}); + +describe('PIXI.loaders.parseBitmapFontData', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.parseBitmapFontData).to.be.a('function'); + }); + + // TODO: Test the parser code. +}); diff --git a/test/loaders/index.js b/test/loaders/index.js new file mode 100644 index 0000000..97fc849 --- /dev/null +++ b/test/loaders/index.js @@ -0,0 +1,6 @@ +'use strict'; + +require('./bitmapFontParser'); +require('./loader'); +require('./spritesheetParser'); +require('./textureParser'); diff --git a/test/loaders/loader.js b/test/loaders/loader.js new file mode 100644 index 0000000..8ec6793 --- /dev/null +++ b/test/loaders/loader.js @@ -0,0 +1,9 @@ +'use strict'; + +describe('PIXI.loaders.Loader', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.Loader).to.be.a('function'); + }); +}); diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/loaders/bitmapFontParser.js b/test/loaders/bitmapFontParser.js new file mode 100644 index 0000000..7c77343 --- /dev/null +++ b/test/loaders/bitmapFontParser.js @@ -0,0 +1,46 @@ +'use strict'; + +describe('PIXI.loaders.bitmapFontParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.bitmapFontParser).to.be.a('function'); + expect(PIXI.loaders.bitmapFontParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not XML', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is not properly formatted XML', function () + { + const spy = sinon.spy(); + const res = { data: document.createDocumentFragment() }; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + // TODO: Test the texture cache code path. + // TODO: Test the loading texture code path. + // TODO: Test data-url code paths. +}); + +describe('PIXI.loaders.parseBitmapFontData', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.parseBitmapFontData).to.be.a('function'); + }); + + // TODO: Test the parser code. +}); diff --git a/test/loaders/index.js b/test/loaders/index.js new file mode 100644 index 0000000..97fc849 --- /dev/null +++ b/test/loaders/index.js @@ -0,0 +1,6 @@ +'use strict'; + +require('./bitmapFontParser'); +require('./loader'); +require('./spritesheetParser'); +require('./textureParser'); diff --git a/test/loaders/loader.js b/test/loaders/loader.js new file mode 100644 index 0000000..8ec6793 --- /dev/null +++ b/test/loaders/loader.js @@ -0,0 +1,9 @@ +'use strict'; + +describe('PIXI.loaders.Loader', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.Loader).to.be.a('function'); + }); +}); diff --git a/test/loaders/spritesheetParser.js b/test/loaders/spritesheetParser.js new file mode 100644 index 0000000..79f8c15 --- /dev/null +++ b/test/loaders/spritesheetParser.js @@ -0,0 +1,178 @@ +'use strict'; + +const path = require('path'); + +describe('PIXI.loaders.spritesheetParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.spritesheetParser).to.be.a('function'); + expect(PIXI.loaders.spritesheetParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not JSON', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.spritesheetParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is JSON, but improper format', function () + { + const spy = sinon.spy(); + const res = createMockResource(PIXI.loaders.Resource.TYPE.JSON, {}); + + PIXI.loaders.spritesheetParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should load the image & create textures if json is properly formatted', function () + { + const spy = sinon.spy(); + const res = createMockResource(PIXI.loaders.Resource.TYPE.JSON, getJsonSpritesheet()); + const loader = new PIXI.loaders.Loader(); + const addStub = sinon.stub(loader, 'add'); + const imgRes = createMockResource(PIXI.loaders.Resource.TYPE.IMAGE, new Image()); + + imgRes.texture = new PIXI.Texture(new PIXI.BaseTexture(imgRes.data)); + + addStub.yields(imgRes); + + PIXI.loaders.spritesheetParser().call(loader, res, spy); + + addStub.restore(); + + expect(spy).to.have.been.calledOnce; + expect(addStub).to.have.been.calledWith( + `${res.name}_image`, + `${path.dirname(res.url)}/${res.data.meta.image}` + ); + expect(res).to.have.property('textures') + .that.is.an('object') + .with.keys(Object.keys(getJsonSpritesheet().frames)) + .and.has.property('0.png') + .that.is.an.instanceof(PIXI.Texture); + }); + + // TODO: Test that rectangles are created correctly. + // TODO: Test that bathc processing works correctly. + // TODO: Test that resolution processing works correctly. + // TODO: Test that metadata is honored. + // TODO: Test data-url code paths. +}); + +function createMockResource(type, data) +{ + const name = `${Math.floor(Date.now() * Math.random())}`; + + return { + url: `http://localhost/doesnt_exist/${name}`, + name, + type, + data, + metadata: {}, + }; +} + +function getJsonSpritesheet() +{ + /* eslint-disable */ + return {"frames": { + "0.png": + { + "frame": {"x":14,"y":28,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "1.png": + { + "frame": {"x":14,"y":42,"w":12,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":12,"h":14}, + "sourceSize": {"w":12,"h":14} + }, + "2.png": + { + "frame": {"x":14,"y":14,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "3.png": + { + "frame": {"x":42,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "4.png": + { + "frame": {"x":28,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "5.png": + { + "frame": {"x":14,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "6.png": + { + "frame": {"x":0,"y":42,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "7.png": + { + "frame": {"x":0,"y":28,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "8.png": + { + "frame": {"x":0,"y":14,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "9.png": + { + "frame": {"x":0,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }}, + "meta": { + "app": "http://www.texturepacker.com", + "version": "1.0", + "image": "hud.png", + "format": "RGBA8888", + "size": {"w":64,"h":64}, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:47025c98c8b10634b75172d4ed7e7edc$" + } + }; + /* eslint-enable */ +} diff --git a/test/index.js b/test/index.js index 50a85da..9689aa0 100755 --- a/test/index.js +++ b/test/index.js @@ -13,6 +13,7 @@ }); require('./core'); require('./interaction'); + require('./loaders'); require('./renders'); require('./prepare'); }); diff --git a/test/loaders/bitmapFontParser.js b/test/loaders/bitmapFontParser.js new file mode 100644 index 0000000..7c77343 --- /dev/null +++ b/test/loaders/bitmapFontParser.js @@ -0,0 +1,46 @@ +'use strict'; + +describe('PIXI.loaders.bitmapFontParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.bitmapFontParser).to.be.a('function'); + expect(PIXI.loaders.bitmapFontParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not XML', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is not properly formatted XML', function () + { + const spy = sinon.spy(); + const res = { data: document.createDocumentFragment() }; + + PIXI.loaders.bitmapFontParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + // TODO: Test the texture cache code path. + // TODO: Test the loading texture code path. + // TODO: Test data-url code paths. +}); + +describe('PIXI.loaders.parseBitmapFontData', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.parseBitmapFontData).to.be.a('function'); + }); + + // TODO: Test the parser code. +}); diff --git a/test/loaders/index.js b/test/loaders/index.js new file mode 100644 index 0000000..97fc849 --- /dev/null +++ b/test/loaders/index.js @@ -0,0 +1,6 @@ +'use strict'; + +require('./bitmapFontParser'); +require('./loader'); +require('./spritesheetParser'); +require('./textureParser'); diff --git a/test/loaders/loader.js b/test/loaders/loader.js new file mode 100644 index 0000000..8ec6793 --- /dev/null +++ b/test/loaders/loader.js @@ -0,0 +1,9 @@ +'use strict'; + +describe('PIXI.loaders.Loader', function () +{ + it('should exist', function () + { + expect(PIXI.loaders.Loader).to.be.a('function'); + }); +}); diff --git a/test/loaders/spritesheetParser.js b/test/loaders/spritesheetParser.js new file mode 100644 index 0000000..79f8c15 --- /dev/null +++ b/test/loaders/spritesheetParser.js @@ -0,0 +1,178 @@ +'use strict'; + +const path = require('path'); + +describe('PIXI.loaders.spritesheetParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.spritesheetParser).to.be.a('function'); + expect(PIXI.loaders.spritesheetParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not JSON', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.spritesheetParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should do nothing if the resource is JSON, but improper format', function () + { + const spy = sinon.spy(); + const res = createMockResource(PIXI.loaders.Resource.TYPE.JSON, {}); + + PIXI.loaders.spritesheetParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.textures).to.be.undefined; + }); + + it('should load the image & create textures if json is properly formatted', function () + { + const spy = sinon.spy(); + const res = createMockResource(PIXI.loaders.Resource.TYPE.JSON, getJsonSpritesheet()); + const loader = new PIXI.loaders.Loader(); + const addStub = sinon.stub(loader, 'add'); + const imgRes = createMockResource(PIXI.loaders.Resource.TYPE.IMAGE, new Image()); + + imgRes.texture = new PIXI.Texture(new PIXI.BaseTexture(imgRes.data)); + + addStub.yields(imgRes); + + PIXI.loaders.spritesheetParser().call(loader, res, spy); + + addStub.restore(); + + expect(spy).to.have.been.calledOnce; + expect(addStub).to.have.been.calledWith( + `${res.name}_image`, + `${path.dirname(res.url)}/${res.data.meta.image}` + ); + expect(res).to.have.property('textures') + .that.is.an('object') + .with.keys(Object.keys(getJsonSpritesheet().frames)) + .and.has.property('0.png') + .that.is.an.instanceof(PIXI.Texture); + }); + + // TODO: Test that rectangles are created correctly. + // TODO: Test that bathc processing works correctly. + // TODO: Test that resolution processing works correctly. + // TODO: Test that metadata is honored. + // TODO: Test data-url code paths. +}); + +function createMockResource(type, data) +{ + const name = `${Math.floor(Date.now() * Math.random())}`; + + return { + url: `http://localhost/doesnt_exist/${name}`, + name, + type, + data, + metadata: {}, + }; +} + +function getJsonSpritesheet() +{ + /* eslint-disable */ + return {"frames": { + "0.png": + { + "frame": {"x":14,"y":28,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "1.png": + { + "frame": {"x":14,"y":42,"w":12,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":12,"h":14}, + "sourceSize": {"w":12,"h":14} + }, + "2.png": + { + "frame": {"x":14,"y":14,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "3.png": + { + "frame": {"x":42,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "4.png": + { + "frame": {"x":28,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "5.png": + { + "frame": {"x":14,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "6.png": + { + "frame": {"x":0,"y":42,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "7.png": + { + "frame": {"x":0,"y":28,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "8.png": + { + "frame": {"x":0,"y":14,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }, + "9.png": + { + "frame": {"x":0,"y":0,"w":14,"h":14}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":14,"h":14}, + "sourceSize": {"w":14,"h":14} + }}, + "meta": { + "app": "http://www.texturepacker.com", + "version": "1.0", + "image": "hud.png", + "format": "RGBA8888", + "size": {"w":64,"h":64}, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:47025c98c8b10634b75172d4ed7e7edc$" + } + }; + /* eslint-enable */ +} diff --git a/test/loaders/textureParser.js b/test/loaders/textureParser.js new file mode 100644 index 0000000..e739e4d --- /dev/null +++ b/test/loaders/textureParser.js @@ -0,0 +1,50 @@ +'use strict'; + +describe('PIXI.loaders.textureParser', function () +{ + it('should exist and return a function', function () + { + expect(PIXI.loaders.textureParser).to.be.a('function'); + expect(PIXI.loaders.textureParser()).to.be.a('function'); + }); + + it('should do nothing if the resource is not an image', function () + { + const spy = sinon.spy(); + const res = {}; + + PIXI.loaders.textureParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.texture).to.be.undefined; + }); + + it('should create a texture if resource is an image', function () + { + const spy = sinon.spy(); + const res = createMockResource(PIXI.loaders.Resource.TYPE.IMAGE, new Image()); + + PIXI.loaders.textureParser()(res, spy); + + expect(spy).to.have.been.calledOnce; + expect(res.texture).to.be.an.instanceof(PIXI.Texture); + + expect(PIXI.utils.BaseTextureCache).to.have.property(res.name, res.texture.baseTexture); + expect(PIXI.utils.BaseTextureCache).to.have.property(res.url, res.texture.baseTexture); + + expect(PIXI.utils.TextureCache).to.have.property(res.name, res.texture); + expect(PIXI.utils.TextureCache).to.have.property(res.url, res.texture); + }); +}); + +function createMockResource(type, data) +{ + const name = `${Math.floor(Date.now() * Math.random())}`; + + return { + url: `http://localhost/doesnt_exist/${name}`, + name, + type, + data, + }; +}