2017-09-24 22:23:22 +00:00
|
|
|
module TK.SpaceTac.Specs {
|
2017-02-09 00:26:04 +00:00
|
|
|
describe("GameSession", () => {
|
2017-02-16 22:59:41 +00:00
|
|
|
/**
|
|
|
|
* Compare two sessions
|
|
|
|
*/
|
|
|
|
function compare(session1: GameSession, session2: GameSession) {
|
|
|
|
expect(session1).toEqual(session2);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Apply deterministic game steps
|
|
|
|
*/
|
|
|
|
function applyGameSteps(session: GameSession): void {
|
2017-03-09 17:11:00 +00:00
|
|
|
var battle = nn(session.getBattle());
|
2017-02-16 22:59:41 +00:00
|
|
|
battle.advanceToNextShip();
|
|
|
|
// TODO Make some fixed moves (AI?)
|
2017-03-14 22:28:07 +00:00
|
|
|
battle.endBattle(battle.fleets[0]);
|
2017-02-16 22:59:41 +00:00
|
|
|
}
|
|
|
|
|
2017-03-15 22:00:15 +00:00
|
|
|
it("serializes to a string", function () {
|
2015-04-07 00:00:00 +00:00
|
|
|
var session = new GameSession();
|
2017-02-16 22:59:41 +00:00
|
|
|
session.startQuickBattle();
|
2015-04-07 00:00:00 +00:00
|
|
|
|
|
|
|
// Dump and reload
|
|
|
|
var dumped = session.saveToString();
|
|
|
|
var loaded_session = GameSession.loadFromString(dumped);
|
|
|
|
|
|
|
|
// Check equality
|
2017-02-16 22:59:41 +00:00
|
|
|
compare(loaded_session, session);
|
2015-04-07 00:00:00 +00:00
|
|
|
|
|
|
|
// Apply game steps
|
|
|
|
applyGameSteps(session);
|
|
|
|
applyGameSteps(loaded_session);
|
|
|
|
|
|
|
|
// Check equality after game steps
|
2017-02-16 22:59:41 +00:00
|
|
|
compare(loaded_session, session);
|
2015-04-07 00:00:00 +00:00
|
|
|
});
|
2017-03-15 22:00:15 +00:00
|
|
|
|
|
|
|
it("applies battle outcome to bound player", function () {
|
|
|
|
let session = new GameSession();
|
|
|
|
expect(session.getBattle()).toBeNull();
|
|
|
|
|
|
|
|
// Victory case
|
|
|
|
let location1 = new StarLocation();
|
|
|
|
location1.encounter = new Fleet();
|
|
|
|
session.player.fleet.setLocation(location1);
|
|
|
|
expect(session.getBattle()).not.toBeNull();
|
|
|
|
expect(location1.encounter).not.toBeNull();
|
|
|
|
|
|
|
|
let battle = nn(session.getBattle());
|
|
|
|
battle.endBattle(session.player.fleet);
|
|
|
|
let spyloot = spyOn(battle.outcome, "createLoot").and.stub();
|
|
|
|
session.setBattleEnded();
|
|
|
|
expect(session.getBattle()).not.toBeNull();
|
|
|
|
expect(location1.encounter).toBeNull();
|
|
|
|
expect(spyloot).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
|
|
// Defeat case
|
|
|
|
let location2 = new StarLocation(location1.star);
|
|
|
|
location2.encounter = new Fleet();
|
|
|
|
session.player.fleet.setLocation(location2);
|
|
|
|
expect(session.getBattle()).not.toBeNull();
|
|
|
|
expect(location2.encounter).not.toBeNull();
|
|
|
|
|
|
|
|
battle = nn(session.getBattle());
|
|
|
|
battle.endBattle(null);
|
|
|
|
spyloot = spyOn(battle.outcome, "createLoot").and.stub();
|
|
|
|
session.setBattleEnded();
|
|
|
|
expect(session.getBattle()).not.toBeNull();
|
|
|
|
expect(location2.encounter).not.toBeNull();
|
|
|
|
expect(spyloot).toHaveBeenCalledTimes(0);
|
|
|
|
});
|
2017-03-23 18:58:09 +00:00
|
|
|
|
|
|
|
it("generates a new campaign", function () {
|
|
|
|
let session = new GameSession();
|
|
|
|
|
2017-05-31 23:11:29 +00:00
|
|
|
session.startNewGame(false);
|
2017-03-23 18:58:09 +00:00
|
|
|
expect(session.player).not.toBeNull();
|
2017-05-31 23:11:29 +00:00
|
|
|
expect(session.player.fleet.ships.length).toBe(0);
|
|
|
|
expect(session.player.fleet.credits).toBe(0);
|
2017-03-23 18:58:09 +00:00
|
|
|
expect(session.player.universe.stars.length).toBe(50);
|
|
|
|
expect(session.getBattle()).toBeNull();
|
2017-05-31 23:11:29 +00:00
|
|
|
expect(session.start_location.shop).not.toBeNull();
|
|
|
|
expect(nn(session.start_location.shop).getStock().length).toBeGreaterThan(20);
|
|
|
|
expect(session.start_location.encounter).toBeNull();
|
|
|
|
expect(session.start_location.encounter_gen).toBe(true);
|
|
|
|
|
|
|
|
session.setCampaignFleet();
|
2017-07-02 18:21:04 +00:00
|
|
|
expect(session.player.fleet.ships.length).toBe(2);
|
2017-05-31 23:11:29 +00:00
|
|
|
expect(session.player.fleet.credits).toBe(500);
|
|
|
|
expect(session.player.fleet.location).toBe(session.start_location);
|
2017-03-23 18:58:09 +00:00
|
|
|
});
|
2017-05-18 20:32:04 +00:00
|
|
|
|
2017-06-13 21:24:33 +00:00
|
|
|
/*it("can generate lots of new games", function () {
|
2017-05-19 22:01:06 +00:00
|
|
|
range(20).forEach(() => {
|
2017-05-18 20:32:04 +00:00
|
|
|
let session = new GameSession();
|
|
|
|
session.startNewGame();
|
|
|
|
expect(session.universe.stars.length).toBe(50);
|
|
|
|
});
|
2017-06-13 21:24:33 +00:00
|
|
|
});*/
|
2017-02-09 00:26:04 +00:00
|
|
|
});
|
2015-04-07 00:00:00 +00:00
|
|
|
}
|