phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
247 lines (186 loc) • 7.46 kB
JavaScript
var TopLeft = require('../../../../src/display/align/in/TopLeft');
describe('Phaser.Display.Align.In.TopLeft', function ()
{
// Helper to create a mock game object
// With originX=0, originY=0: left=x, top=y
// With originX=0.5, originY=0.5: left=x-width/2, top=y-height/2
function makeObject(x, y, width, height, originX, originY)
{
return {
x: x,
y: y,
width: width,
height: height,
originX: originX !== undefined ? originX : 0,
originY: originY !== undefined ? originY : 0
};
}
it('should return the game object', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
var result = TopLeft(gameObject, alignIn);
expect(result).toBe(gameObject);
});
it('should align left edge of gameObject to left edge of alignIn with zero origin', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
// alignIn left = 100 - (200 * 0) = 100
// gameObject.x = 100 + (50 * 0) = 100
expect(gameObject.x).toBe(100);
});
it('should align top edge of gameObject to top edge of alignIn with zero origin', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
// alignIn top = 100 - (200 * 0) = 100
// gameObject.y = 100 + (50 * 0) = 100
expect(gameObject.y).toBe(100);
});
it('should align correctly with center origin on alignIn', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(200, 150, 200, 100, 0.5, 0.5);
TopLeft(gameObject, alignIn);
// alignIn left = 200 - (200 * 0.5) = 100
// gameObject.x = 100 + (50 * 0) = 100
expect(gameObject.x).toBe(100);
// alignIn top = 150 - (100 * 0.5) = 100
// gameObject.y = 100 + (50 * 0) = 100
expect(gameObject.y).toBe(100);
});
it('should align correctly with center origin on gameObject', function ()
{
var gameObject = makeObject(0, 0, 50, 40, 0.5, 0.5);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
// alignIn left = 100 - (200 * 0) = 100
// gameObject.x = 100 + (50 * 0.5) = 125
expect(gameObject.x).toBe(125);
// alignIn top = 100 - (200 * 0) = 100
// gameObject.y = 100 + (40 * 0.5) = 120
expect(gameObject.y).toBe(120);
});
it('should apply positive offsetX to shift gameObject right', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 20, 0);
// alignIn left = 100, SetLeft(gameObject, 100 - 20) = 80
// gameObject.x = 80 + (50 * 0) = 80
expect(gameObject.x).toBe(80);
expect(gameObject.y).toBe(100);
});
it('should apply positive offsetY to shift gameObject down', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 0, 30);
// alignIn top = 100, SetTop(gameObject, 100 - 30) = 70
// gameObject.y = 70 + (50 * 0) = 70
expect(gameObject.x).toBe(100);
expect(gameObject.y).toBe(70);
});
it('should apply both offsetX and offsetY', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 10, 15);
expect(gameObject.x).toBe(90);
expect(gameObject.y).toBe(85);
});
it('should apply negative offsetX to shift gameObject left', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, -20, 0);
// SetLeft(gameObject, 100 - (-20)) = 120
// gameObject.x = 120
expect(gameObject.x).toBe(120);
});
it('should apply negative offsetY to shift gameObject up', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 0, -30);
// SetTop(gameObject, 100 - (-30)) = 130
// gameObject.y = 130
expect(gameObject.y).toBe(130);
});
it('should default offsetX to 0 when not provided', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
expect(gameObject.x).toBe(100);
});
it('should default offsetY to 0 when not provided', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
expect(gameObject.y).toBe(100);
});
it('should default offsetY to 0 when only offsetX is provided', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 10);
expect(gameObject.y).toBe(100);
});
it('should handle alignIn at negative coordinates', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(-50, -80, 100, 100);
TopLeft(gameObject, alignIn);
// alignIn left = -50 - (100 * 0) = -50
// alignIn top = -80 - (100 * 0) = -80
expect(gameObject.x).toBe(-50);
expect(gameObject.y).toBe(-80);
});
it('should handle floating point coordinates', function ()
{
var gameObject = makeObject(0, 0, 10, 10);
var alignIn = makeObject(10.5, 20.5, 100, 100);
TopLeft(gameObject, alignIn);
expect(gameObject.x).toBeCloseTo(10.5);
expect(gameObject.y).toBeCloseTo(20.5);
});
it('should handle floating point offsets', function ()
{
var gameObject = makeObject(0, 0, 10, 10);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 0.5, 1.5);
expect(gameObject.x).toBeCloseTo(99.5);
expect(gameObject.y).toBeCloseTo(98.5);
});
it('should handle zero-sized gameObject', function ()
{
var gameObject = makeObject(0, 0, 0, 0);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn);
expect(gameObject.x).toBe(100);
expect(gameObject.y).toBe(100);
});
it('should align at origin when alignIn is at 0,0 with zero origin', function ()
{
var gameObject = makeObject(999, 999, 50, 50);
var alignIn = makeObject(0, 0, 100, 100);
TopLeft(gameObject, alignIn);
expect(gameObject.x).toBe(0);
expect(gameObject.y).toBe(0);
});
it('should not modify alignIn object', function ()
{
var gameObject = makeObject(0, 0, 50, 50);
var alignIn = makeObject(100, 100, 200, 200);
TopLeft(gameObject, alignIn, 10, 20);
expect(alignIn.x).toBe(100);
expect(alignIn.y).toBe(100);
expect(alignIn.width).toBe(200);
expect(alignIn.height).toBe(200);
});
});