phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
339 lines (295 loc) • 11.1 kB
JavaScript
var FilterWipe = require('../../../../../src/renderer/webgl/renderNodes/filters/FilterWipe');
describe('FilterWipe', function ()
{
it('should be importable', function ()
{
expect(FilterWipe).toBeDefined();
});
describe('setupTextures', function ()
{
it('should set textures[1] to the glTexture from the controller wipeTexture', function ()
{
var mockGlTexture = { id: 'mock-gl-texture' };
var controller = {
wipeTexture: {
get: function ()
{
return { glTexture: mockGlTexture };
}
}
};
var textures = [];
var mockThis = {};
FilterWipe.prototype.setupTextures.call(mockThis, controller, textures, null);
expect(textures[1]).toBe(mockGlTexture);
});
it('should leave textures[0] unset', function ()
{
var mockGlTexture = { id: 'mock-gl-texture' };
var controller = {
wipeTexture: {
get: function ()
{
return { glTexture: mockGlTexture };
}
}
};
var textures = [];
var mockThis = {};
FilterWipe.prototype.setupTextures.call(mockThis, controller, textures, null);
expect(textures[0]).toBeUndefined();
});
it('should overwrite an existing value at textures[1]', function ()
{
var newGlTexture = { id: 'new-texture' };
var controller = {
wipeTexture: {
get: function ()
{
return { glTexture: newGlTexture };
}
}
};
var textures = [ 'tex0', 'old-texture' ];
var mockThis = {};
FilterWipe.prototype.setupTextures.call(mockThis, controller, textures, null);
expect(textures[1]).toBe(newGlTexture);
});
it('should ignore the drawingContext parameter', function ()
{
var mockGlTexture = { id: 'tex' };
var controller = {
wipeTexture: {
get: function ()
{
return { glTexture: mockGlTexture };
}
}
};
var textures = [];
var mockThis = {};
expect(function ()
{
FilterWipe.prototype.setupTextures.call(mockThis, controller, textures, { someContext: true });
}).not.toThrow();
expect(textures[1]).toBe(mockGlTexture);
});
});
describe('setupUniforms', function ()
{
it('should call setUniform for uMainSampler2 with value 1', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: true
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var sampler2Call = calls.find(function (c) { return c.name === 'uMainSampler2'; });
expect(sampler2Call).toBeDefined();
expect(sampler2Call.value).toBe(1);
});
it('should call setUniform for uProgress_WipeWidth_Direction_Axis with correct vec4', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.75,
wipeWidth: 0.2,
direction: -1,
axis: 1,
reveal: false
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var vec4Call = calls.find(function (c) { return c.name === 'uProgress_WipeWidth_Direction_Axis'; });
expect(vec4Call).toBeDefined();
expect(vec4Call.value).toEqual([ 0.75, 0.2, -1, 1 ]);
});
it('should call setUniform for uReveal with the controller reveal value', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0,
wipeWidth: 0.05,
direction: 1,
axis: 0,
reveal: true
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var revealCall = calls.find(function (c) { return c.name === 'uReveal'; });
expect(revealCall).toBeDefined();
expect(revealCall.value).toBe(true);
});
it('should call setUniform exactly three times', function ()
{
var callCount = 0;
var mockProgramManager = {
setUniform: function ()
{
callCount++;
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: false
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
expect(callCount).toBe(3);
});
it('should pass progress = 0 correctly at the start of a wipe', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: true
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var vec4Call = calls.find(function (c) { return c.name === 'uProgress_WipeWidth_Direction_Axis'; });
expect(vec4Call.value[0]).toBe(0);
});
it('should pass progress = 1 correctly at the end of a wipe', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 1,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: true
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var vec4Call = calls.find(function (c) { return c.name === 'uProgress_WipeWidth_Direction_Axis'; });
expect(vec4Call.value[0]).toBe(1);
});
it('should pass axis = 1 for vertical wipe', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: 1,
axis: 1,
reveal: false
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var vec4Call = calls.find(function (c) { return c.name === 'uProgress_WipeWidth_Direction_Axis'; });
expect(vec4Call.value[3]).toBe(1);
});
it('should pass direction = -1 for reverse wipe', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: -1,
axis: 0,
reveal: false
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var vec4Call = calls.find(function (c) { return c.name === 'uProgress_WipeWidth_Direction_Axis'; });
expect(vec4Call.value[2]).toBe(-1);
});
it('should pass reveal = false for hide mode', function ()
{
var calls = [];
var mockProgramManager = {
setUniform: function (name, value)
{
calls.push({ name: name, value: value });
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: false
};
FilterWipe.prototype.setupUniforms.call(mockThis, controller, null);
var revealCall = calls.find(function (c) { return c.name === 'uReveal'; });
expect(revealCall.value).toBe(false);
});
it('should ignore the drawingContext parameter', function ()
{
var callCount = 0;
var mockProgramManager = {
setUniform: function ()
{
callCount++;
}
};
var mockThis = { programManager: mockProgramManager };
var controller = {
progress: 0.5,
wipeWidth: 0.1,
direction: 1,
axis: 0,
reveal: true
};
expect(function ()
{
FilterWipe.prototype.setupUniforms.call(mockThis, controller, { someContext: true });
}).not.toThrow();
expect(callCount).toBe(3);
});
});
});