Added unit testing for BattleView
This commit is contained in:
parent
389db8d220
commit
9766193944
|
@ -1,4 +1,5 @@
|
||||||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||||
|
/// <reference path="../events/BaseLogEvent.ts"/>
|
||||||
|
|
||||||
module SpaceTac.Game {
|
module SpaceTac.Game {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
|
@ -142,8 +142,12 @@ module SpaceTac.View {
|
||||||
setShipHovered(ship: Game.Ship): void {
|
setShipHovered(ship: Game.Ship): void {
|
||||||
this.ship_hovered = ship;
|
this.ship_hovered = ship;
|
||||||
this.card_hovered.setShip(ship);
|
this.card_hovered.setShip(ship);
|
||||||
if (this.targetting && ship) {
|
if (this.targetting) {
|
||||||
this.targetting.setTargetShip(ship);
|
if (ship) {
|
||||||
|
this.targetting.setTargetShip(ship);
|
||||||
|
} else {
|
||||||
|
this.targetting.unsetTarget();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@ module SpaceTac.View {
|
||||||
// Targetting system
|
// Targetting system
|
||||||
// Allows to pick a target for an action
|
// Allows to pick a target for an action
|
||||||
export class Targetting {
|
export class Targetting {
|
||||||
|
// Current target
|
||||||
|
target: Game.Target;
|
||||||
|
|
||||||
// Signal to receive hovering events
|
// Signal to receive hovering events
|
||||||
targetHovered: Phaser.Signal;
|
targetHovered: Phaser.Signal;
|
||||||
|
|
||||||
|
@ -19,9 +22,6 @@ module SpaceTac.View {
|
||||||
// Source of the targetting
|
// Source of the targetting
|
||||||
private source: PIXI.Sprite;
|
private source: PIXI.Sprite;
|
||||||
|
|
||||||
// Current target
|
|
||||||
private target: Game.Target;
|
|
||||||
|
|
||||||
// Create a default targetting mode
|
// Create a default targetting mode
|
||||||
constructor(battleview: BattleView) {
|
constructor(battleview: BattleView) {
|
||||||
this.battleview = battleview;
|
this.battleview = battleview;
|
||||||
|
|
103
src/scripts/view/specs/BattleView.spec.ts
Normal file
103
src/scripts/view/specs/BattleView.spec.ts
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||||
|
/// <reference path="TestGame.ts"/>
|
||||||
|
/// <reference path="../battle/BattleView.ts"/>
|
||||||
|
|
||||||
|
module SpaceTac.View.Specs {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
export function inbattleview_it(desc: string, func: (battleview: BattleView) => void) {
|
||||||
|
var battleview = new BattleView();
|
||||||
|
var battle = Game.Battle.newQuickRandom();
|
||||||
|
var player = battle.fleets[0].player;
|
||||||
|
ingame_it(desc, (game: Phaser.Game, state: Phaser.State) => {
|
||||||
|
func(battleview);
|
||||||
|
}, battleview, player, battle);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("BattleView", () => {
|
||||||
|
inbattleview_it("forwards events in targetting mode", (battleview: BattleView) => {
|
||||||
|
expect(battleview.targetting).toBeNull();
|
||||||
|
|
||||||
|
battleview.cursorInSpace(5, 5);
|
||||||
|
|
||||||
|
expect(battleview.targetting).toBeNull();
|
||||||
|
|
||||||
|
// Enter targetting mode
|
||||||
|
var result = battleview.enterTargettingMode();
|
||||||
|
|
||||||
|
expect(battleview.targetting).toBeTruthy();
|
||||||
|
expect(result).toBe(battleview.targetting);
|
||||||
|
|
||||||
|
// Collect targetting events
|
||||||
|
var hovered = [];
|
||||||
|
var clicked = [];
|
||||||
|
result.targetHovered.add((target: Game.Target) => {
|
||||||
|
hovered.push(target);
|
||||||
|
});
|
||||||
|
result.targetSelected.add((target: Game.Target) => {
|
||||||
|
clicked.push(target);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Forward selection in space
|
||||||
|
battleview.cursorInSpace(8, 4);
|
||||||
|
|
||||||
|
expect(battleview.ship_hovered).toBeNull();
|
||||||
|
expect(battleview.targetting.target).toEqual(Game.Target.newFromLocation(8, 4));
|
||||||
|
|
||||||
|
// Process a click on space
|
||||||
|
battleview.cursorClicked();
|
||||||
|
|
||||||
|
// Forward ship hovering
|
||||||
|
battleview.cursorOnShip(battleview.battle.play_order[0]);
|
||||||
|
|
||||||
|
expect(battleview.ship_hovered).toEqual(battleview.battle.playing_ship);
|
||||||
|
expect(battleview.targetting.target).toEqual(Game.Target.newFromShip(battleview.battle.playing_ship));
|
||||||
|
|
||||||
|
// Don't leave a ship we're not hovering
|
||||||
|
battleview.cursorOffShip(battleview.battle.play_order[1]);
|
||||||
|
|
||||||
|
expect(battleview.ship_hovered).toEqual(battleview.battle.playing_ship);
|
||||||
|
expect(battleview.targetting.target).toEqual(Game.Target.newFromShip(battleview.battle.playing_ship));
|
||||||
|
|
||||||
|
// Don't move in space while on ship
|
||||||
|
battleview.cursorInSpace(1, 3);
|
||||||
|
|
||||||
|
expect(battleview.ship_hovered).toEqual(battleview.battle.playing_ship);
|
||||||
|
expect(battleview.targetting.target).toEqual(Game.Target.newFromShip(battleview.battle.playing_ship));
|
||||||
|
|
||||||
|
// Process a click on ship
|
||||||
|
battleview.cursorClicked();
|
||||||
|
|
||||||
|
// Leave the ship
|
||||||
|
battleview.cursorOffShip(battleview.battle.play_order[0]);
|
||||||
|
|
||||||
|
expect(battleview.ship_hovered).toBeNull();
|
||||||
|
expect(battleview.targetting.target).toBeNull();
|
||||||
|
|
||||||
|
// Quit targetting
|
||||||
|
battleview.exitTargettingMode();
|
||||||
|
|
||||||
|
expect(battleview.targetting).toBeNull();
|
||||||
|
|
||||||
|
// Events process normally
|
||||||
|
battleview.cursorInSpace(8, 4);
|
||||||
|
expect(battleview.ship_hovered).toBeNull();
|
||||||
|
battleview.cursorOnShip(battleview.battle.play_order[0]);
|
||||||
|
expect(battleview.ship_hovered).toEqual(battleview.battle.playing_ship);
|
||||||
|
|
||||||
|
// Quit twice don't do anything
|
||||||
|
battleview.exitTargettingMode();
|
||||||
|
|
||||||
|
// Check collected targetting events
|
||||||
|
expect(hovered).toEqual([
|
||||||
|
Game.Target.newFromLocation(8, 4),
|
||||||
|
Game.Target.newFromShip(battleview.battle.playing_ship),
|
||||||
|
null
|
||||||
|
]);
|
||||||
|
expect(clicked).toEqual([
|
||||||
|
Game.Target.newFromLocation(8, 4),
|
||||||
|
Game.Target.newFromShip(battleview.battle.playing_ship),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -3,29 +3,28 @@
|
||||||
module SpaceTac.View.Specs {
|
module SpaceTac.View.Specs {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// Internal test state for Phaser
|
|
||||||
class TestState extends Phaser.State {
|
|
||||||
private testfunc: (game: Phaser.Game) => void;
|
|
||||||
private donefunc: () => void;
|
|
||||||
|
|
||||||
init(testfunc: (game: Phaser.Game) => void, donefunc: () => void) {
|
|
||||||
this.testfunc = testfunc;
|
|
||||||
this.donefunc = donefunc;
|
|
||||||
}
|
|
||||||
|
|
||||||
create() {
|
|
||||||
this.testfunc(this.game);
|
|
||||||
this.game.destroy();
|
|
||||||
this.donefunc();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test game wrapper (use instead of jasmine 'it')
|
// Test game wrapper (use instead of jasmine 'it')
|
||||||
export function ingame_it(desc: string, func: (game: Phaser.Game) => void) {
|
export function ingame_it(desc: string, func: (game: Phaser.Game, state: Phaser.State) => void,
|
||||||
|
state: Phaser.State = null, ...stateargs: any[]) {
|
||||||
it(desc, (done: () => void) => {
|
it(desc, (done: () => void) => {
|
||||||
var game = new Phaser.Game(500, 500, Phaser.HEADLESS);
|
var game = new Phaser.Game(500, 500, Phaser.HEADLESS);
|
||||||
game.state.add("main", TestState);
|
|
||||||
game.state.start("main", true, true, func, done);
|
if (!state) {
|
||||||
|
state = new Phaser.State();
|
||||||
|
}
|
||||||
|
|
||||||
|
var orig_create = state.create;
|
||||||
|
state.create = function() {
|
||||||
|
orig_create.apply(state);
|
||||||
|
func(game, state);
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
game.state.add("test", state);
|
||||||
|
stateargs.unshift(true);
|
||||||
|
stateargs.unshift(true);
|
||||||
|
stateargs.unshift("test");
|
||||||
|
game.state.start.apply(game.state, stateargs);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue