phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
147 lines (116 loc) • 4 kB
JavaScript
var Decompose = require('../../../src/geom/rectangle/Decompose');
describe('Phaser.Geom.Rectangle.Decompose', function ()
{
var rect;
beforeEach(function ()
{
rect = { x: 10, y: 20, right: 110, bottom: 120 };
});
it('should return an array', function ()
{
var result = Decompose(rect);
expect(Array.isArray(result)).toBe(true);
});
it('should return exactly four points', function ()
{
var result = Decompose(rect);
expect(result.length).toBe(4);
});
it('should return the top-left point as the first element', function ()
{
var result = Decompose(rect);
expect(result[0].x).toBe(10);
expect(result[0].y).toBe(20);
});
it('should return the top-right point as the second element', function ()
{
var result = Decompose(rect);
expect(result[1].x).toBe(110);
expect(result[1].y).toBe(20);
});
it('should return the bottom-right point as the third element', function ()
{
var result = Decompose(rect);
expect(result[2].x).toBe(110);
expect(result[2].y).toBe(120);
});
it('should return the bottom-left point as the fourth element', function ()
{
var result = Decompose(rect);
expect(result[3].x).toBe(10);
expect(result[3].y).toBe(120);
});
it('should create a new array when no output array is provided', function ()
{
var result = Decompose(rect);
expect(result).toBeDefined();
expect(result.length).toBe(4);
});
it('should push points to the provided output array', function ()
{
var out = [];
var result = Decompose(rect, out);
expect(result).toBe(out);
expect(out.length).toBe(4);
});
it('should append points to an existing output array', function ()
{
var out = [{ x: 0, y: 0 }];
var result = Decompose(rect, out);
expect(result.length).toBe(5);
expect(result[0].x).toBe(0);
expect(result[1].x).toBe(10);
});
it('should return the same array reference passed as out', function ()
{
var out = [];
var result = Decompose(rect, out);
expect(result).toBe(out);
});
it('should work with a zero-sized rectangle', function ()
{
var zeroRect = { x: 0, y: 0, right: 0, bottom: 0 };
var result = Decompose(zeroRect);
expect(result.length).toBe(4);
expect(result[0].x).toBe(0);
expect(result[0].y).toBe(0);
expect(result[1].x).toBe(0);
expect(result[1].y).toBe(0);
expect(result[2].x).toBe(0);
expect(result[2].y).toBe(0);
expect(result[3].x).toBe(0);
expect(result[3].y).toBe(0);
});
it('should work with negative coordinates', function ()
{
var negRect = { x: -50, y: -40, right: -10, bottom: -5 };
var result = Decompose(negRect);
expect(result[0].x).toBe(-50);
expect(result[0].y).toBe(-40);
expect(result[1].x).toBe(-10);
expect(result[1].y).toBe(-40);
expect(result[2].x).toBe(-10);
expect(result[2].y).toBe(-5);
expect(result[3].x).toBe(-50);
expect(result[3].y).toBe(-5);
});
it('should work with floating point values', function ()
{
var floatRect = { x: 1.5, y: 2.5, right: 10.5, bottom: 20.5 };
var result = Decompose(floatRect);
expect(result[0].x).toBeCloseTo(1.5);
expect(result[0].y).toBeCloseTo(2.5);
expect(result[1].x).toBeCloseTo(10.5);
expect(result[2].y).toBeCloseTo(20.5);
});
it('should return plain objects with x and y properties', function ()
{
var result = Decompose(rect);
result.forEach(function (point)
{
expect(typeof point).toBe('object');
expect(point).toHaveProperty('x');
expect(point).toHaveProperty('y');
});
});
});