phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
157 lines (130 loc) • 5.18 kB
JavaScript
var GetAABB = require('../../../src/geom/polygon/GetAABB');
describe('Phaser.Geom.Polygon.GetAABB', function ()
{
it('should return a Rectangle when no out parameter is provided', function ()
{
var polygon = { points: [{ x: 0, y: 0 }, { x: 10, y: 0 }, { x: 10, y: 10 }, { x: 0, y: 10 }] };
var result = GetAABB(polygon);
expect(result).toBeDefined();
expect(typeof result.x).toBe('number');
expect(typeof result.y).toBe('number');
expect(typeof result.width).toBe('number');
expect(typeof result.height).toBe('number');
});
it('should calculate correct AABB for a simple square polygon', function ()
{
var polygon = { points: [{ x: 0, y: 0 }, { x: 10, y: 0 }, { x: 10, y: 10 }, { x: 0, y: 10 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(0);
expect(result.y).toBe(0);
expect(result.width).toBe(10);
expect(result.height).toBe(10);
});
it('should calculate correct AABB for a polygon with negative coordinates', function ()
{
var polygon = { points: [{ x: -10, y: -10 }, { x: 10, y: -10 }, { x: 10, y: 10 }, { x: -10, y: 10 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(-10);
expect(result.y).toBe(-10);
expect(result.width).toBe(20);
expect(result.height).toBe(20);
});
it('should calculate correct AABB for a non-axis-aligned polygon', function ()
{
var polygon = { points: [{ x: 2, y: 5 }, { x: 8, y: 1 }, { x: 12, y: 9 }, { x: 4, y: 13 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(2);
expect(result.y).toBe(1);
expect(result.width).toBe(10);
expect(result.height).toBe(12);
});
it('should use the provided out object when supplied', function ()
{
var polygon = { points: [{ x: 0, y: 0 }, { x: 5, y: 0 }, { x: 5, y: 5 }, { x: 0, y: 5 }] };
var out = { x: 0, y: 0, width: 0, height: 0 };
var result = GetAABB(polygon, out);
expect(result).toBe(out);
expect(out.x).toBe(0);
expect(out.y).toBe(0);
expect(out.width).toBe(5);
expect(out.height).toBe(5);
});
it('should return the out object by reference', function ()
{
var polygon = { points: [{ x: 1, y: 2 }, { x: 3, y: 4 }] };
var out = { x: 0, y: 0, width: 0, height: 0 };
var result = GetAABB(polygon, out);
expect(result).toBe(out);
});
it('should handle a single point polygon', function ()
{
var polygon = { points: [{ x: 7, y: 3 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(7);
expect(result.y).toBe(3);
expect(result.width).toBe(0);
expect(result.height).toBe(0);
});
it('should handle a two-point polygon', function ()
{
var polygon = { points: [{ x: 1, y: 2 }, { x: 9, y: 8 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(1);
expect(result.y).toBe(2);
expect(result.width).toBe(8);
expect(result.height).toBe(6);
});
it('should handle floating point coordinates', function ()
{
var polygon = { points: [{ x: 1.5, y: 2.5 }, { x: 4.5, y: 6.5 }] };
var result = GetAABB(polygon);
expect(result.x).toBeCloseTo(1.5);
expect(result.y).toBeCloseTo(2.5);
expect(result.width).toBeCloseTo(3.0);
expect(result.height).toBeCloseTo(4.0);
});
it('should handle a polygon where all points share the same x coordinate', function ()
{
var polygon = { points: [{ x: 5, y: 0 }, { x: 5, y: 10 }, { x: 5, y: 20 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(5);
expect(result.y).toBe(0);
expect(result.width).toBe(0);
expect(result.height).toBe(20);
});
it('should handle a polygon where all points share the same y coordinate', function ()
{
var polygon = { points: [{ x: 0, y: 7 }, { x: 10, y: 7 }, { x: 20, y: 7 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(0);
expect(result.y).toBe(7);
expect(result.width).toBe(20);
expect(result.height).toBe(0);
});
it('should handle a polygon offset from the origin', function ()
{
var polygon = { points: [{ x: 100, y: 200 }, { x: 150, y: 200 }, { x: 150, y: 250 }, { x: 100, y: 250 }] };
var result = GetAABB(polygon);
expect(result.x).toBe(100);
expect(result.y).toBe(200);
expect(result.width).toBe(50);
expect(result.height).toBe(50);
});
it('should correctly find min and max across many points', function ()
{
var polygon = {
points: [
{ x: 3, y: 7 },
{ x: -2, y: 5 },
{ x: 8, y: -1 },
{ x: 1, y: 12 },
{ x: 6, y: 3 }
]
};
var result = GetAABB(polygon);
expect(result.x).toBe(-2);
expect(result.y).toBe(-1);
expect(result.width).toBe(10);
expect(result.height).toBe(13);
});
});