Skip to content

Commit

Permalink
add PauseListener
Browse files Browse the repository at this point in the history
  • Loading branch information
newagebegins committed Jun 18, 2012
1 parent 441a6bd commit 4378f99
Show file tree
Hide file tree
Showing 27 changed files with 442 additions and 107 deletions.
1 change: 1 addition & 0 deletions BattleCity.html
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
<script type="text/javascript" src="src/BaseWallBuilder.js"></script>
<script type="text/javascript" src="src/ShovelHandler.js"></script>
<script type="text/javascript" src="src/Pause.js"></script>
<script type="text/javascript" src="src/PauseListener.js"></script>

<script type="text/javascript" src="lib/Stats.js"></script>
<script type="text/javascript" src="src/FPSCounter.js"></script>
Expand Down
4 changes: 4 additions & 0 deletions SpecRunner.html
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
<script type="text/javascript" src="spec/FreezeTimerSpec.js"></script>
<script type="text/javascript" src="spec/BaseWallBuilderSpec.js"></script>
<script type="text/javascript" src="spec/ShovelHandlerSpec.js"></script>
<script type="text/javascript" src="spec/PauseSpec.js"></script>
<script type="text/javascript" src="spec/PauseListenerSpec.js"></script>

<!-- source files -->
<script type="text/javascript" src="src/Utils.js"></script>
Expand Down Expand Up @@ -112,6 +114,8 @@
<script type="text/javascript" src="src/FreezeTimer.js"></script>
<script type="text/javascript" src="src/BaseWallBuilder.js"></script>
<script type="text/javascript" src="src/ShovelHandler.js"></script>
<script type="text/javascript" src="src/Pause.js"></script>
<script type="text/javascript" src="src/PauseListener.js"></script>

<script type="text/javascript">
(function() {
Expand Down
36 changes: 30 additions & 6 deletions spec/AITankControllerSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,32 @@ describe("AITankController", function () {
});
});

it("#update", function () {
spyOn(controller, 'updateShoot');
spyOn(controller, 'updateDirection');
controller.update();
expect(controller.updateShoot).toHaveBeenCalled();
expect(controller.updateDirection).toHaveBeenCalled();
describe("#update", function () {
it("normal", function () {
spyOn(controller, 'updateShoot');
spyOn(controller, 'updateDirection');
controller.update();
expect(controller.updateShoot).toHaveBeenCalled();
expect(controller.updateDirection).toHaveBeenCalled();
});

it("pause", function () {
spyOn(controller, 'updateShoot');
spyOn(controller, 'updateDirection');
eventManager.fireEvent({'name': Pause.Event.START});
controller.update();
expect(controller.updateShoot).not.toHaveBeenCalled();
expect(controller.updateDirection).not.toHaveBeenCalled();
});

it("freeze", function () {
spyOn(controller, 'updateShoot');
spyOn(controller, 'updateDirection');
controller.freeze();
controller.update();
expect(controller.updateShoot).not.toHaveBeenCalled();
expect(controller.updateDirection).not.toHaveBeenCalled();
});
});

describe("#notify", function () {
Expand All @@ -191,8 +211,12 @@ describe("AITankController", function () {
it("#destroy", function () {
spyOn(eventManager, 'fireEvent');
spyOn(eventManager, 'removeSubscriber');
var pauseListener = new PauseListener(eventManager);
spyOn(pauseListener, 'destroy');
controller.setPauseListener(pauseListener);
controller.destroy();
expect(eventManager.removeSubscriber).toHaveBeenCalledWith(controller);
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': AITankController.Event.DESTROYED, 'controller': controller});
expect(pauseListener.destroy).toHaveBeenCalled();
});
});
74 changes: 45 additions & 29 deletions spec/EnemyFactorySpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,35 +39,51 @@ describe("EnemyFactory", function () {
expect(factory.getNextEnemy()).toEqual(ENEMY_4);
});

it("#update", function () {
var eventManager = new EventManager();
var factory = new EnemyFactory(eventManager);
factory.setEnemies([{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC}]);
factory.setPositions([new Point(0,0)]);
factory.setEnemyCountLimit(2);
factory.setInterval(3);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
var points = new Points(eventManager);
factory.notify({'name': Points.Event.DESTROYED, 'points': points});
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
describe("#update", function () {
it("normal", function () {
var eventManager = new EventManager();
var factory = new EnemyFactory(eventManager);
factory.setEnemies([{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC}]);
factory.setPositions([new Point(0,0)]);
factory.setEnemyCountLimit(2);
factory.setInterval(3);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(1);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
var points = new Points(eventManager);
factory.notify({'name': Points.Event.DESTROYED, 'points': points});
factory.update();
expect(factory.getEnemyCount()).toEqual(2);
});

it("pause", function () {
var eventManager = new EventManager();
var factory = new EnemyFactory(eventManager);
factory.setEnemies([{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC},{type: Tank.Type.BASIC}]);
factory.setPositions([new Point(0,0)]);
eventManager.fireEvent({'name': Pause.Event.START});
factory.update();
expect(factory.getEnemyCount()).toEqual(0);
factory.update();
expect(factory.getEnemyCount()).toEqual(0);
factory.update();
expect(factory.getEnemyCount()).toEqual(0);
});
});

describe("#create", function () {
Expand Down
32 changes: 23 additions & 9 deletions spec/ExplosionSpec.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
describe("Explosion", function () {
it("should be destroyed when animation is finished", function () {
var eventManager = new EventManager();
var explosion = new Explosion(eventManager);
spyOn(explosion, 'destroy');
explosion.setFrames([1]);
explosion.update();
expect(explosion.destroy).not.toHaveBeenCalled();
explosion.update();
expect(explosion.destroy).toHaveBeenCalled();
describe("#updateHook", function () {
it("normal", function () {
var eventManager = new EventManager();
var explosion = new Explosion(eventManager);
spyOn(explosion, 'destroy');
explosion.setFrames([1]);
explosion.update();
expect(explosion.destroy).not.toHaveBeenCalled();
explosion.update();
expect(explosion.destroy).toHaveBeenCalled();
});

it("pause", function () {
var eventManager = new EventManager();
var explosion = new Explosion(eventManager);
eventManager.fireEvent({'name': Pause.Event.START});
spyOn(explosion, 'destroy');
explosion.setFrames([1]);
explosion.update();
expect(explosion.destroy).not.toHaveBeenCalled();
explosion.update();
expect(explosion.destroy).not.toHaveBeenCalled();
});
});
});
69 changes: 43 additions & 26 deletions spec/FreezeTimerSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,49 @@ describe("FreezeTimer", function () {
});
});

it("#update", function () {
var eventManager = new EventManager();
var timer = new FreezeTimer(eventManager);
spyOn(timer, 'unfreeze');
timer.setDuration(2);
timer.start();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).toHaveBeenCalled();
timer.unfreeze.reset();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.start();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).toHaveBeenCalled();
describe("#update", function () {
it("normal", function () {
var eventManager = new EventManager();
var timer = new FreezeTimer(eventManager);
spyOn(timer, 'unfreeze');
timer.setDuration(2);
timer.start();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).toHaveBeenCalled();
timer.unfreeze.reset();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.start();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).toHaveBeenCalled();
});

it("pause", function () {
var eventManager = new EventManager();
var timer = new FreezeTimer(eventManager);
eventManager.fireEvent({'name': Pause.Event.START});
spyOn(timer, 'unfreeze');
timer.setDuration(2);
timer.start();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
timer.update();
expect(timer.unfreeze).not.toHaveBeenCalled();
});
});

it("#unfreeze", function () {
Expand Down
46 changes: 46 additions & 0 deletions spec/PauseListenerSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
describe("PauseListener", function () {
it("should subscribe", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'addSubscriber');
var listener = new PauseListener(eventManager);
expect(eventManager.addSubscriber).toHaveBeenCalledWith(listener, [Pause.Event.START, Pause.Event.END]);
});

describe("#notify", function () {
it("Pause.Event.START", function () {
var eventManager = new EventManager();
var listener = new PauseListener(eventManager);
spyOn(listener, 'pause');
listener.notify({'name': Pause.Event.START});
expect(listener.pause).toHaveBeenCalled();
});

it("Pause.Event.END", function () {
var eventManager = new EventManager();
var listener = new PauseListener(eventManager);
spyOn(listener, 'unpause');
listener.notify({'name': Pause.Event.END});
expect(listener.unpause).toHaveBeenCalled();
});
});

it("#isPaused", function () {
var eventManager = new EventManager();
var listener = new PauseListener(eventManager);
expect(listener.isPaused()).toBeFalsy();
listener.pause();
expect(listener.isPaused()).toBeTruthy();
listener.unpause();
expect(listener.isPaused()).toBeFalsy();
listener.pause();
expect(listener.isPaused()).toBeTruthy();
});

it("#destroy", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'removeSubscriber');
var listener = new PauseListener(eventManager);
listener.destroy();
expect(eventManager.removeSubscriber).toHaveBeenCalledWith(listener);
});
});
44 changes: 44 additions & 0 deletions spec/PauseSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
describe("Pause", function () {
it("should subscribe", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'addSubscriber');
var pause = new Pause(eventManager);
expect(eventManager.addSubscriber).toHaveBeenCalledWith(pause,
[Keyboard.Event.KEY_PRESSED, Keyboard.Event.KEY_RELEASED]);
});

describe("#notify", function () {
it("Keyboard.Event.KEY_PRESSED", function () {
var eventManager = new EventManager();
var pause = new Pause(eventManager);
spyOn(pause, 'keyPressed');
pause.notify({'name': Keyboard.Event.KEY_PRESSED, 'key': Keyboard.Key.P});
expect(pause.keyPressed).toHaveBeenCalledWith(Keyboard.Key.P);
});

it("Keyboard.Event.KEY_RELEASED", function () {
var eventManager = new EventManager();
var pause = new Pause(eventManager);
spyOn(pause, 'keyReleased');
pause.notify({'name': Keyboard.Event.KEY_RELEASED, 'key': Keyboard.Key.P});
expect(pause.keyReleased).toHaveBeenCalledWith(Keyboard.Key.P);
});
});

it("#keyPressed and #keyReleased", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent');
var pause = new Pause(eventManager);

pause.keyPressed(Keyboard.Key.P);
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': Pause.Event.START});

eventManager.fireEvent.reset();
pause.keyPressed(Keyboard.Key.P);
expect(eventManager.fireEvent).not.toHaveBeenCalled();

pause.keyReleased(Keyboard.Key.P);
pause.keyPressed(Keyboard.Key.P);
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': Pause.Event.END});
});
});
23 changes: 17 additions & 6 deletions spec/PointsSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,23 @@ describe("Points", function () {
expect(points.destroy).toHaveBeenCalled();
});

it("#updateHook", function () {
var eventManager = new EventManager();
var points = new Points(eventManager);
spyOn(points, 'updateTimer');
points.updateHook();
expect(points.updateTimer).toHaveBeenCalled();
describe("#updateHook", function () {
it("normal", function () {
var eventManager = new EventManager();
var points = new Points(eventManager);
spyOn(points, 'updateTimer');
points.updateHook();
expect(points.updateTimer).toHaveBeenCalled();
});

it("pause", function () {
var eventManager = new EventManager();
var points = new Points(eventManager);
eventManager.fireEvent({'name': Pause.Event.START});
spyOn(points, 'updateTimer');
points.updateHook();
expect(points.updateTimer).not.toHaveBeenCalled();
});
});

it("#destroyHook", function () {
Expand Down
Loading

0 comments on commit 4378f99

Please sign in to comment.