UNPKG

phaser

Version:

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

173 lines (133 loc) 4.96 kB
var GetPoints = require('../../../src/geom/line/GetPoints'); describe('Phaser.Geom.Line.GetPoints', function () { var line; beforeEach(function () { line = { x1: 0, y1: 0, x2: 100, y2: 0 }; }); it('should return an empty array when quantity is zero and no stepRate is given', function () { var result = GetPoints(line, 0); expect(result).toEqual([]); }); it('should return an array with the correct number of points', function () { var result = GetPoints(line, 5); expect(result.length).toBe(5); }); it('should start at the first endpoint (x1, y1)', function () { var result = GetPoints(line, 4); expect(result[0].x).toBeCloseTo(0); expect(result[0].y).toBeCloseTo(0); }); it('should not include the last endpoint (x2, y2)', function () { var result = GetPoints(line, 4); var last = result[result.length - 1]; expect(last.x).not.toBeCloseTo(100); }); it('should return evenly spaced points along a horizontal line', function () { var result = GetPoints(line, 4); expect(result[0].x).toBeCloseTo(0); expect(result[1].x).toBeCloseTo(25); expect(result[2].x).toBeCloseTo(50); expect(result[3].x).toBeCloseTo(75); }); it('should return evenly spaced points along a vertical line', function () { var vertLine = { x1: 0, y1: 0, x2: 0, y2: 100 }; var result = GetPoints(vertLine, 4); expect(result[0].y).toBeCloseTo(0); expect(result[1].y).toBeCloseTo(25); expect(result[2].y).toBeCloseTo(50); expect(result[3].y).toBeCloseTo(75); }); it('should return evenly spaced points along a diagonal line', function () { var diagLine = { x1: 0, y1: 0, x2: 100, y2: 100 }; var result = GetPoints(diagLine, 5); expect(result[0].x).toBeCloseTo(0); expect(result[0].y).toBeCloseTo(0); expect(result[2].x).toBeCloseTo(40); expect(result[2].y).toBeCloseTo(40); expect(result[4].x).toBeCloseTo(80); expect(result[4].y).toBeCloseTo(80); }); it('should calculate quantity from stepRate when quantity is 0', function () { // line length is 100, stepRate 25 => 4 points var result = GetPoints(line, 0, 25); expect(result.length).toBe(4); }); it('should calculate quantity from stepRate when quantity is falsey', function () { var result = GetPoints(line, null, 50); expect(result.length).toBe(2); }); it('should ignore stepRate when quantity is non-zero', function () { var result = GetPoints(line, 3, 10); expect(result.length).toBe(3); }); it('should use the provided output array', function () { var out = []; var result = GetPoints(line, 3, undefined, out); expect(result).toBe(out); expect(out.length).toBe(3); }); it('should append to an existing output array', function () { var out = []; GetPoints(line, 2, undefined, out); GetPoints(line, 2, undefined, out); expect(out.length).toBe(4); }); it('should return Vector2 objects', function () { var result = GetPoints(line, 3); expect(typeof result[0].x).toBe('number'); expect(typeof result[0].y).toBe('number'); }); it('should return a single point at x1, y1 when quantity is 1', function () { var result = GetPoints(line, 1); expect(result.length).toBe(1); expect(result[0].x).toBeCloseTo(0); expect(result[0].y).toBeCloseTo(0); }); it('should work with negative coordinate lines', function () { var negLine = { x1: -100, y1: -100, x2: 100, y2: 100 }; var result = GetPoints(negLine, 4); expect(result[0].x).toBeCloseTo(-100); expect(result[0].y).toBeCloseTo(-100); expect(result[2].x).toBeCloseTo(0); expect(result[2].y).toBeCloseTo(0); }); it('should work with a zero-length line', function () { var zeroLine = { x1: 50, y1: 50, x2: 50, y2: 50 }; var result = GetPoints(zeroLine, 3); expect(result.length).toBe(3); expect(result[0].x).toBeCloseTo(50); expect(result[0].y).toBeCloseTo(50); expect(result[1].x).toBeCloseTo(50); expect(result[2].x).toBeCloseTo(50); }); it('should return an empty array when stepRate is zero and quantity is zero', function () { var result = GetPoints(line, 0, 0); expect(result).toEqual([]); }); it('should handle floating point quantity from stepRate', function () { // line length 100, stepRate 30 => quantity = 3.333... // loop runs while i < 3.333, so i = 0, 1, 2, 3 => 4 points var result = GetPoints(line, 0, 30); expect(result.length).toBe(4); }); });