phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
308 lines (268 loc) • 12.1 kB
JavaScript
var Glow = require('../../src/filters/Glow');
describe('Glow', function ()
{
var mockCamera;
beforeEach(function ()
{
mockCamera = {};
});
describe('constructor', function ()
{
it('should set default outerStrength to 4', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.outerStrength).toBe(4);
});
it('should set default innerStrength to 0', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.innerStrength).toBe(0);
});
it('should set default scale to 1', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.scale).toBe(1);
});
it('should set default knockout to false', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.knockout).toBe(false);
});
it('should set default glcolor to [1, 1, 1, 1] when no color is given', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.glcolor[0]).toBe(1);
expect(glow.glcolor[1]).toBe(1);
expect(glow.glcolor[2]).toBe(1);
expect(glow.glcolor[3]).toBe(1);
});
it('should set renderNode to FilterGlow', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.renderNode).toBe('FilterGlow');
});
it('should store the camera reference', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.camera).toBe(mockCamera);
});
it('should accept custom outerStrength', function ()
{
var glow = new Glow(mockCamera, undefined, 8, undefined, undefined, undefined, 10, 10);
expect(glow.outerStrength).toBe(8);
});
it('should accept custom innerStrength', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, 3, undefined, undefined, 10, 10);
expect(glow.innerStrength).toBe(3);
});
it('should accept custom scale', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 2.5, undefined, 10, 10);
expect(glow.scale).toBe(2.5);
});
it('should accept custom knockout as true', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, true, 10, 10);
expect(glow.knockout).toBe(true);
});
it('should round and clamp quality to minimum 1', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 0, 10);
expect(glow.quality).toBe(1);
});
it('should round quality to nearest integer', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 7.6, 10);
expect(glow.quality).toBe(8);
});
it('should round and clamp distance to minimum 1', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 0);
expect(glow.distance).toBe(1);
});
it('should round distance to nearest integer', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 5.7);
expect(glow.distance).toBe(6);
});
it('should apply color when provided', function ()
{
var glow = new Glow(mockCamera, 0xff0000, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.glcolor[0]).toBeCloseTo(1, 5);
expect(glow.glcolor[1]).toBeCloseTo(0, 5);
expect(glow.glcolor[2]).toBeCloseTo(0, 5);
});
it('should be active by default', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.active).toBe(true);
});
});
describe('color', function ()
{
it('should return 0xffffff when glcolor is [1,1,1,1]', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
expect(glow.color).toBe(0xffffff);
});
it('should set red component correctly', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0xff0000;
expect(glow.glcolor[0]).toBeCloseTo(1, 5);
expect(glow.glcolor[1]).toBeCloseTo(0, 5);
expect(glow.glcolor[2]).toBeCloseTo(0, 5);
});
it('should set green component correctly', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0x00ff00;
expect(glow.glcolor[0]).toBeCloseTo(0, 5);
expect(glow.glcolor[1]).toBeCloseTo(1, 5);
expect(glow.glcolor[2]).toBeCloseTo(0, 5);
});
it('should set blue component correctly', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0x0000ff;
expect(glow.glcolor[0]).toBeCloseTo(0, 5);
expect(glow.glcolor[1]).toBeCloseTo(0, 5);
expect(glow.glcolor[2]).toBeCloseTo(1, 5);
});
it('should get back the color that was set for 0xff0000', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0xff0000;
expect(glow.color).toBe(0xff0000);
});
it('should get back the color that was set for 0x00ff00', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0x00ff00;
expect(glow.color).toBe(0x00ff00);
});
it('should get back the color that was set for 0x0000ff', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0x0000ff;
expect(glow.color).toBe(0x0000ff);
});
it('should handle 0x000000 (black)', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.color = 0x000000;
expect(glow.glcolor[0]).toBeCloseTo(0, 5);
expect(glow.glcolor[1]).toBeCloseTo(0, 5);
expect(glow.glcolor[2]).toBeCloseTo(0, 5);
expect(glow.color).toBe(0x000000);
});
});
describe('distance getter', function ()
{
it('should return the distance set at construction', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 20);
expect(glow.distance).toBe(20);
});
it('should be readonly - assigning throws or has no effect', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 15);
expect(function ()
{
glow.distance = 999;
}).toThrow();
});
});
describe('quality getter', function ()
{
it('should return the quality set at construction', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 5, 10);
expect(glow.quality).toBe(5);
});
it('should be readonly - assigning throws or has no effect', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 5, 10);
expect(function ()
{
glow.quality = 999;
}).toThrow();
});
});
describe('getPadding', function ()
{
it('should return the paddingOverride when it is set', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
var result = glow.getPadding();
expect(result).toBe(glow.paddingOverride);
});
it('should copy paddingOverride values into currentPadding when override is active', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.paddingOverride.x = 5;
glow.paddingOverride.y = 6;
glow.paddingOverride.width = 7;
glow.paddingOverride.height = 8;
glow.getPadding();
expect(glow.currentPadding.x).toBe(5);
expect(glow.currentPadding.y).toBe(6);
expect(glow.currentPadding.width).toBe(7);
expect(glow.currentPadding.height).toBe(8);
});
it('should return currentPadding when paddingOverride is null', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, undefined, undefined, 10, 10);
glow.setPaddingOverride(null);
var result = glow.getPadding();
expect(result).toBe(glow.currentPadding);
});
it('should calculate padding based on distance when override is null', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 1, undefined, 10, 10);
glow.setPaddingOverride(null);
var padding = glow.getPadding();
expect(padding.left).toBe(-10);
expect(padding.top).toBe(-10);
expect(padding.right).toBe(10);
expect(padding.bottom).toBe(10);
});
it('should multiply distance by scale when calculating padding', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 2, undefined, 10, 10);
glow.setPaddingOverride(null);
var padding = glow.getPadding();
expect(padding.left).toBe(-20);
expect(padding.top).toBe(-20);
expect(padding.right).toBe(20);
expect(padding.bottom).toBe(20);
});
it('should ceil the distance calculation for padding', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 1.5, undefined, 10, 10);
glow.setPaddingOverride(null);
var padding = glow.getPadding();
var expected = Math.ceil(10 * 1.5);
expect(padding.left).toBe(-expected);
expect(padding.right).toBe(expected);
});
it('should use scale of 0.5 correctly for padding', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 0.5, undefined, 10, 10);
glow.setPaddingOverride(null);
var padding = glow.getPadding();
var expected = Math.ceil(10 * 0.5);
expect(padding.left).toBe(-expected);
expect(padding.right).toBe(expected);
});
it('should use a minimum distance of 1 in padding calculation', function ()
{
var glow = new Glow(mockCamera, undefined, undefined, undefined, 1, undefined, 10, 0);
glow.setPaddingOverride(null);
var padding = glow.getPadding();
expect(padding.left).toBe(-1);
expect(padding.right).toBe(1);
});
});
});