UNPKG

phaser

Version:

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

142 lines (124 loc) 5.58 kB
var FilterQuantize = require('../../../../../src/renderer/webgl/renderNodes/filters/FilterQuantize'); describe('FilterQuantize', function () { it('should be importable', function () { expect(FilterQuantize).toBeDefined(); }); describe('setupUniforms', function () { var mockInstance; var mockProgramManager; var uniformCalls; beforeEach(function () { uniformCalls = {}; mockProgramManager = { setUniform: function (name, value) { uniformCalls[name] = value; } }; mockInstance = { programManager: mockProgramManager, setupUniforms: FilterQuantize.prototype.setupUniforms }; }); it('should set uSteps uniform from controller.steps', function () { var controller = { steps: 8, gamma: 1.0, offset: 0.0, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uSteps']).toBe(8); }); it('should set uGamma uniform from controller.gamma', function () { var controller = { steps: 4, gamma: 2.2, offset: 0.0, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uGamma']).toBeCloseTo(2.2); }); it('should set uOffset uniform from controller.offset', function () { var controller = { steps: 4, gamma: 1.0, offset: 0.5, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uOffset']).toBeCloseTo(0.5); }); it('should set uMode uniform from controller.mode', function () { var controller = { steps: 4, gamma: 1.0, offset: 0.0, mode: 2, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uMode']).toBe(2); }); it('should set uDither uniform from controller.dither', function () { var controller = { steps: 4, gamma: 1.0, offset: 0.0, mode: 0, dither: true }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uDither']).toBe(true); }); it('should set all five uniforms in a single call', function () { var controller = { steps: 16, gamma: 1.5, offset: 0.1, mode: 1, dither: false }; mockInstance.setupUniforms(controller, null); expect(Object.keys(uniformCalls).length).toBe(5); expect(uniformCalls['uSteps']).toBe(16); expect(uniformCalls['uGamma']).toBeCloseTo(1.5); expect(uniformCalls['uOffset']).toBeCloseTo(0.1); expect(uniformCalls['uMode']).toBe(1); expect(uniformCalls['uDither']).toBe(false); }); it('should pass zero values correctly', function () { var controller = { steps: 0, gamma: 0, offset: 0, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uSteps']).toBe(0); expect(uniformCalls['uGamma']).toBe(0); expect(uniformCalls['uOffset']).toBe(0); expect(uniformCalls['uMode']).toBe(0); expect(uniformCalls['uDither']).toBe(false); }); it('should pass negative values correctly', function () { var controller = { steps: -1, gamma: -0.5, offset: -1.0, mode: -1, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uSteps']).toBe(-1); expect(uniformCalls['uGamma']).toBeCloseTo(-0.5); expect(uniformCalls['uOffset']).toBeCloseTo(-1.0); expect(uniformCalls['uMode']).toBe(-1); }); it('should pass large step values correctly', function () { var controller = { steps: 256, gamma: 1.0, offset: 0.0, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uSteps']).toBe(256); }); it('should ignore the drawingContext argument', function () { var controller = { steps: 4, gamma: 1.0, offset: 0.0, mode: 0, dither: false }; var sentinel = {}; mockInstance.setupUniforms(controller, sentinel); expect(uniformCalls['uSteps']).toBe(4); }); it('should use programManager from the instance, not a global', function () { var secondCalls = {}; var secondInstance = { programManager: { setUniform: function (name, value) { secondCalls[name] = value; } }, setupUniforms: FilterQuantize.prototype.setupUniforms }; var controller = { steps: 3, gamma: 0.8, offset: 0.2, mode: 1, dither: true }; secondInstance.setupUniforms(controller, null); expect(Object.keys(uniformCalls).length).toBe(0); expect(secondCalls['uSteps']).toBe(3); }); it('should forward floating point step values without rounding', function () { var controller = { steps: 7.5, gamma: 1.0, offset: 0.0, mode: 0, dither: false }; mockInstance.setupUniforms(controller, null); expect(uniformCalls['uSteps']).toBeCloseTo(7.5); }); }); });