UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

251 lines (219 loc) 9.32 kB
var Collider = require('../../../src/physics/arcade/Collider'); describe('Collider', function () { var mockWorld; var obj1; var obj2; var collideCallback; var processCallback; var callbackContext; beforeEach(function () { mockWorld = { collideObjects: vi.fn(), removeCollider: vi.fn() }; obj1 = { id: 'object1' }; obj2 = { id: 'object2' }; collideCallback = vi.fn(); processCallback = vi.fn(); callbackContext = { scope: true }; }); describe('constructor', function () { it('should assign the world reference', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.world).toBe(mockWorld); }); it('should set name to empty string by default', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.name).toBe(''); }); it('should set active to true by default', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.active).toBe(true); }); it('should set overlapOnly to false when passed false', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.overlapOnly).toBe(false); }); it('should set overlapOnly to true when passed true', function () { var collider = new Collider(mockWorld, true, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.overlapOnly).toBe(true); }); it('should assign object1', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.object1).toBe(obj1); }); it('should assign object2', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.object2).toBe(obj2); }); it('should assign collideCallback', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.collideCallback).toBe(collideCallback); }); it('should assign processCallback', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.processCallback).toBe(processCallback); }); it('should assign callbackContext', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); expect(collider.callbackContext).toBe(callbackContext); }); it('should accept null for optional callback arguments', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); expect(collider.collideCallback).toBeNull(); expect(collider.processCallback).toBeNull(); expect(collider.callbackContext).toBeNull(); }); }); describe('setName', function () { it('should set the name property', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.setName('myCollider'); expect(collider.name).toBe('myCollider'); }); it('should return the collider instance for chaining', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); var result = collider.setName('test'); expect(result).toBe(collider); }); it('should allow overwriting the name', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.setName('first'); collider.setName('second'); expect(collider.name).toBe('second'); }); it('should allow setting an empty string name', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.setName('named'); collider.setName(''); expect(collider.name).toBe(''); }); it('should support chained calls', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.setName('a').setName('b'); expect(collider.name).toBe('b'); }); }); describe('update', function () { it('should call world.collideObjects with the correct arguments', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.update(); expect(mockWorld.collideObjects).toHaveBeenCalledOnce(); expect(mockWorld.collideObjects).toHaveBeenCalledWith( obj1, obj2, collideCallback, processCallback, callbackContext, false ); }); it('should pass overlapOnly as true when configured', function () { var collider = new Collider(mockWorld, true, obj1, obj2, collideCallback, processCallback, callbackContext); collider.update(); expect(mockWorld.collideObjects).toHaveBeenCalledWith( obj1, obj2, collideCallback, processCallback, callbackContext, true ); }); it('should pass null callbacks when none were provided', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.update(); expect(mockWorld.collideObjects).toHaveBeenCalledWith( obj1, obj2, null, null, null, false ); }); it('should call world.collideObjects each time update is called', function () { var collider = new Collider(mockWorld, false, obj1, obj2, null, null, null); collider.update(); collider.update(); collider.update(); expect(mockWorld.collideObjects).toHaveBeenCalledTimes(3); }); }); describe('destroy', function () { it('should call world.removeCollider with itself', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(mockWorld.removeCollider).toHaveBeenCalledWith(collider); }); it('should set active to false', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.active).toBe(false); }); it('should set world to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.world).toBeNull(); }); it('should set object1 to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.object1).toBeNull(); }); it('should set object2 to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.object2).toBeNull(); }); it('should set collideCallback to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.collideCallback).toBeNull(); }); it('should set processCallback to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.processCallback).toBeNull(); }); it('should set callbackContext to null', function () { var collider = new Collider(mockWorld, false, obj1, obj2, collideCallback, processCallback, callbackContext); collider.destroy(); expect(collider.callbackContext).toBeNull(); }); }); });