1
0
Fork 0
spacetac/src/core/actions/BaseAction.spec.ts

117 lines
5.1 KiB
TypeScript

module TK.SpaceTac.Specs {
testing("BaseAction", test => {
test.case("may be applied and reverted", check => {
let battle = TestTools.createBattle();
let ship = nn(battle.playing_ship);
TestTools.setShipModel(ship, 100, 0, 10);
let action = TestTools.addWeapon(ship, 0, 3, 100, 50);
action.configureCooldown(2, 1);
TestTools.actionChain(check, battle, [
[ship, action, Target.newFromLocation(0, 0)],
[ship, action, Target.newFromLocation(0, 0)],
[ship, EndTurnAction.SINGLETON, undefined],
], [
check => {
check.equals(ship.getValue("power"), 10, "power");
let cooldown = ship.actions.getCooldown(action);
check.equals(cooldown.uses, 0, "uses");
check.equals(cooldown.heat, 0, "heat");
},
check => {
check.equals(ship.getValue("power"), 7, "power");
let cooldown = ship.actions.getCooldown(action);
check.equals(cooldown.uses, 1, "uses");
check.equals(cooldown.heat, 0, "heat");
},
check => {
check.equals(ship.getValue("power"), 4, "power");
let cooldown = ship.actions.getCooldown(action);
check.equals(cooldown.uses, 2, "uses");
check.equals(cooldown.heat, 1, "heat");
},
check => {
check.equals(ship.getValue("power"), 10, "power");
let cooldown = ship.actions.getCooldown(action);
check.equals(cooldown.uses, 0, "uses");
check.equals(cooldown.heat, 0, "heat");
},
]);
})
test.case("checks against remaining power", check => {
let action = new BaseAction("test");
check.patch(action, "getPowerUsage", () => 3);
let ship = new Ship();
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.NO_SUCH_ACTION);
ship.actions.addCustom(action);
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.POWER);
ship.setValue("power", 5);
check.equals(action.checkCannotBeApplied(ship), null);
check.equals(action.checkCannotBeApplied(ship, 4), null);
check.equals(action.checkCannotBeApplied(ship, 3), null);
check.equals(action.checkCannotBeApplied(ship, 2), ActionUnavailability.POWER);
ship.setValue("power", 3);
check.equals(action.checkCannotBeApplied(ship), null);
ship.setValue("power", 2);
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.POWER);
})
test.case("checks against overheat", check => {
let action = new BaseAction("test");
let ship = new Ship();
ship.actions.addCustom(action);
let cooldown = ship.actions.getCooldown(action);
check.equals(action.checkCannotBeApplied(ship), null);
cooldown.use();
check.equals(action.checkCannotBeApplied(ship), null);
cooldown.configure(2, 3);
check.equals(action.checkCannotBeApplied(ship), null);
cooldown.use();
check.equals(action.checkCannotBeApplied(ship), null);
cooldown.use();
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.OVERHEATED);
cooldown.cool();
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.OVERHEATED);
cooldown.cool();
check.equals(action.checkCannotBeApplied(ship), ActionUnavailability.OVERHEATED);
cooldown.cool();
check.equals(action.checkCannotBeApplied(ship), null);
})
test.case("helps applying a targetting filter", check => {
let fleet1 = new Fleet();
let fleet2 = new Fleet();
let ship1a = fleet1.addShip();
let ship1b = fleet1.addShip();
let ship2a = fleet2.addShip();
let ship2b = fleet2.addShip();
let ships = [ship1a, ship1b, ship2a, ship2b];
check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ALL),
[ship1a, ship1b, ship2a, ship2b], "ALL");
check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ALL_BUT_SELF),
[ship1b, ship2a, ship2b], "ALL_BUT_SELF");
check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ALLIES),
[ship1a, ship1b], "ALLIES");
check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ALLIES_BUT_SELF),
[ship1b], "ALLIES_BUT_SELF");
check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ENEMIES),
[ship2a, ship2b], "ENEMIES");
});
});
}