phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
178 lines (148 loc) • 6.7 kB
JavaScript
import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
describe('TilemapFactory', function ()
{
describe('registration', function ()
{
it('should register a tilemap factory function on GameObjectFactory', function ()
{
var handlers = {};
var mockFactory = {
register: function (key, fn)
{
handlers[key] = fn;
}
};
var registerSpy = vi.spyOn(mockFactory, 'register');
mockFactory.register('tilemap', function () {});
expect(registerSpy).toHaveBeenCalledWith('tilemap', expect.any(Function));
expect(handlers['tilemap']).toBeDefined();
});
});
describe('null-to-undefined conversion', function ()
{
var capturedArgs;
var handler;
var mockScene;
beforeEach(function ()
{
capturedArgs = null;
handler = function (key, tileWidth, tileHeight, width, height, data, insertNull)
{
if (key === null) { key = undefined; }
if (tileWidth === null) { tileWidth = undefined; }
if (tileHeight === null) { tileHeight = undefined; }
if (width === null) { width = undefined; }
if (height === null) { height = undefined; }
capturedArgs = { key: key, tileWidth: tileWidth, tileHeight: tileHeight, width: width, height: height, data: data, insertNull: insertNull };
return capturedArgs;
};
mockScene = { sys: {} };
});
afterEach(function ()
{
vi.restoreAllMocks();
});
it('should convert null key to undefined', function ()
{
handler.call({ scene: mockScene }, null, 32, 32, 10, 10, null, false);
expect(capturedArgs.key).toBeUndefined();
});
it('should convert null tileWidth to undefined', function ()
{
handler.call({ scene: mockScene }, 'mapKey', null, 32, 10, 10, null, false);
expect(capturedArgs.tileWidth).toBeUndefined();
});
it('should convert null tileHeight to undefined', function ()
{
handler.call({ scene: mockScene }, 'mapKey', 32, null, 10, 10, null, false);
expect(capturedArgs.tileHeight).toBeUndefined();
});
it('should convert null width to undefined', function ()
{
handler.call({ scene: mockScene }, 'mapKey', 32, 32, null, 10, null, false);
expect(capturedArgs.width).toBeUndefined();
});
it('should convert null height to undefined', function ()
{
handler.call({ scene: mockScene }, 'mapKey', 32, 32, 10, null, null, false);
expect(capturedArgs.height).toBeUndefined();
});
it('should convert all null positional params to undefined simultaneously', function ()
{
handler.call({ scene: mockScene }, null, null, null, null, null, null, false);
expect(capturedArgs.key).toBeUndefined();
expect(capturedArgs.tileWidth).toBeUndefined();
expect(capturedArgs.tileHeight).toBeUndefined();
expect(capturedArgs.width).toBeUndefined();
expect(capturedArgs.height).toBeUndefined();
});
it('should pass through non-null key unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 10, null, false);
expect(capturedArgs.key).toBe('myMap');
});
it('should pass through non-null tileWidth unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 16, 32, 10, 10, null, false);
expect(capturedArgs.tileWidth).toBe(16);
});
it('should pass through non-null tileHeight unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 16, 10, 10, null, false);
expect(capturedArgs.tileHeight).toBe(16);
});
it('should pass through non-null width unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 20, 10, null, false);
expect(capturedArgs.width).toBe(20);
});
it('should pass through non-null height unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 20, null, false);
expect(capturedArgs.height).toBe(20);
});
it('should not convert undefined key (leave as undefined)', function ()
{
handler.call({ scene: mockScene }, undefined, 32, 32, 10, 10, null, false);
expect(capturedArgs.key).toBeUndefined();
});
it('should not convert undefined tileWidth (leave as undefined)', function ()
{
handler.call({ scene: mockScene }, 'myMap', undefined, 32, 10, 10, null, false);
expect(capturedArgs.tileWidth).toBeUndefined();
});
it('should pass data through unchanged when it is a 2D array', function ()
{
var tileData = [[1, 2], [3, 4]];
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 10, tileData, false);
expect(capturedArgs.data).toBe(tileData);
});
it('should pass data through unchanged when it is null', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 10, null, false);
expect(capturedArgs.data).toBeNull();
});
it('should pass insertNull true through unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 10, null, true);
expect(capturedArgs.insertNull).toBe(true);
});
it('should pass insertNull false through unchanged', function ()
{
handler.call({ scene: mockScene }, 'myMap', 32, 32, 10, 10, null, false);
expect(capturedArgs.insertNull).toBe(false);
});
it('should handle all params as real values with no conversion', function ()
{
var tileData = [[0, 1, 2]];
handler.call({ scene: mockScene }, 'level1', 16, 16, 30, 20, tileData, true);
expect(capturedArgs.key).toBe('level1');
expect(capturedArgs.tileWidth).toBe(16);
expect(capturedArgs.tileHeight).toBe(16);
expect(capturedArgs.width).toBe(30);
expect(capturedArgs.height).toBe(20);
expect(capturedArgs.data).toBe(tileData);
expect(capturedArgs.insertNull).toBe(true);
});
});
});