phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
108 lines (93 loc) • 4.22 kB
JavaScript
var BaseShader = require('../../../src/display/shader/BaseShader');
describe('BaseShader', function ()
{
describe('constructor', function ()
{
it('should create a shader with key and glsl', function ()
{
var shader = new BaseShader('testKey', 'void main() {}');
expect(shader.key).toBe('testKey');
expect(shader.glsl).toBe('void main() {}');
});
it('should default metadata to an empty object when not provided', function ()
{
var shader = new BaseShader('testKey', 'void main() {}');
expect(shader.metadata).toBeDefined();
expect(typeof shader.metadata).toBe('object');
expect(Object.keys(shader.metadata).length).toBe(0);
});
it('should accept custom metadata', function ()
{
var meta = { author: 'Test', version: '1.0' };
var shader = new BaseShader('testKey', 'void main() {}', meta);
expect(shader.metadata).toBe(meta);
expect(shader.metadata.author).toBe('Test');
expect(shader.metadata.version).toBe('1.0');
});
it('should store the key exactly as provided', function ()
{
var shader = new BaseShader('my-special_shader.123', 'void main() {}');
expect(shader.key).toBe('my-special_shader.123');
});
it('should store the glsl source exactly as provided', function ()
{
var glsl = 'precision mediump float;\nuniform float time;\nvoid main() { gl_FragColor = vec4(1.0); }';
var shader = new BaseShader('fragShader', glsl);
expect(shader.glsl).toBe(glsl);
});
it('should accept an empty string as glsl', function ()
{
var shader = new BaseShader('emptyShader', '');
expect(shader.glsl).toBe('');
});
it('should accept an empty string as key', function ()
{
var shader = new BaseShader('', 'void main() {}');
expect(shader.key).toBe('');
});
it('should accept null metadata explicitly', function ()
{
var shader = new BaseShader('testKey', 'void main() {}', null);
expect(shader.metadata).toBeNull();
});
it('should accept metadata with nested objects', function ()
{
var meta = { uniforms: { time: { type: 'float', value: 0 } } };
var shader = new BaseShader('testKey', 'void main() {}', meta);
expect(shader.metadata.uniforms.time.type).toBe('float');
expect(shader.metadata.uniforms.time.value).toBe(0);
});
it('should have exactly the expected properties', function ()
{
var shader = new BaseShader('testKey', 'void main() {}');
expect(shader.hasOwnProperty('key')).toBe(true);
expect(shader.hasOwnProperty('glsl')).toBe(true);
expect(shader.hasOwnProperty('metadata')).toBe(true);
});
it('should allow metadata to be mutated after construction', function ()
{
var shader = new BaseShader('testKey', 'void main() {}');
shader.metadata.author = 'Phaser';
expect(shader.metadata.author).toBe('Phaser');
});
it('should allow key to be mutated after construction', function ()
{
var shader = new BaseShader('oldKey', 'void main() {}');
shader.key = 'newKey';
expect(shader.key).toBe('newKey');
});
it('should allow glsl to be mutated after construction', function ()
{
var shader = new BaseShader('testKey', 'void main() {}');
shader.glsl = 'void main() { gl_FragColor = vec4(0.0); }';
expect(shader.glsl).toBe('void main() { gl_FragColor = vec4(0.0); }');
});
it('should not share default metadata between instances', function ()
{
var shader1 = new BaseShader('key1', 'void main() {}');
var shader2 = new BaseShader('key2', 'void main() {}');
shader1.metadata.foo = 'bar';
expect(shader2.metadata.foo).toBeUndefined();
});
});
});