UNPKG

phaser

Version:

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

191 lines (145 loc) 6.58 kB
var FilterVignette = require('../../../../../src/renderer/webgl/renderNodes/filters/FilterVignette'); describe('FilterVignette', function () { it('should be importable', function () { expect(FilterVignette).toBeDefined(); }); describe('setupUniforms', function () { var mockInstance; var mockProgramManager; var mockController; beforeEach(function () { mockProgramManager = { setUniform: vi.fn() }; mockInstance = { programManager: mockProgramManager }; mockController = { radius: 0.5, strength: 0.8, x: 0.5, y: 0.5, blendMode: 0, color: { redGL: 0.0, greenGL: 0.0, blueGL: 0.0, alphaGL: 1.0 } }; }); it('should call setUniform for uRadius with controller.radius', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uRadius', 0.5); }); it('should call setUniform for uStrength with controller.strength', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uStrength', 0.8); }); it('should call setUniform for uPosition with [controller.x, controller.y]', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uPosition', [ 0.5, 0.5 ]); }); it('should call setUniform for uColor with color channel values', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uColor', [ 0.0, 0.0, 0.0, 1.0 ]); }); it('should call setUniform for uBlendMode with controller.blendMode', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uBlendMode', 0); }); it('should call setUniform exactly five times', function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledTimes(5); }); it('should pass custom radius value to uRadius', function () { mockController.radius = 0.25; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uRadius', 0.25); }); it('should pass custom strength value to uStrength', function () { mockController.strength = 1.0; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uStrength', 1.0); }); it('should pass custom position values to uPosition', function () { mockController.x = 0.25; mockController.y = 0.75; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uPosition', [ 0.25, 0.75 ]); }); it('should pass custom color channel values to uColor', function () { mockController.color = { redGL: 1.0, greenGL: 0.5, blueGL: 0.25, alphaGL: 0.8 }; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uColor', [ 1.0, 0.5, 0.25, 0.8 ]); }); it('should pass custom blendMode value to uBlendMode', function () { mockController.blendMode = 2; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uBlendMode', 2); }); it('should pass zero values correctly for radius and strength', function () { mockController.radius = 0; mockController.strength = 0; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uRadius', 0); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uStrength', 0); }); it('should pass zero position values correctly', function () { mockController.x = 0; mockController.y = 0; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); expect(mockProgramManager.setUniform).toHaveBeenCalledWith('uPosition', [ 0, 0 ]); }); it('should ignore the drawingContext argument', function () { var fakContext = { someProperty: 'value' }; expect(function () { FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, fakContext); }).not.toThrow(); expect(mockProgramManager.setUniform).toHaveBeenCalledTimes(5); }); it('should pass floating point color channel values correctly', function () { mockController.color = { redGL: 0.333, greenGL: 0.667, blueGL: 0.111, alphaGL: 0.999 }; FilterVignette.prototype.setupUniforms.call(mockInstance, mockController, null); var colorCall = mockProgramManager.setUniform.mock.calls.find(function (call) { return call[0] === 'uColor'; }); expect(colorCall).toBeDefined(); expect(colorCall[1][0]).toBeCloseTo(0.333); expect(colorCall[1][1]).toBeCloseTo(0.667); expect(colorCall[1][2]).toBeCloseTo(0.111); expect(colorCall[1][3]).toBeCloseTo(0.999); }); }); });