UNPKG

phaser

Version:

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

210 lines (156 loc) 5.23 kB
var Inflate = require('../../../src/geom/rectangle/Inflate'); function makeRect(x, y, width, height) { var rect = { x: x, y: y, width: width, height: height, get centerX() { return this.x + this.width / 2; }, get centerY() { return this.y + this.height / 2; }, setSize: function (w, h) { this.width = w; this.height = h; return this; } }; return rect; } describe('Phaser.Geom.Rectangle.Inflate', function () { it('should return the rectangle', function () { var rect = makeRect(0, 0, 100, 100); var result = Inflate(rect, 10, 10); expect(result).toBe(rect); }); it('should increase width by twice the x argument', function () { var rect = makeRect(0, 0, 100, 50); Inflate(rect, 10, 0); expect(rect.width).toBe(120); }); it('should increase height by twice the y argument', function () { var rect = makeRect(0, 0, 100, 50); Inflate(rect, 0, 20); expect(rect.height).toBe(90); }); it('should increase both width and height', function () { var rect = makeRect(0, 0, 100, 60); Inflate(rect, 5, 10); expect(rect.width).toBe(110); expect(rect.height).toBe(80); }); it('should maintain the center X position after inflation', function () { var rect = makeRect(0, 0, 100, 100); var cx = rect.centerX; Inflate(rect, 20, 0); expect(rect.centerX).toBeCloseTo(cx); }); it('should maintain the center Y position after inflation', function () { var rect = makeRect(0, 0, 100, 100); var cy = rect.centerY; Inflate(rect, 0, 30); expect(rect.centerY).toBeCloseTo(cy); }); it('should maintain both center coordinates after inflation', function () { var rect = makeRect(50, 50, 200, 100); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, 25, 15); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); it('should adjust x so the left edge moves left by the x argument', function () { var rect = makeRect(0, 0, 100, 100); Inflate(rect, 10, 0); expect(rect.x).toBeCloseTo(-10); }); it('should adjust y so the top edge moves up by the y argument', function () { var rect = makeRect(0, 0, 100, 100); Inflate(rect, 0, 15); expect(rect.y).toBeCloseTo(-15); }); it('should handle zero inflation without changing size or position', function () { var rect = makeRect(10, 20, 80, 60); Inflate(rect, 0, 0); expect(rect.width).toBe(80); expect(rect.height).toBe(60); expect(rect.x).toBeCloseTo(10); expect(rect.y).toBeCloseTo(20); }); it('should deflate when given negative values', function () { var rect = makeRect(0, 0, 100, 80); Inflate(rect, -10, -5); expect(rect.width).toBe(80); expect(rect.height).toBe(70); }); it('should maintain center when deflating', function () { var rect = makeRect(0, 0, 100, 80); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, -10, -5); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); it('should work with floating point inflation values', function () { var rect = makeRect(0, 0, 100, 100); Inflate(rect, 0.5, 1.5); expect(rect.width).toBeCloseTo(101); expect(rect.height).toBeCloseTo(103); }); it('should maintain center with floating point values', function () { var rect = makeRect(10, 10, 100, 100); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, 1.25, 2.75); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); it('should work with a rectangle not at the origin', function () { var rect = makeRect(200, 300, 80, 40); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, 10, 5); expect(rect.width).toBe(100); expect(rect.height).toBe(50); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); it('should work with a rectangle at negative coordinates', function () { var rect = makeRect(-100, -100, 60, 40); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, 5, 10); expect(rect.width).toBe(70); expect(rect.height).toBe(60); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); it('should work with large inflation values', function () { var rect = makeRect(0, 0, 10, 10); var cx = rect.centerX; var cy = rect.centerY; Inflate(rect, 500, 500); expect(rect.width).toBe(1010); expect(rect.height).toBe(1010); expect(rect.centerX).toBeCloseTo(cx); expect(rect.centerY).toBeCloseTo(cy); }); });