phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
176 lines (127 loc) • 5.53 kB
JavaScript
var CreatePixelPerfectHandler = require('../../src/input/CreatePixelPerfectHandler');
describe('Phaser.Input.CreatePixelPerfectHandler', function ()
{
var textureManager;
var gameObject;
var hitArea;
beforeEach(function ()
{
textureManager = {
getPixelAlpha: vi.fn()
};
gameObject = {
texture: { key: 'testTexture' },
frame: { name: 'testFrame' }
};
hitArea = {};
});
it('should return a function', function ()
{
var handler = CreatePixelPerfectHandler(textureManager, 1);
expect(typeof handler).toBe('function');
});
it('should return true when alpha equals alphaTolerance', function ()
{
textureManager.getPixelAlpha.mockReturnValue(128);
var handler = CreatePixelPerfectHandler(textureManager, 128);
var result = handler(hitArea, 10, 20, gameObject);
expect(result).toBe(true);
});
it('should return true when alpha is above alphaTolerance', function ()
{
textureManager.getPixelAlpha.mockReturnValue(200);
var handler = CreatePixelPerfectHandler(textureManager, 128);
var result = handler(hitArea, 10, 20, gameObject);
expect(result).toBe(true);
});
it('should return false when alpha is below alphaTolerance', function ()
{
textureManager.getPixelAlpha.mockReturnValue(50);
var handler = CreatePixelPerfectHandler(textureManager, 128);
var result = handler(hitArea, 10, 20, gameObject);
expect(result).toBe(false);
});
it('should return false when alpha is zero', function ()
{
textureManager.getPixelAlpha.mockReturnValue(0);
var handler = CreatePixelPerfectHandler(textureManager, 1);
var result = handler(hitArea, 10, 20, gameObject);
expect(result).toBeFalsy();
});
it('should return false when alpha is null', function ()
{
textureManager.getPixelAlpha.mockReturnValue(null);
var handler = CreatePixelPerfectHandler(textureManager, 1);
var result = handler(hitArea, 10, 20, gameObject);
expect(result).toBeFalsy();
});
it('should pass x and y coordinates to getPixelAlpha', function ()
{
textureManager.getPixelAlpha.mockReturnValue(255);
var handler = CreatePixelPerfectHandler(textureManager, 1);
handler(hitArea, 42, 99, gameObject);
expect(textureManager.getPixelAlpha).toHaveBeenCalledWith(42, 99, 'testTexture', 'testFrame');
});
it('should pass texture key and frame name to getPixelAlpha', function ()
{
gameObject.texture.key = 'mySprite';
gameObject.frame.name = 'frame_0';
textureManager.getPixelAlpha.mockReturnValue(255);
var handler = CreatePixelPerfectHandler(textureManager, 1);
handler(hitArea, 0, 0, gameObject);
expect(textureManager.getPixelAlpha).toHaveBeenCalledWith(0, 0, 'mySprite', 'frame_0');
});
it('should return true when alphaTolerance is 1 and alpha is 1', function ()
{
textureManager.getPixelAlpha.mockReturnValue(1);
var handler = CreatePixelPerfectHandler(textureManager, 1);
var result = handler(hitArea, 0, 0, gameObject);
expect(result).toBe(true);
});
it('should return true when alphaTolerance is 255 and alpha is 255', function ()
{
textureManager.getPixelAlpha.mockReturnValue(255);
var handler = CreatePixelPerfectHandler(textureManager, 255);
var result = handler(hitArea, 0, 0, gameObject);
expect(result).toBe(true);
});
it('should return false when alphaTolerance is 255 and alpha is 254', function ()
{
textureManager.getPixelAlpha.mockReturnValue(254);
var handler = CreatePixelPerfectHandler(textureManager, 255);
var result = handler(hitArea, 0, 0, gameObject);
expect(result).toBe(false);
});
it('should call getPixelAlpha once per handler invocation', function ()
{
textureManager.getPixelAlpha.mockReturnValue(255);
var handler = CreatePixelPerfectHandler(textureManager, 1);
handler(hitArea, 0, 0, gameObject);
expect(textureManager.getPixelAlpha).toHaveBeenCalledTimes(1);
});
it('should use the same textureManager across multiple calls', function ()
{
textureManager.getPixelAlpha.mockReturnValue(255);
var handler = CreatePixelPerfectHandler(textureManager, 1);
handler(hitArea, 0, 0, gameObject);
handler(hitArea, 5, 5, gameObject);
handler(hitArea, 10, 10, gameObject);
expect(textureManager.getPixelAlpha).toHaveBeenCalledTimes(3);
});
it('should capture alphaTolerance at creation time', function ()
{
var tolerance = 100;
textureManager.getPixelAlpha.mockReturnValue(99);
var handler = CreatePixelPerfectHandler(textureManager, tolerance);
var result = handler(hitArea, 0, 0, gameObject);
expect(result).toBe(false);
});
it('should return independent handlers for different tolerances', function ()
{
textureManager.getPixelAlpha.mockReturnValue(100);
var strictHandler = CreatePixelPerfectHandler(textureManager, 150);
var looseHandler = CreatePixelPerfectHandler(textureManager, 50);
expect(strictHandler(hitArea, 0, 0, gameObject)).toBe(false);
expect(looseHandler(hitArea, 0, 0, gameObject)).toBe(true);
});
});