phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
263 lines (203 loc) • 8.75 kB
JavaScript
var CONST = require('../../../src/loader/const');
var PackFile = require('../../../src/loader/filetypes/PackFile');
function createMockLoader ()
{
return {
prefix: '',
path: '',
cacheManager: {
json: {}
},
addPack: vi.fn()
};
}
describe('PackFile', function ()
{
describe('constructor', function ()
{
it('should set type to packfile', function ()
{
var loader = createMockLoader();
var file = new PackFile(loader, 'testpack', 'test.json');
expect(file.type).toBe('packfile');
});
it('should store a reference to the loader', function ()
{
var loader = createMockLoader();
var file = new PackFile(loader, 'testpack', 'test.json');
expect(file.loader).toBe(loader);
});
it('should set the key correctly', function ()
{
var loader = createMockLoader();
var file = new PackFile(loader, 'mypack', 'test.json');
expect(file.key).toBe('mypack');
});
it('should apply loader prefix to the key', function ()
{
var loader = createMockLoader();
loader.prefix = 'LEVEL1.';
var file = new PackFile(loader, 'mypack', 'test.json');
expect(file.key).toBe('LEVEL1.mypack');
});
it('should accept a config object as the key argument', function ()
{
var loader = createMockLoader();
var file = new PackFile(loader, { key: 'configpack', url: 'data/pack.json' });
expect(file.key).toBe('configpack');
expect(file.type).toBe('packfile');
});
it('should set state to FILE_POPULATED when a plain object is passed as url', function ()
{
var loader = createMockLoader();
var jsonData = { files: [] };
var file = new PackFile(loader, 'mypack', jsonData);
expect(file.state).toBe(CONST.FILE_POPULATED);
});
it('should set state to FILE_PENDING when a url string is provided', function ()
{
var loader = createMockLoader();
var file = new PackFile(loader, 'mypack', 'data/pack.json');
expect(file.state).toBe(CONST.FILE_PENDING);
});
it('should store a pre-populated JSON object as data', function ()
{
var loader = createMockLoader();
var jsonData = { test1: { files: [] } };
var file = new PackFile(loader, 'mypack', jsonData);
expect(file.data).toBe(jsonData);
});
it('should store only the dataKey portion when a dataKey and plain object url are provided', function ()
{
var loader = createMockLoader();
var jsonData = { section1: { files: [] }, section2: { files: [] } };
var file = new PackFile(loader, 'mypack', jsonData, undefined, 'section1');
expect(file.data).toEqual({ files: [] });
});
});
describe('onProcess', function ()
{
it('should parse responseText and store as data when state is not FILE_POPULATED', function ()
{
var file = Object.create(PackFile.prototype);
var parsedData = { test1: { files: [] } };
file.state = CONST.FILE_PENDING;
file.xhrLoader = { responseText: JSON.stringify(parsedData) };
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toEqual(parsedData);
});
it('should set state to FILE_PROCESSING when not FILE_POPULATED', function ()
{
var file = Object.create(PackFile.prototype);
var parsedData = { test1: { files: [] } };
file.state = CONST.FILE_PENDING;
file.xhrLoader = { responseText: JSON.stringify(parsedData) };
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.state).toBe(CONST.FILE_PROCESSING);
});
it('should skip parsing when state is FILE_POPULATED', function ()
{
var file = Object.create(PackFile.prototype);
var existingData = { test1: { files: [] } };
file.state = CONST.FILE_POPULATED;
file.data = existingData;
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toBe(existingData);
});
it('should wrap data in a config-keyed object when data has files property and config is set', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { files: [{ type: 'image', key: 'bg', url: 'bg.png' }] };
file.state = CONST.FILE_POPULATED;
file.data = packData;
file.config = 'mySection';
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toEqual({ mySection: packData });
});
it('should not wrap data when data has files property but config is falsy', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { files: [{ type: 'image', key: 'bg', url: 'bg.png' }] };
file.state = CONST.FILE_POPULATED;
file.data = packData;
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toBe(packData);
});
it('should not wrap data when config is set but data has no files property', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { images: [] };
file.state = CONST.FILE_POPULATED;
file.data = packData;
file.config = 'mySection';
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toBe(packData);
});
it('should call loader.addPack with the processed data and config', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { test1: { files: [] } };
var addPackMock = vi.fn();
file.state = CONST.FILE_POPULATED;
file.data = packData;
file.config = 'test1';
file.loader = { addPack: addPackMock };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(addPackMock).toHaveBeenCalledOnce();
});
it('should call loader.addPack passing the data and config arguments', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { files: [] };
file.state = CONST.FILE_POPULATED;
file.data = packData;
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.loader.addPack).toHaveBeenCalledWith(packData, null);
});
it('should call onProcessComplete', function ()
{
var file = Object.create(PackFile.prototype);
var onProcessCompleteMock = vi.fn();
file.state = CONST.FILE_POPULATED;
file.data = { test1: { files: [] } };
file.config = null;
file.loader = { addPack: vi.fn() };
file.onProcessComplete = onProcessCompleteMock;
file.onProcess();
expect(onProcessCompleteMock).toHaveBeenCalledOnce();
});
it('should parse json from xhrLoader and then wrap with config key when data has files property', function ()
{
var file = Object.create(PackFile.prototype);
var packData = { files: [{ type: 'image', key: 'hero' }] };
file.state = CONST.FILE_PENDING;
file.xhrLoader = { responseText: JSON.stringify(packData) };
file.config = 'mySection';
file.loader = { addPack: vi.fn() };
file.onProcessComplete = vi.fn();
file.onProcess();
expect(file.data).toEqual({ mySection: packData });
expect(file.loader.addPack).toHaveBeenCalledWith({ mySection: packData }, 'mySection');
});
});
});