UNPKG

phaser

Version:

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

228 lines (199 loc) 8.37 kB
var ParseCSV = require('../../../src/tilemaps/parsers/ParseCSV'); var Formats = require('../../../src/tilemaps/Formats'); describe('Phaser.Tilemaps.Parsers.ParseCSV', function () { var name = 'testMap'; var tileWidth = 32; var tileHeight = 32; describe('return value', function () { it('should return a MapData object', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', tileWidth, tileHeight, false); expect(result).toBeDefined(); expect(result.constructor.name).toBe('MapData'); }); it('should set the format to CSV', function () { var result = ParseCSV(name, '0,1,2', tileWidth, tileHeight, false); expect(result.format).toBe(Formats.CSV); }); it('should set format to 0 (CSV constant value)', function () { var result = ParseCSV(name, '0,1,2', tileWidth, tileHeight, false); expect(result.format).toBe(0); }); it('should not set format to ARRAY_2D', function () { var result = ParseCSV(name, '0,1,2', tileWidth, tileHeight, false); expect(result.format).not.toBe(Formats.ARRAY_2D); }); it('should set the name on the MapData', function () { var result = ParseCSV('myMap', '0,1', tileWidth, tileHeight, false); expect(result.name).toBe('myMap'); }); it('should set tileWidth on the MapData', function () { var result = ParseCSV(name, '0,1', 16, 32, false); expect(result.tileWidth).toBe(16); }); it('should set tileHeight on the MapData', function () { var result = ParseCSV(name, '0,1', 32, 16, false); expect(result.tileHeight).toBe(16); }); }); describe('CSV parsing', function () { it('should parse a single row CSV into correct width', function () { var result = ParseCSV(name, '0,1,2,3,4', tileWidth, tileHeight, false); expect(result.width).toBe(5); expect(result.height).toBe(1); }); it('should parse a multi-row CSV into correct dimensions', function () { var csv = '0,1,2\n3,4,5\n6,7,8'; var result = ParseCSV(name, csv, tileWidth, tileHeight, false); expect(result.width).toBe(3); expect(result.height).toBe(3); }); it('should parse tile index values correctly', function () { var csv = '0,1,2\n3,4,5'; var result = ParseCSV(name, csv, 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[1][2].index).toBe(5); }); it('should handle a single-tile CSV', function () { var result = ParseCSV(name, '7', tileWidth, tileHeight, false); expect(result.width).toBe(1); expect(result.height).toBe(1); expect(result.layers[0].data[0][0].index).toBe(7); }); it('should trim leading and trailing whitespace from the CSV string', function () { var result = ParseCSV(name, ' 0,1,2\n3,4,5 ', tileWidth, tileHeight, false); expect(result.height).toBe(2); expect(result.width).toBe(3); }); it('should trim leading newlines from the CSV string', function () { var result = ParseCSV(name, '\n0,1,2\n3,4,5', tileWidth, tileHeight, false); expect(result.height).toBe(2); }); it('should trim trailing newlines from the CSV string', function () { var result = ParseCSV(name, '0,1,2\n3,4,5\n', tileWidth, tileHeight, false); expect(result.height).toBe(2); }); }); describe('dimensions', function () { it('should calculate widthInPixels correctly', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', tileWidth, tileHeight, false); expect(result.widthInPixels).toBe(3 * tileWidth); }); it('should calculate heightInPixels correctly', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', tileWidth, tileHeight, false); expect(result.heightInPixels).toBe(2 * tileHeight); }); it('should calculate pixel dimensions with non-square tiles', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', 16, 24, false); expect(result.widthInPixels).toBe(3 * 16); expect(result.heightInPixels).toBe(2 * 24); }); }); describe('layer data', function () { it('should create exactly one layer', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', tileWidth, tileHeight, false); expect(result.layers.length).toBe(1); }); it('should populate layer.data as a 2D array', function () { var result = ParseCSV(name, '0,1,2\n3,4,5', tileWidth, tileHeight, false); var layerData = result.layers[0].data; expect(Array.isArray(layerData)).toBe(true); expect(layerData.length).toBe(2); expect(Array.isArray(layerData[0])).toBe(true); expect(layerData[0].length).toBe(3); }); }); describe('insertNull = false', function () { it('should create a Tile with index -1 for empty tiles', function () { var csv = '1,-1,2'; var result = ParseCSV(name, csv, tileWidth, tileHeight, false); var tile = result.layers[0].data[0][1]; expect(tile).not.toBeNull(); expect(tile.index).toBe(-1); }); it('should not insert null for -1 tiles when insertNull is false', function () { var csv = '-1,0,1'; var result = ParseCSV(name, csv, tileWidth, tileHeight, false); expect(result.layers[0].data[0][0]).not.toBeNull(); }); }); describe('insertNull = true', function () { it('should insert null for empty tiles when insertNull is true', function () { var csv = '1,-1,2'; var result = ParseCSV(name, csv, 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 csv = '1,-1,2'; var result = ParseCSV(name, csv, 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 tile index of 0 as a valid tile, not empty', function () { var result = ParseCSV(name, '0,1,2', tileWidth, tileHeight, false); var tile = result.layers[0].data[0][0]; expect(tile.index).toBe(0); }); it('should handle large tile index values', function () { var result = ParseCSV(name, '999,1000,9999', 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 handle a wide single-row map', function () { var csv = '0,1,2,3,4,5,6,7,8,9'; var result = ParseCSV(name, csv, tileWidth, tileHeight, false); expect(result.width).toBe(10); expect(result.height).toBe(1); }); it('should handle a tall single-column map', function () { var csv = '0\n1\n2\n3\n4'; var result = ParseCSV(name, csv, tileWidth, tileHeight, false); expect(result.width).toBe(1); expect(result.height).toBe(5); }); }); });