125 lines
5.3 KiB
TypeScript
125 lines
5.3 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.setShipAP(ship, 10, 4);
|
|
let equipment = TestTools.addWeapon(ship, 0, 3, 100, 50);
|
|
let action = nn(equipment.action);
|
|
action.cooldown.configure(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");
|
|
check.equals(action.cooldown.uses, 0, "uses");
|
|
check.equals(action.cooldown.heat, 0, "heat");
|
|
},
|
|
check => {
|
|
check.equals(ship.getValue("power"), 7, "power");
|
|
check.equals(action.cooldown.uses, 1, "uses");
|
|
check.equals(action.cooldown.heat, 0, "heat");
|
|
},
|
|
check => {
|
|
check.equals(ship.getValue("power"), 4, "power");
|
|
check.equals(action.cooldown.uses, 2, "uses");
|
|
check.equals(action.cooldown.heat, 1, "heat");
|
|
},
|
|
check => {
|
|
check.equals(ship.getValue("power"), 8, "power");
|
|
check.equals(action.cooldown.uses, 0, "uses");
|
|
check.equals(action.cooldown.heat, 0, "heat");
|
|
},
|
|
]);
|
|
})
|
|
|
|
test.case("checks if equipment can be used with remaining AP", check => {
|
|
var equipment = new Equipment(SlotType.Hull);
|
|
var action = new BaseAction("test", equipment);
|
|
check.patch(action, "getActionPointsUsage", () => 3);
|
|
var ship = new Ship();
|
|
ship.addSlot(SlotType.Hull).attach(equipment);
|
|
|
|
check.equals(action.checkCannotBeApplied(ship), "not enough 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), "not enough power");
|
|
|
|
ship.setValue("power", 3);
|
|
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
|
|
ship.setValue("power", 2);
|
|
|
|
check.equals(action.checkCannotBeApplied(ship), "not enough power");
|
|
})
|
|
|
|
test.case("checks if equipment can be used with overheat", check => {
|
|
let equipment = new Equipment();
|
|
let action = new BaseAction("test", equipment);
|
|
let ship = new Ship();
|
|
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
check.same(action.getUsesBeforeOverheat(), Infinity);
|
|
|
|
equipment.cooldown.use();
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
check.same(action.getUsesBeforeOverheat(), Infinity);
|
|
|
|
equipment.cooldown.configure(2, 3);
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
check.equals(action.getUsesBeforeOverheat(), 2);
|
|
|
|
equipment.cooldown.use();
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
check.equals(action.getUsesBeforeOverheat(), 1);
|
|
check.equals(action.getCooldownDuration(), 0);
|
|
|
|
equipment.cooldown.use();
|
|
check.equals(action.checkCannotBeApplied(ship), "overheated");
|
|
check.equals(action.getUsesBeforeOverheat(), 0);
|
|
check.equals(action.getCooldownDuration(), 3);
|
|
|
|
equipment.cooldown.cool();
|
|
check.equals(action.checkCannotBeApplied(ship), "overheated");
|
|
check.equals(action.getCooldownDuration(), 2);
|
|
|
|
equipment.cooldown.cool();
|
|
check.equals(action.checkCannotBeApplied(ship), "overheated");
|
|
check.equals(action.getCooldownDuration(), 1);
|
|
|
|
equipment.cooldown.cool();
|
|
check.equals(action.checkCannotBeApplied(ship), null);
|
|
check.equals(action.getCooldownDuration(), 0);
|
|
check.equals(action.getCooldownDuration(true), 3);
|
|
})
|
|
|
|
test.case("wears down equipment and power generators", check => {
|
|
let battle = TestTools.createBattle();
|
|
let ship = battle.play_order[0];
|
|
TestTools.setShipAP(ship, 10);
|
|
let power = ship.listEquipment(SlotType.Power)[0];
|
|
let equipment = new Equipment(SlotType.Weapon);
|
|
let action = new BaseAction("test", equipment);
|
|
equipment.action = action;
|
|
ship.addSlot(SlotType.Weapon).attach(equipment);
|
|
|
|
check.patch(action, "checkTarget", (ship: Ship, target: Target) => target);
|
|
|
|
check.equals(power.wear, 0, "power wear");
|
|
check.equals(equipment.wear, 0, "equipment wear");
|
|
action.apply(battle, ship);
|
|
|
|
check.equals(power.wear, 1, "power wear");
|
|
check.equals(equipment.wear, 1, "equipment wear");
|
|
})
|
|
});
|
|
}
|