phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
663 lines (591 loc) • 21.1 kB
JavaScript
var Color = require('../../../src/display/color/Color');
describe('Phaser.Display.Color', function ()
{
describe('constructor', function ()
{
it('should create a color with default values', function ()
{
var color = new Color();
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
expect(color.alpha).toBe(255);
});
it('should create a color with given RGBA values', function ()
{
var color = new Color(100, 150, 200, 128);
expect(color.red).toBe(100);
expect(color.green).toBe(150);
expect(color.blue).toBe(200);
expect(color.alpha).toBe(128);
});
it('should initialize gl array with normalized values', function ()
{
var color = new Color(255, 0, 0, 255);
expect(color.gl[0]).toBeCloseTo(1, 5);
expect(color.gl[1]).toBeCloseTo(0, 5);
expect(color.gl[2]).toBeCloseTo(0, 5);
expect(color.gl[3]).toBeCloseTo(1, 5);
});
it('should initialize rgba string', function ()
{
var color = new Color(255, 128, 0, 255);
expect(typeof color.rgba).toBe('string');
expect(color.rgba).toContain('rgba(');
});
it('should initialize color property', function ()
{
var color = new Color(255, 255, 255, 255);
expect(typeof color.color).toBe('number');
expect(color.color).toBeGreaterThan(0);
});
it('should default alpha to 255 when not provided', function ()
{
var color = new Color(10, 20, 30);
expect(color.alpha).toBe(255);
});
});
describe('transparent', function ()
{
it('should set all components to zero', function ()
{
var color = new Color(100, 150, 200, 255);
color.transparent();
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
expect(color.alpha).toBe(0);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.transparent();
expect(result).toBe(color);
});
it('should update gl array to zeros', function ()
{
var color = new Color(255, 255, 255, 255);
color.transparent();
expect(color.gl[0]).toBe(0);
expect(color.gl[1]).toBe(0);
expect(color.gl[2]).toBe(0);
expect(color.gl[3]).toBe(0);
});
});
describe('setTo', function ()
{
it('should set RGBA values', function ()
{
var color = new Color();
color.setTo(10, 20, 30, 40);
expect(color.red).toBe(10);
expect(color.green).toBe(20);
expect(color.blue).toBe(30);
expect(color.alpha).toBe(40);
});
it('should default alpha to 255 when not provided', function ()
{
var color = new Color();
color.setTo(10, 20, 30);
expect(color.alpha).toBe(255);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.setTo(10, 20, 30, 40);
expect(result).toBe(color);
});
it('should update the rgba string', function ()
{
var color = new Color();
color.setTo(255, 0, 128, 255);
expect(color.rgba).toBe('rgba(255,0,128,1)');
});
it('should clamp values to 255 maximum', function ()
{
var color = new Color();
color.setTo(300, 300, 300, 300);
expect(color.red).toBe(255);
expect(color.green).toBe(255);
expect(color.blue).toBe(255);
expect(color.alpha).toBe(255);
});
it('should handle zero values', function ()
{
var color = new Color(100, 100, 100, 100);
color.setTo(0, 0, 0, 0);
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
expect(color.alpha).toBe(0);
});
});
describe('setGLTo', function ()
{
it('should set normalized GL values', function ()
{
var color = new Color();
color.setGLTo(0.5, 0.25, 0.75, 1.0);
expect(color.gl[0]).toBeCloseTo(0.5, 5);
expect(color.gl[1]).toBeCloseTo(0.25, 5);
expect(color.gl[2]).toBeCloseTo(0.75, 5);
expect(color.gl[3]).toBeCloseTo(1.0, 5);
});
it('should default alpha to 1 when not provided', function ()
{
var color = new Color();
color.setGLTo(1, 0, 0);
expect(color.gl[3]).toBeCloseTo(1, 5);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.setGLTo(1, 0, 0);
expect(result).toBe(color);
});
it('should update integer RGB values from GL', function ()
{
var color = new Color();
color.setGLTo(1, 0, 0, 1);
expect(color.r).toBe(255);
expect(color.g).toBe(0);
expect(color.b).toBe(0);
});
it('should clamp GL values to 1', function ()
{
var color = new Color();
color.setGLTo(2, 2, 2, 2);
expect(color.gl[0]).toBe(1);
expect(color.gl[1]).toBe(1);
expect(color.gl[2]).toBe(1);
expect(color.gl[3]).toBe(1);
});
});
describe('setFromRGB', function ()
{
it('should set color from an rgb object', function ()
{
var color = new Color();
color.setFromRGB({ r: 100, g: 150, b: 200 });
expect(color.red).toBe(100);
expect(color.green).toBe(150);
expect(color.blue).toBe(200);
});
it('should set alpha when provided in object', function ()
{
var color = new Color();
color.setFromRGB({ r: 100, g: 150, b: 200, a: 128 });
expect(color.alpha).toBe(128);
});
it('should not change alpha when not provided in object', function ()
{
var color = new Color(0, 0, 0, 64);
color.setFromRGB({ r: 100, g: 150, b: 200 });
expect(color.alpha).toBe(64);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.setFromRGB({ r: 0, g: 0, b: 0 });
expect(result).toBe(color);
});
});
describe('setFromHSV', function ()
{
it('should set color from HSV values', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 1);
expect(color.red).toBe(255);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
});
it('should produce black for v=0', function ()
{
var color = new Color();
color.setFromHSV(0.5, 1, 0);
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
});
it('should produce white for s=0, v=1', function ()
{
var color = new Color();
color.setFromHSV(0, 0, 1);
expect(color.red).toBe(255);
expect(color.green).toBe(255);
expect(color.blue).toBe(255);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.setFromHSV(0, 1, 1);
expect(result).toBe(color);
});
});
describe('clone', function ()
{
it('should return a new Color object', function ()
{
var color = new Color(100, 150, 200, 128);
var clone = color.clone();
expect(clone).not.toBe(color);
});
it('should have the same RGBA values as the original', function ()
{
var color = new Color(100, 150, 200, 128);
var clone = color.clone();
expect(clone.r).toBe(color.r);
expect(clone.g).toBe(color.g);
expect(clone.b).toBe(color.b);
expect(clone.a).toBe(color.a);
});
it('should be independent from the original', function ()
{
var color = new Color(100, 150, 200, 128);
var clone = color.clone();
color.setTo(0, 0, 0, 0);
expect(clone.red).toBe(100);
expect(clone.green).toBe(150);
expect(clone.blue).toBe(200);
expect(clone.alpha).toBe(128);
});
});
describe('gray', function ()
{
it('should set R, G and B to the given shade', function ()
{
var color = new Color();
color.gray(128);
expect(color.red).toBe(128);
expect(color.green).toBe(128);
expect(color.blue).toBe(128);
});
it('should return the Color object', function ()
{
var color = new Color();
var result = color.gray(128);
expect(result).toBe(color);
});
it('should produce black at shade 0', function ()
{
var color = new Color(255, 255, 255);
color.gray(0);
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
});
it('should produce white at shade 255', function ()
{
var color = new Color(0, 0, 0);
color.gray(255);
expect(color.red).toBe(255);
expect(color.green).toBe(255);
expect(color.blue).toBe(255);
});
});
describe('random', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
var result = color.random();
expect(result).toBe(color);
});
it('should set RGB values within default range 0-255', function ()
{
var color = new Color();
for (var i = 0; i < 20; i++)
{
color.random();
expect(color.red).toBeGreaterThanOrEqual(0);
expect(color.red).toBeLessThanOrEqual(255);
expect(color.green).toBeGreaterThanOrEqual(0);
expect(color.green).toBeLessThanOrEqual(255);
expect(color.blue).toBeGreaterThanOrEqual(0);
expect(color.blue).toBeLessThanOrEqual(255);
}
});
it('should set RGB values within custom range', function ()
{
var color = new Color();
for (var i = 0; i < 20; i++)
{
color.random(100, 200);
expect(color.red).toBeGreaterThanOrEqual(100);
expect(color.red).toBeLessThan(200);
expect(color.green).toBeGreaterThanOrEqual(100);
expect(color.green).toBeLessThan(200);
expect(color.blue).toBeGreaterThanOrEqual(100);
expect(color.blue).toBeLessThan(200);
}
});
it('should produce integer RGB values', function ()
{
var color = new Color();
color.random();
expect(Number.isInteger(color.red)).toBe(true);
expect(Number.isInteger(color.green)).toBe(true);
expect(Number.isInteger(color.blue)).toBe(true);
});
});
describe('randomGray', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
var result = color.randomGray();
expect(result).toBe(color);
});
it('should produce equal R, G and B values', function ()
{
var color = new Color();
for (var i = 0; i < 20; i++)
{
color.randomGray();
expect(color.red).toBe(color.green);
expect(color.green).toBe(color.blue);
}
});
it('should set values within default range 0-255', function ()
{
var color = new Color();
for (var i = 0; i < 20; i++)
{
color.randomGray();
expect(color.red).toBeGreaterThanOrEqual(0);
expect(color.red).toBeLessThanOrEqual(255);
}
});
it('should set values within custom range', function ()
{
var color = new Color();
for (var i = 0; i < 20; i++)
{
color.randomGray(50, 150);
expect(color.red).toBeGreaterThanOrEqual(50);
expect(color.red).toBeLessThan(150);
}
});
});
describe('saturate', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
color.setFromHSV(0, 0.5, 1);
var result = color.saturate(10);
expect(result).toBe(color);
});
it('should increase the saturation by the percentage amount', function ()
{
var color = new Color();
color.setFromHSV(0, 0.5, 1);
var before = color.s;
color.saturate(10);
expect(color.s).toBeCloseTo(before + 0.1, 2);
});
it('should increase saturation by 50 percent', function ()
{
var color = new Color();
color.setFromHSV(0.5, 0.2, 0.8);
var before = color.s;
color.saturate(50);
expect(color.s).toBeCloseTo(before + 0.5, 2);
});
});
describe('desaturate', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
color.setFromHSV(0, 0.5, 1);
var result = color.desaturate(10);
expect(result).toBe(color);
});
it('should decrease the saturation by the percentage amount', function ()
{
var color = new Color();
color.setFromHSV(0, 0.5, 1);
var before = color.s;
color.desaturate(10);
expect(color.s).toBeCloseTo(before - 0.1, 2);
});
it('should decrease saturation by 50 percent', function ()
{
var color = new Color();
color.setFromHSV(0.5, 0.8, 0.8);
var before = color.s;
color.desaturate(50);
expect(color.s).toBeCloseTo(before - 0.5, 2);
});
});
describe('lighten', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.5);
var result = color.lighten(10);
expect(result).toBe(color);
});
it('should increase the value (brightness) by the percentage amount', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.5);
var before = color.v;
color.lighten(10);
expect(color.v).toBeCloseTo(before + 0.1, 2);
});
it('should increase value by 25 percent', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.5);
var before = color.v;
color.lighten(25);
expect(color.v).toBeCloseTo(before + 0.25, 2);
});
});
describe('darken', function ()
{
it('should return the Color object', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.8);
var result = color.darken(10);
expect(result).toBe(color);
});
it('should decrease the value (brightness) by the percentage amount', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.8);
var before = color.v;
color.darken(10);
expect(color.v).toBeCloseTo(before - 0.1, 2);
});
it('should decrease value by 25 percent', function ()
{
var color = new Color();
color.setFromHSV(0, 1, 0.8);
var before = color.v;
color.darken(25);
expect(color.v).toBeCloseTo(before - 0.25, 2);
});
});
describe('brighten', function ()
{
it('should return the Color object', function ()
{
var color = new Color(100, 100, 100);
var result = color.brighten(10);
expect(result).toBe(color);
});
it('should increase RGB values by the given percentage of 255', function ()
{
var color = new Color(100, 100, 100);
color.brighten(10);
var expected = Math.max(0, Math.min(255, 100 - Math.round(255 * -(10 / 100))));
expect(color.red).toBe(expected);
expect(color.green).toBe(expected);
expect(color.blue).toBe(expected);
});
it('should clamp to 255 when brightening at maximum', function ()
{
var color = new Color(255, 255, 255);
color.brighten(50);
expect(color.red).toBe(255);
expect(color.green).toBe(255);
expect(color.blue).toBe(255);
});
it('should clamp to 0 when brightening past minimum (negative amount)', function ()
{
var color = new Color(0, 0, 0);
color.brighten(0);
expect(color.red).toBe(0);
expect(color.green).toBe(0);
expect(color.blue).toBe(0);
});
it('should brighten each channel independently', function ()
{
var color = new Color(50, 100, 150);
color.brighten(20);
var delta = Math.round(255 * 0.2);
expect(color.red).toBe(Math.min(255, 50 + delta));
expect(color.green).toBe(Math.min(255, 100 + delta));
expect(color.blue).toBe(Math.min(255, 150 + delta));
});
});
describe('color property', function ()
{
it('should return a packed 24-bit integer', function ()
{
var color = new Color(255, 0, 0, 255);
expect(typeof color.color).toBe('number');
expect(color.color).toBe(255 << 16 | 0 << 8 | 0);
});
it('should update when RGB values change', function ()
{
var color = new Color(0, 0, 0);
var before = color.color;
color.setTo(255, 0, 0);
expect(color.color).not.toBe(before);
});
});
describe('color32 property', function ()
{
it('should return a number', function ()
{
var color = new Color(255, 0, 0, 255);
expect(typeof color.color32).toBe('number');
});
it('should update when alpha changes', function ()
{
var color = new Color(255, 0, 0, 255);
var before = color.color32;
color.setTo(255, 0, 0, 128);
expect(color.color32).not.toBe(before);
});
});
describe('rgba property', function ()
{
it('should return a valid rgba string', function ()
{
var color = new Color(255, 128, 0, 255);
expect(color.rgba).toBe('rgba(255,128,0,1)');
});
it('should reflect alpha as a fraction', function ()
{
var color = new Color(0, 0, 0, 0);
expect(color.rgba).toBe('rgba(0,0,0,0)');
});
it('should update when values change', function ()
{
var color = new Color(0, 0, 0, 255);
color.setTo(100, 200, 50, 255);
expect(color.rgba).toBe('rgba(100,200,50,1)');
});
});
describe('redGL / greenGL / blueGL / alphaGL properties', function ()
{
it('should normalize red to 0-1 range', function ()
{
var color = new Color(255, 0, 0, 255);
expect(color.redGL).toBeCloseTo(1, 5);
});
it('should normalize green to 0-1 range', function ()
{
var color = new Color(0, 128, 0, 255);
expect(color.greenGL).toBeCloseTo(128 / 255, 5);
});
it('should normalize blue to 0-1 range', function ()
{
var color = new Color(0, 0, 64, 255);
expect(color.blueGL).toBeCloseTo(64 / 255, 5);
});
it('should normalize alpha to 0-1 range', function ()
{
var color = new Color(0, 0, 0, 128);
expect(color.alphaGL).toBeCloseTo(128 / 255, 5);
});
});
});