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

102 lines
3.8 KiB
TypeScript
Raw Normal View History

2017-09-24 22:23:22 +00:00
module TK.SpaceTac.Specs {
2017-10-26 21:47:13 +00:00
testing("GameSession", test => {
2017-02-16 22:59:41 +00:00
/**
* Compare two sessions
*/
function compare(session1: GameSession, session2: GameSession) {
2017-10-26 21:47:13 +00:00
test.check.equals(session1, session2);
2017-02-16 22:59:41 +00:00
}
/**
* 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-10-26 21:47:13 +00:00
test.case("serializes to a string", check => {
var session = new GameSession();
2017-02-16 22:59:41 +00:00
session.startQuickBattle();
// 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);
// 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);
});
2017-10-26 21:47:13 +00:00
test.case("applies battle outcome to bound player", check => {
let session = new GameSession();
2017-10-26 21:47:13 +00:00
check.equals(session.getBattle(), null);
// Victory case
let location1 = new StarLocation();
location1.encounter = new Fleet();
session.player.fleet.setLocation(location1);
2017-10-26 21:47:13 +00:00
check.notequals(session.getBattle(), null);
check.notequals(location1.encounter, null);
let battle = nn(session.getBattle());
battle.endBattle(session.player.fleet);
let spyloot = check.patch(nn(battle.outcome), "createLoot", null);
session.setBattleEnded();
2017-10-26 21:47:13 +00:00
check.notequals(session.getBattle(), null);
check.equals(location1.encounter, null);
2017-10-29 21:08:55 +00:00
check.called(spyloot, 1);
// Defeat case
let location2 = new StarLocation(location1.star);
location2.encounter = new Fleet();
session.player.fleet.setLocation(location2);
2017-10-26 21:47:13 +00:00
check.notequals(session.getBattle(), null);
check.notequals(location2.encounter, null);
battle = nn(session.getBattle());
battle.endBattle(null);
spyloot = check.patch(nn(battle.outcome), "createLoot", null);
session.setBattleEnded();
2017-10-26 21:47:13 +00:00
check.notequals(session.getBattle(), null);
check.notequals(location2.encounter, null);
2017-10-29 21:08:55 +00:00
check.called(spyloot, 0);
});
2017-03-23 18:58:09 +00:00
2017-10-26 21:47:13 +00:00
test.case("generates a new campaign", check => {
2017-03-23 18:58:09 +00:00
let session = new GameSession();
session.startNewGame(false);
2017-10-26 21:47:13 +00:00
check.notequals(session.player, null);
check.equals(session.player.fleet.ships.length, 0);
check.equals(session.player.fleet.credits, 0);
check.equals(session.player.universe.stars.length, 50);
check.equals(session.getBattle(), null);
check.equals(session.start_location.shop, null);
check.equals(session.start_location.encounter, null);
check.equals(session.start_location.encounter_gen, true);
session.setCampaignFleet();
2017-10-26 21:47:13 +00:00
check.equals(session.player.fleet.ships.length, 2);
check.equals(session.player.fleet.credits, 0);
check.same(session.player.fleet.location, session.start_location);
2017-03-23 18:58:09 +00:00
});
2017-10-26 21:47:13 +00:00
/*test.case("can generate lots of new games", check => {
range(20).forEach(() => {
let session = new GameSession();
session.startNewGame();
2017-10-26 21:47:13 +00:00
check.equals(session.universe.stars.length, 50);
});
2017-06-13 21:24:33 +00:00
});*/
});
}