63 lines
3.0 KiB
TypeScript
63 lines
3.0 KiB
TypeScript
module TK.SpaceTac.Specs {
|
|
testing("PinnedEffect", test => {
|
|
test.case("shows a textual description", check => {
|
|
check.equals(new PinnedEffect().getDescription(), "pinned");
|
|
check.equals(new PinnedEffect(true).getDescription(), "anchored");
|
|
});
|
|
|
|
test.case("prevents a ship from using its engine", check => {
|
|
let ship = new Ship();
|
|
TestTools.setShipModel(ship, 1, 1, 1);
|
|
|
|
let engine = TestTools.addEngine(ship, 100);
|
|
check.equals(engine.checkCannotBeApplied(ship), null, "engine can initially be used");
|
|
|
|
let cases: [string, BaseEffect][] = [
|
|
["soft pin", new PinnedEffect()],
|
|
["hard pin", new PinnedEffect(true)],
|
|
["sticky soft pin", new StickyEffect(new PinnedEffect())],
|
|
["sticky hard pin", new StickyEffect(new PinnedEffect(true))],
|
|
];
|
|
cases.forEach(([title, effect]) => {
|
|
check.in(title, check => {
|
|
ship.active_effects.add(effect);
|
|
check.equals(engine.checkCannotBeApplied(ship), ActionUnavailability.PINNED, "engine cannot be used when pinned");
|
|
ship.active_effects.remove(effect);
|
|
check.equals(engine.checkCannotBeApplied(ship), null, "engine can be used again");
|
|
});
|
|
});
|
|
});
|
|
|
|
test.case("prevents a ship from being moved by another effect, in hard mode", check => {
|
|
let battle = TestTools.createBattle();
|
|
let ship = battle.fleets[0].ships[0];
|
|
let enemy = battle.fleets[1].ships[0];
|
|
enemy.setArenaPosition(0, 500);
|
|
|
|
let effect = new RepelEffect(100);
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 1, "ship can initially be moved");
|
|
|
|
check.in("soft pin", check => {
|
|
let pin = enemy.active_effects.add(new PinnedEffect());
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 1, "ship can still be moved");
|
|
enemy.active_effects.remove(pin);
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 1, "ship can still be moved");
|
|
});
|
|
|
|
check.in("hard pin", check => {
|
|
let pin = enemy.active_effects.add(new PinnedEffect(true));
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 0, "ship cannot be moved");
|
|
enemy.active_effects.remove(pin);
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 1, "ship can be moved again");
|
|
});
|
|
|
|
check.in("sticky hard pin", check => {
|
|
let pin = enemy.active_effects.add(new StickyEffect(new PinnedEffect(true)));
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 0, "ship cannot be moved");
|
|
enemy.active_effects.remove(pin);
|
|
check.equals(effect.getOnDiffs(enemy, ship).length, 1, "ship can be moved again");
|
|
});
|
|
});
|
|
});
|
|
}
|