'use strict'; const URL = 'foo.png'; const NAME = 'foo'; const NAME2 = 'bar'; function cleanCache() { delete PIXI.utils.BaseTextureCache[URL]; delete PIXI.utils.BaseTextureCache[NAME]; delete PIXI.utils.BaseTextureCache[NAME2]; delete PIXI.utils.TextureCache[URL]; delete PIXI.utils.TextureCache[NAME]; delete PIXI.utils.TextureCache[NAME2]; } describe('PIXI.Texture', function () { it('should register Texture from Loader', function () { cleanCache(); const image = new Image(); const texture = PIXI.Texture.fromLoader(image, URL, NAME); expect(texture.baseTexture.imageUrl).to.equal('foo.png'); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); expect(PIXI.utils.BaseTextureCache[NAME]).to.equal(texture.baseTexture); expect(PIXI.utils.TextureCache[URL]).to.equal(texture); expect(PIXI.utils.BaseTextureCache[URL]).to.equal(texture.baseTexture); }); it('should remove Texture from cache on destroy', function () { cleanCache(); const texture = new PIXI.Texture(new PIXI.BaseTexture()); PIXI.Texture.addToCache(texture, NAME); PIXI.Texture.addToCache(texture, NAME2); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(texture.textureCacheIds.indexOf(NAME2)).to.equal(1); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); expect(PIXI.utils.TextureCache[NAME2]).to.equal(texture); texture.destroy(); expect(texture.textureCacheIds).to.equal(null); expect(PIXI.utils.TextureCache[NAME]).to.equal(undefined); expect(PIXI.utils.TextureCache[NAME2]).to.equal(undefined); }); it('should be added to the texture cache correctly, ' + 'and should remove only itself, not effecting the base texture and its cache', function () { cleanCache(); const texture = new PIXI.Texture(new PIXI.BaseTexture()); PIXI.BaseTexture.addToCache(texture.baseTexture, NAME); PIXI.Texture.addToCache(texture, NAME); expect(texture.baseTexture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(PIXI.utils.BaseTextureCache[NAME]).to.equal(texture.baseTexture); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); PIXI.Texture.removeFromCache(NAME); expect(texture.baseTexture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(-1); expect(PIXI.utils.BaseTextureCache[NAME]).to.equal(texture.baseTexture); expect(PIXI.utils.TextureCache[NAME]).to.equal(undefined); }); it('should remove Texture from entire cache using removeFromCache (by Texture instance)', function () { cleanCache(); const texture = new PIXI.Texture(new PIXI.BaseTexture()); PIXI.Texture.addToCache(texture, NAME); PIXI.Texture.addToCache(texture, NAME2); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(texture.textureCacheIds.indexOf(NAME2)).to.equal(1); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); expect(PIXI.utils.TextureCache[NAME2]).to.equal(texture); PIXI.Texture.removeFromCache(texture); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(-1); expect(texture.textureCacheIds.indexOf(NAME2)).to.equal(-1); expect(PIXI.utils.TextureCache[NAME]).to.equal(undefined); expect(PIXI.utils.TextureCache[NAME2]).to.equal(undefined); }); it('should remove Texture from single cache entry using removeFromCache (by id)', function () { cleanCache(); const texture = new PIXI.Texture(new PIXI.BaseTexture()); PIXI.Texture.addToCache(texture, NAME); PIXI.Texture.addToCache(texture, NAME2); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(texture.textureCacheIds.indexOf(NAME2)).to.equal(1); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); expect(PIXI.utils.TextureCache[NAME2]).to.equal(texture); PIXI.Texture.removeFromCache(NAME); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(-1); expect(texture.textureCacheIds.indexOf(NAME2)).to.equal(0); expect(PIXI.utils.TextureCache[NAME]).to.equal(undefined); expect(PIXI.utils.TextureCache[NAME2]).to.equal(texture); }); it('should not remove Texture from cache if Texture instance has been replaced', function () { cleanCache(); const texture = new PIXI.Texture(new PIXI.BaseTexture()); const texture2 = new PIXI.Texture(new PIXI.BaseTexture()); PIXI.Texture.addToCache(texture, NAME); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); PIXI.Texture.addToCache(texture2, NAME); expect(texture2.textureCacheIds.indexOf(NAME)).to.equal(0); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture2); PIXI.Texture.removeFromCache(texture); expect(texture.textureCacheIds.indexOf(NAME)).to.equal(-1); expect(texture2.textureCacheIds.indexOf(NAME)).to.equal(0); expect(PIXI.utils.TextureCache[NAME]).to.equal(texture2); }); it('destroying a destroyed texture should not throw an error', function () { const texture = new PIXI.Texture(new PIXI.BaseTexture()); texture.destroy(true); texture.destroy(true); }); it('should clone a texture', function () { const baseTexture = new PIXI.BaseTexture(); const frame = new PIXI.Rectangle(); const orig = new PIXI.Rectangle(); const trim = new PIXI.Rectangle(); const rotate = 2; const anchor = new PIXI.Point(1, 0.5); const texture = new PIXI.Texture(baseTexture, frame, orig, trim, rotate, anchor); const clone = texture.clone(); expect(clone.baseTexture).to.equal(baseTexture); expect(clone.defaultAnchor.x).to.equal(texture.defaultAnchor.x); expect(clone.defaultAnchor.y).to.equal(texture.defaultAnchor.y); expect(clone.frame).to.equal(texture.frame); expect(clone.trim).to.equal(texture.trim); expect(clone.orig).to.equal(texture.orig); expect(clone.rotate).to.equal(texture.rotate); clone.destroy(); texture.destroy(true); }); });