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

92 lines
3 KiB
TypeScript
Raw Normal View History

/// <reference path="events/BaseLogEvent.ts"/>
2014-12-31 00:00:00 +00:00
2017-02-09 00:00:35 +00:00
module TS.SpaceTac {
2014-12-31 00:00:00 +00:00
// Check a single game log event
function checkEvent(got: BaseLogEvent, ship: Ship, code: string,
2017-03-09 17:11:00 +00:00
target_ship: Ship | null = null, target_x: number | null = null, target_y: number | null = null): void {
2014-12-31 00:00:00 +00:00
if (target_ship) {
if (target_x === null) {
target_x = target_ship.arena_x;
}
if (target_y === null) {
target_y = target_ship.arena_y;
}
}
expect(got.ship).toBe(ship);
expect(got.code).toEqual(code);
2017-03-09 17:11:00 +00:00
if (got.target) {
expect(got.target.ship).toBe(target_ship);
if (target_x === null) {
expect(got.target.x).toBeNull();
} else {
expect(got.target.x).toBeCloseTo(target_x, 0.000001);
}
if (target_y === null) {
expect(got.target.y).toBeNull();
} else {
expect(got.target.y).toBeCloseTo(target_y, 0.000001);
}
2014-12-31 00:00:00 +00:00
} else {
2017-03-09 17:11:00 +00:00
fail("Got no target");
2014-12-31 00:00:00 +00:00
}
}
2014-12-31 00:00:00 +00:00
// Fake event
class FakeEvent extends BaseLogEvent {
2014-12-31 00:00:00 +00:00
constructor() {
2017-03-09 17:11:00 +00:00
super("fake", new Ship());
2014-12-31 00:00:00 +00:00
}
}
2014-12-31 00:00:00 +00:00
describe("BattleLog", function () {
2014-12-31 00:00:00 +00:00
it("forwards events to subscribers, until unsubscribe", function () {
var log = new BattleLog();
var received: BaseLogEvent[] = [];
2014-12-31 00:00:00 +00:00
var fake = new FakeEvent();
2015-01-07 00:00:00 +00:00
var sub = log.subscribe(function (event: BaseLogEvent) {
2014-12-31 00:00:00 +00:00
received.push(event);
});
log.add(fake);
expect(received).toEqual([fake]);
log.add(fake);
expect(received).toEqual([fake, fake]);
log.unsubscribe(sub);
log.add(fake);
expect(received).toEqual([fake, fake]);
});
2014-12-31 00:00:00 +00:00
it("logs ship change events", function () {
var battle = Battle.newQuickRandom();
battle.log.clear();
battle.log.addFilter("value");
2014-12-31 00:00:00 +00:00
expect(battle.log.events.length).toBe(0);
battle.advanceToNextShip();
expect(battle.log.events.length).toBe(1);
checkEvent(battle.log.events[0], battle.play_order[0], "ship_change", battle.play_order[1]);
});
2014-12-31 00:00:00 +00:00
it("can receive simulated initial state events", function () {
2017-03-09 17:11:00 +00:00
let battle = Battle.newQuickRandom();
let playing = nn(battle.playing_ship);
battle.log.clear();
battle.log.addFilter("value");
2014-12-31 00:00:00 +00:00
expect(battle.log.events.length).toBe(0);
battle.injectInitialEvents();
expect(battle.log.events.length).toBe(9);
for (var i = 0; i < 8; i++) {
2015-01-07 00:00:00 +00:00
checkEvent(battle.log.events[i], battle.play_order[i], "move", null,
battle.play_order[i].arena_x, battle.play_order[i].arena_y);
2014-12-31 00:00:00 +00:00
}
2017-03-09 17:11:00 +00:00
checkEvent(battle.log.events[8], playing, "ship_change", playing);
2014-12-31 00:00:00 +00:00
});
2014-12-31 00:00:00 +00:00
});
2015-01-07 00:00:00 +00:00
}