UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

261 lines (207 loc) 8.69 kB
var SpriteSheetFile = require('../../../src/loader/filetypes/SpriteSheetFile'); var CONST = require('../../../src/loader/const'); describe('SpriteSheetFile', function () { function makeMockLoader () { return { prefix: '', path: '', baseURL: '', textureManager: {} }; } describe('constructor', function () { it('should set type to spritesheet', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, 'player', 'player.png'); expect(file.type).toBe('spritesheet'); }); it('should set the key from a string argument', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, 'player', 'player.png'); expect(file.key).toBe('player'); }); it('should set the url from argument', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, 'player', 'player.png'); expect(file.url).toBe('player.png'); }); it('should default the url to key.png when url is not given', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, 'enemy'); expect(file.url).toBe('enemy.png'); }); it('should store frameConfig in config', function () { var loader = makeMockLoader(); var frameConfig = { frameWidth: 32, frameHeight: 48 }; var file = new SpriteSheetFile(loader, 'tiles', 'tiles.png', frameConfig); expect(file.config).toEqual(frameConfig); }); it('should accept a config object as the key argument', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, { key: 'atlas', url: 'atlas.png', frameConfig: { frameWidth: 64, frameHeight: 64 } }); expect(file.key).toBe('atlas'); expect(file.type).toBe('spritesheet'); }); it('should prepend loader.prefix to key when prefix is set', function () { var loader = makeMockLoader(); loader.prefix = 'GAME.'; var file = new SpriteSheetFile(loader, 'player', 'player.png'); expect(file.key).toBe('GAME.player'); }); it('should set cache to loader.textureManager', function () { var loader = makeMockLoader(); var file = new SpriteSheetFile(loader, 'player', 'player.png'); expect(file.cache).toBe(loader.textureManager); }); }); describe('addToCache', function () { function makeMockFile (overrides) { var base = { key: 'player', type: 'spritesheet', data: { width: 128, height: 64 }, config: { frameWidth: 32, frameHeight: 32 }, linkFile: null, cache: { addSpriteSheet: vi.fn() } }; if (overrides) { for (var k in overrides) { base[k] = overrides[k]; } } return base; } it('should call cache.addSpriteSheet with key, data and config when no linkFile', function () { var mockFile = makeMockFile(); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledOnce(); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledWith( mockFile.key, mockFile.data, mockFile.config ); }); it('should not include a normalMap argument when no linkFile', function () { var mockFile = makeMockFile(); SpriteSheetFile.prototype.addToCache.call(mockFile); var args = mockFile.cache.addSpriteSheet.mock.calls[0]; expect(args.length).toBe(3); }); it('should not call cache.addSpriteSheet when linkFile exists but has not completed', function () { var mockFile = makeMockFile({ linkFile: { state: CONST.FILE_LOADING, data: {} } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).not.toHaveBeenCalled(); }); it('should not call cache.addSpriteSheet when linkFile state is below FILE_COMPLETE', function () { var mockFile = makeMockFile({ linkFile: { state: CONST.FILE_COMPLETE - 1, data: {} } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).not.toHaveBeenCalled(); }); it('should call addSpriteSheet with normalMap when linkFile is complete and type is spritesheet', function () { var normalMapData = { normalMap: true }; var mockFile = makeMockFile({ type: 'spritesheet', linkFile: { state: CONST.FILE_COMPLETE, data: normalMapData } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledOnce(); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledWith( mockFile.key, mockFile.data, mockFile.config, normalMapData ); }); it('should pass this.data as image and linkFile.data as normalMap when not normalMap type', function () { var imageData = { image: true }; var normalMapData = { normalMap: true }; var mockFile = makeMockFile({ type: 'spritesheet', data: imageData, linkFile: { state: CONST.FILE_COMPLETE, data: normalMapData } }); SpriteSheetFile.prototype.addToCache.call(mockFile); var args = mockFile.cache.addSpriteSheet.mock.calls[0]; expect(args[1]).toBe(imageData); expect(args[3]).toBe(normalMapData); }); it('should pass linkFile.data as image and this.data as normalMap when type is normalMap', function () { var imageData = { image: true }; var normalMapData = { normalMap: true }; var mockFile = makeMockFile({ type: 'normalMap', data: normalMapData, linkFile: { state: CONST.FILE_COMPLETE, data: imageData } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledOnce(); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledWith( mockFile.key, imageData, mockFile.config, normalMapData ); }); it('should call addSpriteSheet when linkFile state equals FILE_COMPLETE exactly', function () { var mockFile = makeMockFile({ linkFile: { state: CONST.FILE_COMPLETE, data: {} } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledOnce(); }); it('should call addSpriteSheet when linkFile state is greater than FILE_COMPLETE', function () { var mockFile = makeMockFile({ linkFile: { state: CONST.FILE_COMPLETE + 1, data: {} } }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet).toHaveBeenCalledOnce(); }); it('should pass the correct key to addSpriteSheet', function () { var mockFile = makeMockFile({ key: 'mySheet' }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet.mock.calls[0][0]).toBe('mySheet'); }); it('should pass the correct config to addSpriteSheet', function () { var frameConfig = { frameWidth: 16, frameHeight: 16 }; var mockFile = makeMockFile({ config: frameConfig }); SpriteSheetFile.prototype.addToCache.call(mockFile); expect(mockFile.cache.addSpriteSheet.mock.calls[0][2]).toBe(frameConfig); }); }); });