phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
120 lines (97 loc) • 3.54 kB
JavaScript
var Clone = require('../../../src/geom/rectangle/Clone');
var Rectangle = require('../../../src/geom/rectangle/Rectangle');
describe('Phaser.Geom.Rectangle.Clone', function ()
{
it('should return a new Rectangle with the same properties as the source', function ()
{
var source = new Rectangle(10, 20, 100, 200);
var clone = Clone(source);
expect(clone.x).toBe(10);
expect(clone.y).toBe(20);
expect(clone.width).toBe(100);
expect(clone.height).toBe(200);
});
it('should return a different object reference than the source', function ()
{
var source = new Rectangle(10, 20, 100, 200);
var clone = Clone(source);
expect(clone).not.toBe(source);
});
it('should return an instance of Rectangle', function ()
{
var source = new Rectangle(0, 0, 50, 50);
var clone = Clone(source);
expect(clone instanceof Rectangle).toBe(true);
});
it('should clone a Rectangle with zero values', function ()
{
var source = new Rectangle(0, 0, 0, 0);
var clone = Clone(source);
expect(clone.x).toBe(0);
expect(clone.y).toBe(0);
expect(clone.width).toBe(0);
expect(clone.height).toBe(0);
});
it('should clone a Rectangle with negative position values', function ()
{
var source = new Rectangle(-50, -75, 100, 200);
var clone = Clone(source);
expect(clone.x).toBe(-50);
expect(clone.y).toBe(-75);
expect(clone.width).toBe(100);
expect(clone.height).toBe(200);
});
it('should clone a Rectangle with floating point values', function ()
{
var source = new Rectangle(1.5, 2.75, 10.25, 20.5);
var clone = Clone(source);
expect(clone.x).toBeCloseTo(1.5);
expect(clone.y).toBeCloseTo(2.75);
expect(clone.width).toBeCloseTo(10.25);
expect(clone.height).toBeCloseTo(20.5);
});
it('should not be affected by mutations to the source after cloning', function ()
{
var source = new Rectangle(10, 20, 100, 200);
var clone = Clone(source);
source.x = 999;
source.y = 999;
source.width = 999;
source.height = 999;
expect(clone.x).toBe(10);
expect(clone.y).toBe(20);
expect(clone.width).toBe(100);
expect(clone.height).toBe(200);
});
it('should not affect the source when the clone is mutated', function ()
{
var source = new Rectangle(10, 20, 100, 200);
var clone = Clone(source);
clone.x = 999;
clone.y = 999;
clone.width = 999;
clone.height = 999;
expect(source.x).toBe(10);
expect(source.y).toBe(20);
expect(source.width).toBe(100);
expect(source.height).toBe(200);
});
it('should work with a plain object having the required properties', function ()
{
var source = { x: 5, y: 15, width: 50, height: 75 };
var clone = Clone(source);
expect(clone.x).toBe(5);
expect(clone.y).toBe(15);
expect(clone.width).toBe(50);
expect(clone.height).toBe(75);
});
it('should clone a Rectangle with large values', function ()
{
var source = new Rectangle(100000, 200000, 999999, 888888);
var clone = Clone(source);
expect(clone.x).toBe(100000);
expect(clone.y).toBe(200000);
expect(clone.width).toBe(999999);
expect(clone.height).toBe(888888);
});
});