UNPKG

phaser

Version:

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

280 lines (212 loc) 9.27 kB
var BinaryFile = require('../../../src/loader/filetypes/BinaryFile'); var CONST = require('../../../src/loader/const'); function createMockLoader () { return { prefix: '', path: '', cacheManager: { binary: {} } }; } describe('BinaryFile', function () { describe('Constructor with string key', function () { it('should set the file type to binary', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.type).toBe('binary'); }); it('should set the key', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.key).toBe('myBinary'); }); it('should default extension to bin', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); // url is prepended with loader.path (empty string), so it equals the given url expect(file.url).toBe('files/data.bin'); }); it('should set the cache to loader.cacheManager.binary', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.cache).toBe(loader.cacheManager.binary); }); it('should set responseType to arraybuffer via xhrSettings', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.xhrSettings.responseType).toBe('arraybuffer'); }); it('should store dataType in config when provided', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin', undefined, Uint8Array); expect(file.config.dataType).toBe(Uint8Array); }); it('should store undefined dataType in config when not provided', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.config.dataType).toBeUndefined(); }); it('should auto-generate url from key when url is undefined', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary'); expect(file.url).toBe('myBinary.bin'); }); it('should prepend loader.path to relative url', function () { var loader = createMockLoader(); loader.path = 'assets/'; var file = new BinaryFile(loader, 'myBinary', 'data.bin'); expect(file.url).toBe('assets/data.bin'); }); it('should apply loader prefix to key', function () { var loader = createMockLoader(); loader.prefix = 'LEVEL1.'; var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.key).toBe('LEVEL1.myBinary'); }); it('should start in FILE_PENDING state', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); expect(file.state).toBe(CONST.FILE_PENDING); }); }); describe('Constructor with config object', function () { it('should accept a plain object as the key argument', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, { key: 'myBinary', url: 'files/data.bin' }); expect(file.key).toBe('myBinary'); }); it('should read url from config object', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, { key: 'myBinary', url: 'files/data.bin' }); expect(file.url).toBe('files/data.bin'); }); it('should read dataType from config object', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, { key: 'myBinary', url: 'files/data.bin', dataType: Uint16Array }); expect(file.config.dataType).toBe(Uint16Array); }); it('should read custom extension from config object', function () { var loader = createMockLoader(); // Provide a url so the auto-generated url isn't used var file = new BinaryFile(loader, { key: 'myBinary', url: 'files/data.wad', extension: 'wad' }); expect(file.url).toBe('files/data.wad'); }); it('should use default bin extension when not specified in config', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, { key: 'myBinary' }); // auto-url should be key + .bin expect(file.url).toBe('myBinary.bin'); }); it('should set file type to binary from config object', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, { key: 'myBinary', url: 'files/data.bin' }); expect(file.type).toBe('binary'); }); }); describe('onProcess', function () { it('should set state to FILE_PROCESSING', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: new ArrayBuffer(8) }; file.onProcess(); expect(file.state).toBe(CONST.FILE_PROCESSING); }); it('should store raw ArrayBuffer as data when no dataType is set', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); var buffer = new ArrayBuffer(16); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data).toBe(buffer); }); it('should wrap response in dataType constructor when dataType is set', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin', undefined, Uint8Array); var buffer = new ArrayBuffer(8); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data).toBeInstanceOf(Uint8Array); }); it('should wrap response using the correct typed array length', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin', undefined, Uint8Array); var buffer = new ArrayBuffer(4); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data.length).toBe(4); }); it('should wrap response in Uint16Array when that dataType is set', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin', undefined, Uint16Array); var buffer = new ArrayBuffer(8); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data).toBeInstanceOf(Uint16Array); expect(file.data.length).toBe(4); // 8 bytes / 2 bytes per Uint16 }); it('should call onProcessComplete after processing', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); var spy = vi.fn(); file.onProcessComplete = spy; file.xhrLoader = { response: new ArrayBuffer(8) }; file.onProcess(); expect(spy).toHaveBeenCalledOnce(); }); it('should handle empty ArrayBuffer', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin'); var buffer = new ArrayBuffer(0); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data).toBe(buffer); }); it('should handle empty ArrayBuffer with Uint8Array dataType', function () { var loader = createMockLoader(); var file = new BinaryFile(loader, 'myBinary', 'files/data.bin', undefined, Uint8Array); var buffer = new ArrayBuffer(0); file.onProcessComplete = vi.fn(); file.xhrLoader = { response: buffer }; file.onProcess(); expect(file.data).toBeInstanceOf(Uint8Array); expect(file.data.length).toBe(0); }); }); });