UNPKG

phaser

Version:

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

322 lines (284 loc) 11.9 kB
var Parse2DArray = require('../../../src/tilemaps/parsers/Parse2DArray'); var Formats = require('../../../src/tilemaps/Formats'); describe('Phaser.Tilemaps.Parsers.Parse2DArray', function () { var name = 'testMap'; var tileWidth = 32; var tileHeight = 32; var data; beforeEach(function () { data = [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]; }); describe('return value', function () { it('should return a MapData object', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result).toBeDefined(); expect(result.constructor.name).toBe('MapData'); }); it('should set the name on the MapData', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.name).toBe(name); }); it('should set the format to ARRAY_2D', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.format).toBe(Formats.ARRAY_2D); }); it('should set tileWidth on the MapData', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.tileWidth).toBe(tileWidth); }); it('should set tileHeight on the MapData', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.tileHeight).toBe(tileHeight); }); }); describe('dimensions', function () { it('should set width to the number of columns in the first row', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.width).toBe(3); }); it('should set height to the number of rows', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.height).toBe(3); }); it('should calculate widthInPixels correctly', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.widthInPixels).toBe(3 * tileWidth); }); it('should calculate heightInPixels correctly', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.heightInPixels).toBe(3 * tileHeight); }); it('should handle non-square tile sizes', function () { var result = Parse2DArray(name, data, 16, 24, false); expect(result.widthInPixels).toBe(3 * 16); expect(result.heightInPixels).toBe(3 * 24); }); it('should handle rectangular maps wider than tall', function () { var wideData = [ [0, 1, 2, 3, 4] ]; var result = Parse2DArray(name, wideData, tileWidth, tileHeight, false); expect(result.width).toBe(5); expect(result.height).toBe(1); }); it('should handle rectangular maps taller than wide', function () { var tallData = [[0], [1], [2], [3], [4]]; var result = Parse2DArray(name, tallData, tileWidth, tileHeight, false); expect(result.width).toBe(1); expect(result.height).toBe(5); }); }); describe('layer data', function () { it('should create exactly one layer', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers.length).toBe(1); }); it('should set tileWidth on the layer', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].tileWidth).toBe(tileWidth); }); it('should set tileHeight on the layer', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].tileHeight).toBe(tileHeight); }); it('should set width on the layer to match MapData width', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].width).toBe(result.width); }); it('should set height on the layer to match MapData height', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].height).toBe(result.height); }); it('should set widthInPixels on the layer to match MapData', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].widthInPixels).toBe(result.widthInPixels); }); it('should set heightInPixels on the layer to match MapData', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); expect(result.layers[0].heightInPixels).toBe(result.heightInPixels); }); it('should populate layer.data as a 2D array', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(Array.isArray(layerData)).toBe(true); expect(layerData.length).toBe(3); expect(Array.isArray(layerData[0])).toBe(true); expect(layerData[0].length).toBe(3); }); }); describe('tile creation', function () { it('should create Tile objects for positive tile indexes', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][0]; expect(tile).not.toBeNull(); expect(tile.index).toBe(0); }); it('should set correct tile index values', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(layerData[0][0].index).toBe(0); expect(layerData[0][1].index).toBe(1); expect(layerData[0][2].index).toBe(2); expect(layerData[1][0].index).toBe(3); expect(layerData[2][2].index).toBe(8); }); it('should set correct x and y positions on tiles', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(layerData[0][0].x).toBe(0); expect(layerData[0][0].y).toBe(0); expect(layerData[1][2].x).toBe(2); expect(layerData[1][2].y).toBe(1); expect(layerData[2][1].x).toBe(1); expect(layerData[2][1].y).toBe(2); }); it('should set tileWidth and tileHeight on each Tile', function () { var result = Parse2DArray(name, data, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][0]; expect(tile.width).toBe(tileWidth); expect(tile.height).toBe(tileHeight); }); }); describe('insertNull = false (default)', function () { it('should create a Tile with index -1 for empty tiles when insertNull is false', function () { var sparseData = [ [1, -1, 2] ]; var result = Parse2DArray(name, sparseData, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][1]; expect(tile).not.toBeNull(); expect(tile.index).toBe(-1); }); it('should create a Tile with index -1 for NaN values when insertNull is false', function () { var nanData = [ [1, NaN, 2] ]; var result = Parse2DArray(name, nanData, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][1]; expect(tile).not.toBeNull(); expect(tile.index).toBe(-1); }); }); describe('insertNull = true', function () { it('should insert null for empty tiles when insertNull is true', function () { var sparseData = [ [1, -1, 2] ]; var result = Parse2DArray(name, sparseData, tileWidth, tileHeight, true); expect(result.layers[0].data[0][1]).toBeNull(); }); it('should insert null for NaN values when insertNull is true', function () { var nanData = [ [1, NaN, 2] ]; var result = Parse2DArray(name, nanData, tileWidth, tileHeight, true); expect(result.layers[0].data[0][1]).toBeNull(); }); it('should still create Tile objects for valid indexes when insertNull is true', function () { var sparseData = [ [1, -1, 2] ]; var result = Parse2DArray(name, sparseData, tileWidth, tileHeight, true); expect(result.layers[0].data[0][0]).not.toBeNull(); expect(result.layers[0].data[0][0].index).toBe(1); expect(result.layers[0].data[0][2]).not.toBeNull(); expect(result.layers[0].data[0][2].index).toBe(2); }); }); describe('edge cases', function () { it('should handle string tile index values by parsing them as integers', function () { var stringData = [ ['3', '7', '0'] ]; var result = Parse2DArray(name, stringData, tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(layerData[0][0].index).toBe(3); expect(layerData[0][1].index).toBe(7); expect(layerData[0][2].index).toBe(0); }); it('should handle a single-tile map', function () { var singleData = [[5]]; var result = Parse2DArray(name, singleData, tileWidth, tileHeight, false); expect(result.width).toBe(1); expect(result.height).toBe(1); expect(result.layers[0].data[0][0].index).toBe(5); }); it('should handle tile index of 0 as a valid tile, not empty', function () { var zeroData = [[0, 1]]; var result = Parse2DArray(name, zeroData, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][0]; expect(tile.index).toBe(0); }); it('should handle large tile indexes', function () { var largeData = [[999, 1000, 9999]]; var result = Parse2DArray(name, largeData, tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(layerData[0][0].index).toBe(999); expect(layerData[0][1].index).toBe(1000); expect(layerData[0][2].index).toBe(9999); }); it('should use the width of the first row only', function () { var unevenData = [ [0, 1, 2, 3], [4, 5] ]; var result = Parse2DArray(name, unevenData, tileWidth, tileHeight, false); expect(result.width).toBe(4); }); it('should handle different tileWidth and tileHeight values', function () { var result = Parse2DArray(name, data, 8, 16, false); expect(result.tileWidth).toBe(8); expect(result.tileHeight).toBe(16); expect(result.widthInPixels).toBe(3 * 8); expect(result.heightInPixels).toBe(3 * 16); }); }); });