phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
187 lines (146 loc) • 5.41 kB
JavaScript
var VideoWebGLRenderer = require('../../../src/gameobjects/video/VideoWebGLRenderer');
describe('VideoWebGLRenderer', function ()
{
var renderer;
var src;
var drawingContext;
var parentMatrix;
var mockRun;
var mockAddToRenderList;
beforeEach(function ()
{
mockRun = vi.fn();
mockAddToRenderList = vi.fn();
renderer = {};
src = {
videoTexture: {},
customRenderNodes: {},
defaultRenderNodes: {
Submitter: { run: mockRun },
Texturer: { name: 'defaultTexturer' },
Transformer: { name: 'defaultTransformer' }
}
};
drawingContext = {
camera: {
addToRenderList: mockAddToRenderList
}
};
parentMatrix = {};
});
it('should be a function', function ()
{
expect(typeof VideoWebGLRenderer).toBe('function');
});
it('should return early if src.videoTexture is falsy', function ()
{
src.videoTexture = null;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockAddToRenderList).not.toHaveBeenCalled();
expect(mockRun).not.toHaveBeenCalled();
});
it('should return early if src.videoTexture is undefined', function ()
{
src.videoTexture = undefined;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockAddToRenderList).not.toHaveBeenCalled();
expect(mockRun).not.toHaveBeenCalled();
});
it('should return early if src.videoTexture is false', function ()
{
src.videoTexture = false;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockAddToRenderList).not.toHaveBeenCalled();
expect(mockRun).not.toHaveBeenCalled();
});
it('should add src to render list when videoTexture is set', function ()
{
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockAddToRenderList).toHaveBeenCalledOnce();
expect(mockAddToRenderList).toHaveBeenCalledWith(src);
});
it('should call run on the default Submitter when no custom Submitter is set', function ()
{
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockRun).toHaveBeenCalledOnce();
});
it('should call run with correct arguments using default nodes', function ()
{
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockRun).toHaveBeenCalledWith(
drawingContext,
src,
parentMatrix,
0,
src.defaultRenderNodes.Texturer,
src.defaultRenderNodes.Transformer
);
});
it('should use custom Submitter when provided', function ()
{
var customRun = vi.fn();
src.customRenderNodes.Submitter = { run: customRun };
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(customRun).toHaveBeenCalledOnce();
expect(mockRun).not.toHaveBeenCalled();
});
it('should pass custom Texturer to run when provided', function ()
{
var customTexturer = { name: 'customTexturer' };
src.customRenderNodes.Texturer = customTexturer;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockRun).toHaveBeenCalledWith(
drawingContext,
src,
parentMatrix,
0,
customTexturer,
src.defaultRenderNodes.Transformer
);
});
it('should pass custom Transformer to run when provided', function ()
{
var customTransformer = { name: 'customTransformer' };
src.customRenderNodes.Transformer = customTransformer;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(mockRun).toHaveBeenCalledWith(
drawingContext,
src,
parentMatrix,
0,
src.defaultRenderNodes.Texturer,
customTransformer
);
});
it('should use all custom render nodes when all are provided', function ()
{
var customRun = vi.fn();
var customTexturer = { name: 'customTexturer' };
var customTransformer = { name: 'customTransformer' };
src.customRenderNodes.Submitter = { run: customRun };
src.customRenderNodes.Texturer = customTexturer;
src.customRenderNodes.Transformer = customTransformer;
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
expect(customRun).toHaveBeenCalledWith(
drawingContext,
src,
parentMatrix,
0,
customTexturer,
customTransformer
);
});
it('should pass 0 as the fourth argument to run', function ()
{
VideoWebGLRenderer(renderer, src, drawingContext, parentMatrix);
var callArgs = mockRun.mock.calls[0];
expect(callArgs[3]).toBe(0);
});
it('should pass parentMatrix as the third argument to run', function ()
{
var specificMatrix = { a: 1, b: 2 };
VideoWebGLRenderer(renderer, src, drawingContext, specificMatrix);
var callArgs = mockRun.mock.calls[0];
expect(callArgs[2]).toBe(specificMatrix);
});
});