phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
186 lines (148 loc) • 5.79 kB
JavaScript
var GeometryMask = require('../../../src/display/mask/GeometryMask');
describe('GeometryMask', function ()
{
var mockGraphics;
beforeEach(function ()
{
mockGraphics = {
renderCanvas: vi.fn()
};
});
describe('constructor', function ()
{
it('should set geometryMask to the provided graphics object', function ()
{
var mask = new GeometryMask(null, mockGraphics);
expect(mask.geometryMask).toBe(mockGraphics);
});
it('should accept null as graphicsGeometry', function ()
{
var mask = new GeometryMask(null, null);
expect(mask.geometryMask).toBeNull();
});
it('should ignore the scene parameter', function ()
{
var mask = new GeometryMask('some-scene', mockGraphics);
expect(mask.geometryMask).toBe(mockGraphics);
});
});
describe('setShape', function ()
{
it('should update geometryMask to the new graphics object', function ()
{
var mask = new GeometryMask(null, mockGraphics);
var newGraphics = { renderCanvas: vi.fn() };
mask.setShape(newGraphics);
expect(mask.geometryMask).toBe(newGraphics);
});
it('should return this for chaining', function ()
{
var mask = new GeometryMask(null, mockGraphics);
var result = mask.setShape(mockGraphics);
expect(result).toBe(mask);
});
it('should allow setting shape to null', function ()
{
var mask = new GeometryMask(null, mockGraphics);
mask.setShape(null);
expect(mask.geometryMask).toBeNull();
});
it('should replace previous shape with new one', function ()
{
var mask = new GeometryMask(null, mockGraphics);
var secondGraphics = { renderCanvas: vi.fn() };
var thirdGraphics = { renderCanvas: vi.fn() };
mask.setShape(secondGraphics);
expect(mask.geometryMask).toBe(secondGraphics);
mask.setShape(thirdGraphics);
expect(mask.geometryMask).toBe(thirdGraphics);
});
});
describe('preRenderCanvas', function ()
{
it('should call save on the current context', function ()
{
var mockContext = {
save: vi.fn(),
clip: vi.fn()
};
var mockRenderer = { currentContext: mockContext };
var mockCamera = {};
var mask = new GeometryMask(null, mockGraphics);
mask.preRenderCanvas(mockRenderer, {}, mockCamera);
expect(mockContext.save).toHaveBeenCalledOnce();
});
it('should call renderCanvas on the geometry mask', function ()
{
var mockContext = {
save: vi.fn(),
clip: vi.fn()
};
var mockRenderer = { currentContext: mockContext };
var mockCamera = {};
var mask = new GeometryMask(null, mockGraphics);
mask.preRenderCanvas(mockRenderer, {}, mockCamera);
expect(mockGraphics.renderCanvas).toHaveBeenCalledOnce();
expect(mockGraphics.renderCanvas).toHaveBeenCalledWith(mockRenderer, mockGraphics, mockCamera, null, null, true);
});
it('should call clip on the current context', function ()
{
var mockContext = {
save: vi.fn(),
clip: vi.fn()
};
var mockRenderer = { currentContext: mockContext };
var mockCamera = {};
var mask = new GeometryMask(null, mockGraphics);
mask.preRenderCanvas(mockRenderer, {}, mockCamera);
expect(mockContext.clip).toHaveBeenCalledOnce();
});
it('should call save before clip', function ()
{
var callOrder = [];
var mockContext = {
save: vi.fn(function () { callOrder.push('save'); }),
clip: vi.fn(function () { callOrder.push('clip'); })
};
var mockRenderer = { currentContext: mockContext };
var mask = new GeometryMask(null, mockGraphics);
mask.preRenderCanvas(mockRenderer, {}, {});
expect(callOrder[0]).toBe('save');
expect(callOrder[1]).toBe('clip');
});
});
describe('postRenderCanvas', function ()
{
it('should call restore on the current context', function ()
{
var mockContext = { restore: vi.fn() };
var mockRenderer = { currentContext: mockContext };
var mask = new GeometryMask(null, mockGraphics);
mask.postRenderCanvas(mockRenderer);
expect(mockContext.restore).toHaveBeenCalledOnce();
});
it('should call restore exactly once', function ()
{
var mockContext = { restore: vi.fn() };
var mockRenderer = { currentContext: mockContext };
var mask = new GeometryMask(null, mockGraphics);
mask.postRenderCanvas(mockRenderer);
expect(mockContext.restore).toHaveBeenCalledTimes(1);
});
});
describe('destroy', function ()
{
it('should set geometryMask to null', function ()
{
var mask = new GeometryMask(null, mockGraphics);
mask.destroy();
expect(mask.geometryMask).toBeNull();
});
it('should null the reference even if geometryMask was already null', function ()
{
var mask = new GeometryMask(null, null);
mask.destroy();
expect(mask.geometryMask).toBeNull();
});
});
});