UNPKG

@tdurtschi/bug

Version:

Bug is a simulation that models a weevil walking around in an HTML canvas.

87 lines 4.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var game_engine_1 = require("./game-engine"); var entity_manager_1 = __importDefault(require("./entity-manager")); var bug_1 = __importDefault(require("./entities/bug/bug")); var fakeUI_1 = __importDefault(require("../../spec/fixtures/fakeUI")); var plant_1 = __importDefault(require("./entities/plant/plant")); describe("Game Engine", function () { beforeEach(function () { return jasmine.clock().install(); }); afterEach(function () { return jasmine.clock().uninstall(); }); var getGameEngine = function (_a) { var gameUI = _a.gameUI, entityManager = _a.entityManager; return new game_engine_1.GameEngine({ gameUI: gameUI, entityManager: entityManager, width: 0, height: 0 }); }; var fakeUI; beforeEach(function () { fakeUI = fakeUI_1.default(); }); it("Creates as an unstarted game", function () { var spyBug = Object.assign(new bug_1.default(), { update: jasmine.createSpy("BUG-update") }); getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([spyBug]) }); jasmine.clock().tick(1000); expect(spyBug.update).not.toHaveBeenCalled(); }); it("Updates entities after game is started", function () { var spyBug = Object.assign(new bug_1.default(), { update: jasmine.createSpy("BUG-update") }); var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([spyBug]) }); game.start(); jasmine.clock().tick(1000); expect(spyBug.update).toHaveBeenCalled(); }); it("Starts the UI after game is started", function () { var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([]) }); game.start(); expect(fakeUI.start).toHaveBeenCalled(); }); it("Doesn't update entities when paused.", function () { var spyBug = Object.assign(new bug_1.default(), { update: jasmine.createSpy("BUG-update") }); var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([spyBug]) }); game.start(); game.togglePause(); jasmine.clock().tick(1000); expect(spyBug.update).not.toHaveBeenCalled(); }); it("Pauses the UI when paused", function () { var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([]) }); game.togglePause(); expect(fakeUI.togglePause).toHaveBeenCalled(); }); it("Can add a bug to the game", function () { var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([]) }); game.addBug({ id: 80 }); expect(game.getEntities().length).toBeGreaterThan(0); expect(game.getEntities().filter(function (e) { return e instanceof bug_1.default; })[0].id).toEqual(80); }); it("Can add a plant to the game", function () { var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([]) }); game.addPlant({ id: 100 }); expect(game.getEntities().length).toBeGreaterThan(0); expect(game.getEntities().filter(function (e) { return e instanceof plant_1.default; })[0].id).toEqual(100); }); it("Updates the game entities slower when the speed is reduced", function () { var update = jasmine.createSpy("BUG-update"); var spyBug = Object.assign(new bug_1.default(), { update: update }); var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([spyBug]) }); game.start(); game.setSpeed(100); jasmine.clock().tick(1000); var updateCount100 = update.calls.count(); update.calls.reset(); game.setSpeed(50); jasmine.clock().tick(1000); var updateCount50 = update.calls.count(); expect(updateCount100).withContext("Game update count was wrong").toBeGreaterThan(updateCount50); }); it("Updates the game entities slower when the speed is reduced", function (done) { var game = getGameEngine({ gameUI: fakeUI, entityManager: new entity_manager_1.default([]) }); game.start(); game.setSpeed(0); jasmine.clock().tick(1000); done(); }); }); //# sourceMappingURL=game-engine.spec.js.map