/// module TS.SpaceTac { describe("FireWeaponAction", function () { it("constructs correctly", function () { let equipment = new Equipment(SlotType.Weapon, "testweapon"); let action = new FireWeaponAction(equipment); expect(action.code).toEqual("fire-testweapon"); expect(action.name).toEqual("Fire"); expect(action.equipment).toBe(equipment); expect(action.needs_target).toBe(true); }); it("applies effects to alive ships in blast radius", function () { let fleet = new Fleet(); let ship = new Ship(fleet); let equipment = new Equipment(SlotType.Weapon, "testweapon"); equipment.blast = 10; equipment.ap_usage = 5; equipment.distance = 100; let effect = new BaseEffect("testeffect"); let mock_apply = spyOn(effect, "applyOnShip").and.stub(); equipment.target_effects.push(effect); let action = new FireWeaponAction(equipment, true); TestTools.setShipAP(ship, 10); let ship1 = new Ship(fleet); ship1.setArenaPosition(65, 72); let ship2 = new Ship(fleet); ship2.setArenaPosition(45, 48); let ship3 = new Ship(fleet); ship3.setArenaPosition(45, 48); ship3.alive = false; let battle = new Battle(fleet); battle.play_order = [ship, ship1, ship2, ship3]; battle.playing_ship = ship; fleet.setBattle(battle); action.apply(ship, Target.newFromLocation(50, 50)); expect(mock_apply).toHaveBeenCalledTimes(1); expect(mock_apply).toHaveBeenCalledWith(ship2); }); it("transforms ship target in location target, when the weapon has blast radius", function () { let ship1 = new Ship(); ship1.setArenaPosition(50, 10); let ship2 = new Ship(); ship2.setArenaPosition(150, 10); let weapon = TestTools.addWeapon(ship1, 1, 0, 100, 30); let target = weapon.action.checkTarget(ship1, new Target(150, 10)); expect(target).toEqual(new Target(150, 10)); target = weapon.action.checkTarget(ship1, Target.newFromShip(ship2)); expect(target).toEqual(new Target(150, 10)); ship1.setArenaPosition(30, 10); target = weapon.action.checkTarget(ship1, Target.newFromShip(ship2)); expect(target).toEqual(new Target(130, 10)); ship1.setArenaPosition(0, 10); target = weapon.action.checkTarget(ship1, Target.newFromShip(ship2)); expect(target).toEqual(new Target(100, 10)); }); }); }