1
0
Fork 0
spacetac/src/core/GameSession.spec.ts

103 lines
3.8 KiB
TypeScript

module TS.SpaceTac.Specs {
describe("GameSession", () => {
/**
* Compare two sessions
*/
function compare(session1: GameSession, session2: GameSession) {
expect(session1).toEqual(session2);
}
/**
* Apply deterministic game steps
*/
function applyGameSteps(session: GameSession): void {
var battle = nn(session.getBattle());
battle.advanceToNextShip();
// TODO Make some fixed moves (AI?)
battle.endBattle(battle.fleets[0]);
}
it("serializes to a string", function () {
var session = new GameSession();
session.startQuickBattle();
// Dump and reload
var dumped = session.saveToString();
var loaded_session = GameSession.loadFromString(dumped);
// Check equality
compare(loaded_session, session);
// Apply game steps
applyGameSteps(session);
applyGameSteps(loaded_session);
// Check equality after game steps
compare(loaded_session, session);
});
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);
});
it("generates a new campaign", function () {
let session = new GameSession();
session.startNewGame(false);
expect(session.player).not.toBeNull();
expect(session.player.fleet.ships.length).toBe(0);
expect(session.player.fleet.credits).toBe(0);
expect(session.player.universe.stars.length).toBe(50);
expect(session.getBattle()).toBeNull();
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();
expect(session.player.fleet.ships.length).toBe(2);
expect(session.player.fleet.credits).toBe(500);
expect(session.player.fleet.location).toBe(session.start_location);
});
/*it("can generate lots of new games", function () {
range(20).forEach(() => {
let session = new GameSession();
session.startNewGame();
expect(session.universe.stars.length).toBe(50);
});
});*/
});
}